Thema Datum  Von Nutzer Rating
Antwort
Rot Access VBA verwendet stetig mehr Speicher im Dauerlauf
04.01.2012 13:38:08 O.K.
NotSolved

Ansicht des Beitrags:
Von:
O.K.
Datum:
04.01.2012 13:38:08
Views:
1501
Rating: Antwort:
  Ja
Thema:
Access VBA verwendet stetig mehr Speicher im Dauerlauf

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


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Access VBA verwendet stetig mehr Speicher im Dauerlauf
04.01.2012 13:38:08 O.K.
NotSolved