Announcement

Collapse
No announcement yet.

Interbase/Delphi: unbekannte Fehlermeldung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Interbase/Delphi: unbekannte Fehlermeldung

    Hallo,<br>
    in eine Interbase-Datenbank werden Störungen von Produktionsmaschinen <br>
    eingeschrieben und auch herausgelesen zur weiteren Verarbeitung. Leider <br>
    erhalte ich in dem Delphi-Programm eine Exception <br>
    mit folgendem Wortlaut:<br>
    <b> Execption EDB EngineError <br>
    Zur Zeit wird keine Benutzertransaktion vorgenommen.<br>
    </b>
    Was bedeutet diese Fehlermeldung ? , wo liegt mein Fehler ?<br>
    Ich verwende den InterbaseServer 5.6 und Delphi 4.0 <br>
    Vielen Dank im voraus. <br>
    Ralf Eberhard<br>

  • #2
    Hallo,

    wie sieht ein konkretes Implementierungsbeispiel aus, mit dem diese Fehlermeldung reproduziert werden kann

    Comment


    • #3
      Hallo Herr Kosch,<br>
      die Implementierung sieht folgendermaßen aus:<br>
      ein Thread prüft 2 globale Array-Felder auf Änderung, ob sich die <br> Werte geändert haben, wenn ja, so wird der entsprechende Wert in <br> die Stördatenbank eingetragen,
      (Insert-Befehl, StoredProcedure),im anderen Fall wird die Störung zurückgesetzt
      (Update-Befehl, StoredProcedure).<br>
      <b>
      procedure TStoerungsThread01.Execute;<br>
      var<br>
      loop1, loop2, H_StoerNr : integer;<br>
      begin<br>
      while not Terminated do begin<br>
      If Cl_Terminate = False Then<br>
      Begin<br>
      for loop1:= 1 to 35 do begin<br>
      //frmStoerungen1.StoerungEinschreiben(loop1);<br>
      for loop2 := 0 to 15 do begin<br>
      H_StoerNr := (loop1 - 1) * 16 + loop2 + 1;<br>
      if (C_SPSStoerungNew[loop1, loop2] <> C_SPSStoerungOld[loop1, loop2])<br>
      then if C_SPSStoerungNew[loop1, loop2] then<br>
      frmStoerungen1.StoerungEinschreiben(H_StoerNr)<br>
      else frmStoerungen1.StoerungReset(H_StoerNr);<br>
      end;<br>
      end;<br>
      end;<br>
      end;<br>
      </b>
      Ein 2. Thread prüft jede Sekunde, ob aktuelle Störungen vorhanden sind,
      wenn ja werden diese Störungen in der Form angezeigt, dazu verwende ich die
      Synchro-Hilfsmethode synchronized(..).<br>

      Vielen Dank für Ihre Mühe <br>
      Ralf Eberhar

      Comment


      • #4
        Hallo,

        auf den InterBase darf nur dann aus einem zweiten Thread heraus zugegriffen werden, wenn die folgenden Bedingungen erfüllt werden:

        1. Das Programm muss ein Netzwerk-Protokoll (TCP/IP) verwenden, der direkte Zugriff auf die lokale Datenbank ist nicht zulässig (GDS32.DLL ist dann nicht theadfest).

        2. Wenn der Zugriff über die BDE erfolgt, muss eine separater TSession + TDatabase-Instanz die Verbindung für den Thread herstellen. Es ist üblich, beim Aufruf des TThread-Constructors diese Referenzen an den Thread zu übergeben, damit dieser die Handles in seinen Objektfeldern speichern kann, um aus Execute heraus direkt zuzugreifen

        Comment

        Working...
        X