• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

$d_database updated without using a transaction

Schnueffler

Geoguru
Hallo

Ich habe seit heute das Problem, dass mein Makro, welches mir beim Loggen den FoundCount in ein Userdata-Field einträgt bei jedem Cache eine Warnung auswirft.

Screenshot.png

Kann damit jemand was anfangen? Wo ist das Problem und wie muss ich mein Makro ändern, damit es wieder ohne Warnung funktioniert?

Code:
IF Seek($_PublishCode)
  $Found = sqlite("sql","select g_FoundLog(Ltype) from LogsAll where rowid = $_PublishId2","")
  IF $Found = "1"
     $Count=Left("00000",5-Len(PublishTags("%count"))) + PublishTags("%count")
     $d_User4=$Count
  ENDIF
ENDIF

Da wird doch gar kein $d_database verwendet! Ich bin gerade echt am verzweifeln, wie ich diesen Fehler in den Griff bekomme.
 

c.s.g.

Geocacher
Hallo Schnueffler,

Da wird doch gar kein $d_database verwendet!
Die Fehlermeldung besagt, dass Du eine Datenbank-Variable verwendest / aktualisierst. Diese ist in Deinem Fall $d_User4.

Kann damit jemand was anfangen? Wo ist das Problem und wie muss ich mein Makro ändern, damit es wieder ohne Warnung funktioniert?
Probier mal folgendes:
Code:
IF Seek($_PublishCode)
  $Found = sqlite("sql","select g_FoundLog(Ltype) from LogsAll where rowid = $_PublishId2","")
  IF $Found = "1"
     $Count=Left("00000",5-Len(PublishTags("%count"))) + PublishTags("%count")
     TRANSACTION Action=Begin
     $d_User4=$Count
     TRANSACTION Action=End
  ENDIF
ENDIF
Allgemein gesprochen besagt die Fehlermeldung, dass Aktualisierungen von / Zuweisungen an Datenbank-Variablen zukünftig besser innerhalb eines TRANSACTION Action=Begin-TRANSACTION Action=End-Blockes zu erfolgen haben. Dabei sind allerdings Optimierungen denkbar, etwa in der Form folgenden Pseudocodes:

Code:
TRANSACTION Action=Begin
Auf ersten Datensatz positionieren
while not $_eof
   $_DatenbankVariable = $NeuerWert
   $_DatenbankVariable2 = $NeuerWert2

   Nächster Datensatz ....
endwhile
TRANSACTION Action=End
Netter Nebeneffekt: Dadurch wird der Makro auch schneller.

In Deinem Fall würde z. B. ein TRANSACTION Action=Begin vor Beginn der Schleife und ein TRANSACTION Action=End nach der Schleife ausreichen, wenn Du Deinen o.g. Code innerhalb einer Schleife aufrufst / abarbeitest.

Gruß
c.s.g.
 
OP
Schnueffler

Schnueffler

Geoguru
c.s.g. schrieb:
Probier mal folgendes:
Code:
IF Seek($_PublishCode)
  $Found = sqlite("sql","select g_FoundLog(Ltype) from LogsAll where rowid = $_PublishId2","")
  IF $Found = "1"
     $Count=Left("00000",5-Len(PublishTags("%count"))) + PublishTags("%count")
     TRANSACTION Action=Begin
     $d_User4=$Count
     TRANSACTION Action=End
  ENDIF
ENDIF

Super. Vielen Dank. Das funktioniert und ich kann meinen FoundCount beim Loggen wieder automatisch aktualisieren lassen.
 
Oben