Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1040to1044
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Recordset aus Function übergeben

Recordset aus Function übergeben
19.01.2009 17:37:00
Mike
Hallo zusammen,
weiß jemand, ob und wie ich ein Recordset aus einer Function zurückgeben kann?
Um das Problem klar zu machen: ich rufe mit bestimmten Parametern eine Function auf, in der ein rs erstellt wir. Jetzt soll dieses rs zurückgegeben werden, damit ich je nach Bedarf damit was machen kann. Wenn ich aber (noch innerhalb der Function) die Verbindung und das rs schließe, dann ist das ja dann leer.
Da muss es doch eine Möglichkeit geben, oder?
Der Vorteil wäre, dass die Verbindung zur DB usw nur einmal geschreiben werden müsste und über Functionsaufruf überall verfügbar wäre.
Gruß
Mike

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Recordset aus Function übergeben
19.01.2009 19:54:35
Roland
Hallo Mike,
Du kannst an zwei Stellen ansetzen: entweder definierst Du den RS als öffentliche Variable (geht am einfachsten) oder Du befasst dich mal mit connection pooling.
Gruß von
Roland Hochhäuser
AW: Recordset aus Function übergeben
19.01.2009 20:05:00
Mike
Hallo Roland,
du schon wieder :)
Eine öffentliche Variable ist nicht so gut: die Function soll ja die Daten ziehen und die Verbindung dann auch wieder schliessen. Mit dem Schließen wären die Daten ja auch nicht mhr da. Mit Übergabe hätte ich die Möglichkeit, die Funktion beliebig aufzurufen, Übergabe des Query uvm.
Ich hatte mehr daran gedacht, die Daten in eine statische Variable / Array zu packen und einfach zu übergeben. Zur Not muss ich die Daten in ein Sheet schreiben, das wäre aber die letzte, unelegante Möglichkeit.
Connection Pooling sagt mir nichts, google ich gleich mal. Hast du gute links?
Gruß
Mike
Anzeige
AW: Recordset aus Function übergeben
19.01.2009 20:29:00
Roland
Hallo Mike,
"Array" ist das Zauberwort, Variable ziehe ich zurück ;-) Connection pooling ist relativ aufwendig, hat aber den Vorteil, dass immer aktuelle Daten zur Verfügung stehen (ich unterstelle mal Mehrbenutzerbetrieb an einer Datebank) . Zur Begriffserklärung z.B. hier: http://books.google.de/books?id=YzjzbpUREA8C&pg=PA239&lpg=PA239&dq=Connection+pooling+begriff&source=bl&ots=M6KCzEGDQi&sig=6tTOyXZG0mETgJ-p9x2X-L_NB7o&hl=de&sa=X&oi=book_result&resnum=5&ct=result
Gruß
Roland Hochhäuser
Anzeige
AW: Recordset aus Function übergeben
20.01.2009 13:53:43
Mike
ok, hab hier mal was geschrieben, was auch läuft:

Sub TestADO()
Dim Frage As String, Ziel As Worksheet
Dim db As String
Dim conn As New ADODB.Connection
Dim server, Driver As String
Dim UID, PWD As String
Dim x, y As Long
Dim AnzahlZeilen, AnzahlSpalten As Long
Dim rs As ADODB.Recordset
Dim arrRs() As Variant
db = "db1"
Select Case db
Case "db1"
server = Server1
Driver = "SQL Server"
UID = UID1
PWD = PWD1
Case "db2"
server = Server2
Driver = "MySQL ODBC 5.1 Driver"
UID = UID2
PWD = PWD2
End Select
Frage = "Select * from db1.table"
Set conn = New ADODB.Connection
conn.Open _
"DRIVER={" & Driver & "}" & _
";SERVER=" & server & _
";UID=" & UID & _
";PWD=" & PWD
Set rs = New ADODB.Recordset
rs.Open Frage, conn, adOpenKeyset, adLockReadOnly
With rs
.MoveFirst
x = 1
'Anzahl Zeilen ermitteln / Recordcount geht nicht (?)
AnzahlZeilen = 1
While Not .EOF
.MoveNext
AnzahlZeilen = AnzahlZeilen + 1
Wend
AnzahlSpalten = rs.Fields.Count
ReDim arrRs(1 To AnzahlZeilen, 1 To AnzahlSpalten)
.MoveFirst
While Not .EOF
For y = 1 To AnzahlSpalten
Debug.Print rs(y - 1)
arrRs(x, y) = rs(y - 1).Value
Next y
.MoveNext
x = x + 1
Wend
End With
On Error Resume Next
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
On Error GoTo 0
End Sub


Soweit, so gut. Jetzt wollte ich das wie oben beschrieben aufteilen und über


Function aufrufen:


Sub abcd()
Dim arrRs() As Variant
arrRs = rs2Array("db1", "Select * from db1.table")
End Sub



Function rs2Array(db As String, Frage As String)
' unter Extras - Verweise muss Microsoft Active X Data Objects 2.x library aktiviert werden!
Dim conn As New ADODB.Connection
Dim server, Driver As String
Dim UID, PWD As String
Dim x, y As Long
Dim AnzahlZeilen, AnzahlSpalten As Long
Dim rs As ADODB.Recordset
Select Case db
Case "db1"
server = Server1
Driver = "SQL Server"
UID = UID1
PWD = PWD1
Case "db2"
server = Server2
Driver = "MySQL ODBC 5.1 Driver"
UID = UID2
PWD = PWD2
End Select
Set conn = New ADODB.Connection
conn.Open _
"DRIVER={" & Driver & "}" & _
";SERVER=" & server & _
";UID=" & UID & _
";PWD=" & PWD & _
Set rs = New ADODB.Recordset
rs.Open Frage, conn, adOpenStatic
With rs
.MoveFirst
'Anzahl Zeilen ermitteln / Recordcount geht nicht (?)
AnzahlZeilen = 1
While Not .EOF
.MoveNext
AnzahlZeilen = AnzahlZeilen + 1
Wend
AnzahlSpalten = rs.Fields.Count
ReDim rs2Array(1 To AnzahlZeilen, 1 To AnzahlSpalten)
.MoveFirst
x = 1
While Not .EOF
For y = 1 To AnzahlSpalten
Debug.Print rs(y - 1)
rs2Array(x, y) = rs(y - 1).Value
Next y
.MoveNext
x = x + 1
Wend
End With
'Close connections
On Error Resume Next
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
On Error GoTo 0
End Function


Das gibts dann ja einen Fehler beim Redim des Array.
Ich brauch einfach neuen Input, so komm ich nicht weiter. Wär toll, wenn jemand eine Anregung hat.
Cheers
Mike

Anzeige
AW: Recordset aus Function übergeben
20.01.2009 15:42:17
Mike
dann bin ich mal raus ...
und nutzt wieder meine old-school odbc-verbindung.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige