Array aus Funktion zurückgeben

Schnüdde

Grünschnabel
Hallo Leute,

habe folgendes Problem.

Ich habe eine main funktion welche alle Funktionen nacheinander ausführt ( es ist keine Form erforderlich ).
Am Anfang wird eine SQL Abfrage gemacht welche aus einer Datenbank nacheinander Einträge suchen und in einen Array schreiben soll.
Diesen soll er dann in die Mainfunktion zurückgeben.
Allerdings wird mir immer der Fehler "Type dismatch" gemeldet.

Hier mal ein paar Programmschnipsel.
Code:
Aus der Main:
Dim result() As String
result = cl_SQL_Commands.Comp_auslesen

Code:
die cl_SQL_Commands:
    Dim Line_Type() As String
    Dim SQLCommand As String
    Dim SearchString As String
    Dim SearchResult As String
    Dim OutPutItem As String
    Dim SQL As New cl_access_SQL
    
    
    SQLCommand = "SELECT * from Tabelle;"
    SearchString = "ComputerName"
    SearchResult = "?"
    OutPutItem = "ComputerName"
    Line_Type = SQL.SendSQL(SQLCommand, SearchString, SearchResult, OutPutItem)
    
    Comp_auslesen = Line_Type
Code:
Und hier die cl_access_SQL:
Public Function SendSQL(ByVal SQLCommand As String, ByVal SearchString As String, ByVal SearchResult As String, ByVal OutPutItem As String) As String
    Dim Conn As ADODB.Connection
    Dim RS As ADODB.Recordset
    Dim result() As String
    Dim Inifile
    Dim dbDatabase
    Dim dbServer
    Dim dbUser
    Dim dbPasswd
    
    Inifile = cl_inifile.IniPath()
    
    dbDatabase = GetINISetting(Inifile, "Database", "dbname", "")
    dbServer = GetINISetting(Inifile, "Database", "dbserver", "")
    dbUser = GetINISetting(Inifile, "Database", "dbuser", "")
    dbPasswd = GetINISetting(Inifile, "Database", "dbpasswd", "")
        
    If Len(dbDatabase) = 0 Or Len(dbServer) = 0 Or Len(dbUser) = 0 Or Len(dbPasswd) = 0 Then
        End
    End If
     
     Set Conn = New ADODB.Connection
     Conn.Provider = "MSDASQL"
     Conn.Mode = adModeRead
     Conn.CursorLocation = adUseClient
     Conn.Open "DRIVER={SQL Server};" & _
               "DATABASE=" & dbDatabase & ";" & _
               "SERVER=" & dbServer & ";", _
               "" & dbUser & "", "" & dbPasswd & ""
               
     Set RS = New ADODB.Recordset
     RS.CursorLocation = adUseClient
     RS.Source = SQLCommand
     Set RS.ActiveConnection = Conn
     RS.CursorType = adOpenForwardOnly
     RS.LockType = adLockReadOnly
     RS.Open
     Dim i
     i = 0
     Do While Not RS.EOF
         
         result(i) = RS.Fields.Item(OutPutItem).Value
         i = i + 1
        
        RS.MoveNext
    Loop
                        
    RS.Close
    Set RS = Nothing
    
    Conn.Close
    Set Conn = Nothing
    SendSQL = result
End Function

Ich brauche eigentlich nur in der Startprozedur dann alle Computer in einem Array gelistet, bekomme aber nur Fehler.

Hat jemand nen Rat wie ich das machen könnte das es dann geht?
 
Hallo,
du hast die result() zweimal deklariert in der Main und in der Funktion. Daher ist die result() ausserhalb der Funktion nicht mehr gültig.
Deklariere die result() im allgemeinen Teil von VB als Public (und nur da!) dann ist diese Variable in allen Modulen und Funktionen gültig ( Das ist zwar nicht der beste Programmierstiel aber damit sollte es funktionieren).

mfg
Nobby
 
Danke für deine Antwort.
Habe mich gestern noch länger damit beschäftigt und bin danach auf die Idee gekommen das mal mit einer Collection zu machen.
Und siehe da, es funktioniert.
Habe die Collection in der Main als Public Collection deklariert und nun klappt alles.
Thema kann also geschlossen werden.
 

Neue Beiträge

Zurück