SQLExpress und Transaktionen

SQL Express von Boris Borzic

Moderator: Moderatoren

Antworten
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

SQLExpress und Transaktionen

Beitrag von satmax »

Ich habe versucht Daten innerhalb einer Transaktion zu speichern, in etwa so:

Code: Alles auswählen

oCur:BeginTransaction()
oCur:append()

aeval(aData,{|j,i| oCur:fieldPut(i,j) }, 1+nSkip)   // put data in new record (gather)

IF ! oCur:UpdateRow()
   tdMsg("Problem beim Speichern. (1230)"  )
ENDIF
oCur:EndTransaction()
Die Daten werden korrekt gespeichert aber anschließend ist kein Zugriff auf den Cursor (oCur) möglich, Gibt immer nur NIL zurück. Auch eine oCur:Refresh() geht nicht mehr.

Übersehe ich da etwas?

Gruß
Markus
Zuletzt geändert von satmax am Di, 03. Dez 2013 19:38, insgesamt 1-mal geändert.
Gruß
Markus
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: SQLExpress und Tansaktionen

Beitrag von georg »

Hallo, Markus -


hast Du mal daran gedacht, die Rückgabewerte der Methoden zu speichern und anzusehen? Eventuell gibt es ja eine Rückmeldung vom Server, die Dir hilft, das Problem zu verstehen.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: SQLExpress und Tansaktionen

Beitrag von satmax »

Ja, habe ich gemacht, da ist kein Problem zu erkennen.

Es geht alles solange keine Transaktion beendet wird. Beende ich die Transaktion ist der Cursor futsch, aber nicht nur der, sondern alle in diesem Thread! So als wenn die Connection geschlossen wurde. Im oCursor object sind dann alle Arrays leer, keine Daten, keine Struktur,...


Gruß
Markus
Gruß
Markus
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: SQLExpress und Tansaktionen

Beitrag von georg »

Hallo, Markus -


bei genauerem Hinsehen ... würde ich etwa so etwas erwarten:

Code: Alles auswählen

BEGIN TRANSACTION
UPDATE ...
INSERT ...
UPDATE ...
COMMIT
END TRANSACTION
Mir fehlt das COMMIT bzw. das ROLLBACK in Deinem Beispiel. Hast Du das absichtlich weggelassen?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: SQLExpress und Tansaktionen

Beitrag von georg »

Hallo, Markus -


also, ich habe mal im Quellcode nachgesehen: EndTransaction() wird wie ein Commit() ausgeführt, daher kann bei erfolgreicher Änderung der Commit() entfallen. Es ist aber nicht erkennbar, dass im Nachgang zum EndTransaction() irgendetwas am Cursor gemacht wird.

Sofern keiner hier einen Hinweis hat, würde ich mal Boris anschreiben, Du wirst sicher schnell eine hilfreiche Antwort bekommen.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: SQLExpress und Tansaktionen

Beitrag von satmax »

Hallo Georg,


so habe ich es auch versucht:

Code: Alles auswählen

               BEGIN SEQUENCE
                  nAunr = getNextAunr()
                  IF ! tdSqlAppend(oDlg:oCursAuftrag,.f.,{"_ID", "_ID_Bearbeiter", "_ID_KUNDE"})  // in tdSqlWork1.prg

                     tdMSG("Auftrag: kann keinen Datensatz anlegen.")
                  ELSE
                  // ***** Speichern
                     oDlg:oCursAuftrag:FieldPut("AuftragNr", nAunr)
                     oDlg:oCursAuftrag:FieldPut("Datum", DateString(Date()))
                     oDlg:oCursAuftrag:FieldPut("_ID_Bearbeiter", IDUser)
                     oDlg:oCursAuftrag:FieldPut("_ID_Kunde", idKunde)
                     oDlg:oCursAuftrag:FieldPut("FirmenNr", 1)
                     oDlg:oCursAuftrag:FieldPut("_ErstelltVon",cUser)
                     oDlg:oCursAuftrag:FieldPut("_ErstelltDat",DateString(Date()))
** einige Zeilen gelöscht
                     oDlg:oCursAuftrag:FieldPut("_ID_ZahlZiel",NIL)

                     oDlg:oConnection:CommitTransaction()


                      oDlg:oCursAuftrag:UpdateRow()
                  ENDIF
                  oDlg:oConnection:EndTransaction()
               RECOVER
                  oDlg:oCursAuftrag:RollbackTransaction()
                  SQLErrorLog("ERROR: Create order failed, transaction rolled back")
               ENDSEQUENCE
Gruß
Markus
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: SQLExpress und Tansaktionen

Beitrag von satmax »

georg hat geschrieben:Hallo, Markus -

Sofern keiner hier einen Hinweis hat, würde ich mal Boris anschreiben, Du wirst sicher schnell eine hilfreiche Antwort bekommen.
Das habe ich schon mal versucht, aber nur eine Rückmeldung vom Server bekommen das meine Mail eine Spam ist....

Ich warte noch 1/2 Tage und versuche es dann nochmals.

Gruß
Markus
Gruß
Markus
Antworten