Hallo Gemeinde,
eine Frontend-Access-Anwendung fragt aller 30 Sekunden die Firebird-Backend-Datenbank ab, ob neue Daten zur Verfügung stehen. Wenn ja, dann holt er die Links und lädt aus dem Dateisystem die Bilder sowie weitere Informationen aus der Datenbank.
Scheinbar habe ich ein Speicherleck.
Für das Ausführen der Funktionen über Ado (ODBC) nutze ich folgende Funktion:
Public Function ExecuteFBCommand(strExecute As String, Optional setrs As Boolean)
On Error GoTo 2
Dim Conn As ADODB.Connection
Dim strConn As String
strConn = "Driver=Firebird/Interbase(r) driver;Uid=SYSDBA; Pwd=masterkey; DIALECT=3; CharSet=ISO8859_1; VERSION=6; Database=" & dbpath
Set Conn = New ADODB.Connection
Conn.ConnectionString = strConn
Conn.Open strConn
Set fbrs = New ADODB.Recordset
With fbrs
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockReadOnly
.ActiveConnection = Conn
.Open strExecute
End With
If (setrs = False) Then
If fbrs.State <> 0 Then
fbrs.Close
End If
Set fbrs = Nothing
Else
If fbrs.State <> 0 Then fbrs.ActiveConnection = Nothing
End If
Forms!FUebersicht.DBC.BackColor = vbGreen
Conn.Close
Set Conn = Nothing
1: Exit Function
2:
Forms!FUebersicht.DBC.BackColor = vbRed
'MsgBox Err.Description
Resume 1
End Function
Übergebe ich setrs eine 1, dann wird das Recordset erst vom Aufrufenden verarbeitet und dann gelöscht.
Das Recordset wird in einem globalen Modul deklariert:
Public fbrs As ADODB.Recordset
Gibt es diesbezüglich Probleme mit dem Speicher?
Aufgerufen wird die Funktion dann wie folgt:
Dim str As String
str = "select kd_id, li_id from P_APP_GET_A_KD_ID(" & appid & ")"
ExecuteFBCommand (str), (True)
nach der Verarbeitung wird das Recordset erst auf 0 gesetzt und dann mit set fbrs = nothing geschlossen.
Ist die neue ID unterschiedlich zur alten, werden mehrere andere Prozeduren aufgerufen und ausgewertet.
Ein kleines Problem ist da noch. Wenn ich das Formular mit dem Recordset verbinde, scheint jedes Mal auch etwas Speicher mehr im Arbeitspeicher notwendig zu werden:
Set Me.AYXLON.Form.Recordset = fbrs
Hat jemand eine Idee?
Viele Grüße
OK
|