ADO-Recordset als Returnwert einer Funktion

28/10/2009 - 15:01 von Thomas Hase | Report spam
Hallo NG,

ich mühe mich vergeblich ab, ein
ADO-Recordset als Rückgabewert einer Funktion
zu erzeugen.


der Code sieht auszugsweise so aus:


Public Function fktGetFields(S As uServer, strTable As String) As
ADODB.Recordset


Dim conn As New ADODB.Connection

conn.ConnectionString = BuildConnectString(S)

conn.CursorLocation = adUseClient 'wg Lesezeichen
conn.Open

Dim rstSchema As ADODB.Recordset

Set rstSchema = conn.OpenSchema(adSchemaColumns, Array(Empty, _
Empty, "adressen", Empty))

Dim rsKopie As ADODB.Recordset
Set rsKopie = rstSchema.Clone 'Klone das RS, damit ich die
connection zumachen kann

rstSchema.Close
conn.Close




Sobald ich die connection schließe ist auch das geclonte RS dahin.
Die Connection könnte ich natürlich offenlassen, was aber nicht sauber
programmiert ist

Geht die Rückgabe nur über ein ungebundenes RS oder gibt es noch
andere Möglichkeiten?

Gibt es eine Lösung?
 

Lesen sie die antworten

#1 Dieter Strassner
28/10/2009 - 17:13 | Warnen spam
Hallo Thomas,

ich mühe mich vergeblich ab, ein
ADO-Recordset als Rückgabewert einer Funktion
zu erzeugen.


der Code sieht auszugsweise so aus:


Public Function fktGetFields(S As uServer, strTable As String) As
ADODB.Recordset


Dim conn As New ADODB.Connection

conn.ConnectionString = BuildConnectString(S)

conn.CursorLocation = adUseClient 'wg Lesezeichen
conn.Open

Dim rstSchema As ADODB.Recordset

Set rstSchema = conn.OpenSchema(adSchemaColumns, Array(Empty, _
Empty, "adressen", Empty))

Dim rsKopie As ADODB.Recordset
Set rsKopie = rstSchema.Clone 'Klone das RS, damit ich die
connection zumachen kann

rstSchema.Close
conn.Close




Sobald ich die connection schließe ist auch das geclonte RS dahin.
Die Connection könnte ich natürlich offenlassen, was aber nicht sauber
programmiert ist

Geht die Rückgabe nur über ein ungebundenes RS oder gibt es noch
andere Möglichkeiten?

Gibt es eine Lösung?



Ja gibt es. Setze die ActiveConnection-Property deines rs auf Nothing.
Danach kann die Connection geschlossen werden. Ein rs.Clone bringt hier
nichts
Aber eine Zuweisung zur Ergebnisausgabe würde etwas bringen:

Set fktGetFields=rstSchema

Statt einem extra rs-Object kan auch auch gleich der Funktionsname
herhalten, damit wàre das rsSchema überflüssig.

Der Aufrufer schliesst das empfangene rs und setzt es auf Nothing, dann wird
der Speicherplatz wieder freigegeben.


Viele Grüße

Dieter


Rückfragen bitte nur in die Newsgroup!

EDV-Kommunikation Strassner e.K.
68623 Lampertheim
Internet: www.strassner.biz

Ähnliche fragen