SQLExpress und Transaktionen

SQL Express von Boris Borzic

Moderator: Moderatoren

SQLExpress und Transaktionen

Beitragvon satmax » Fr, 29. Nov 2013 10:42

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
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
 
Beiträge: 775
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich

Re: SQLExpress und Tansaktionen

Beitragvon georg » Fr, 29. Nov 2013 11:03

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
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1748
Registriert: Fr, 08. Feb 2008 21:29

Re: SQLExpress und Tansaktionen

Beitragvon satmax » Fr, 29. Nov 2013 11:08

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
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
 
Beiträge: 775
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich

Re: SQLExpress und Tansaktionen

Beitragvon georg » Fr, 29. Nov 2013 11:36

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
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1748
Registriert: Fr, 08. Feb 2008 21:29

Re: SQLExpress und Tansaktionen

Beitragvon georg » Fr, 29. Nov 2013 11:46

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
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1748
Registriert: Fr, 08. Feb 2008 21:29

Re: SQLExpress und Tansaktionen

Beitragvon satmax » Fr, 29. Nov 2013 11:47

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: 775
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich

Re: SQLExpress und Tansaktionen

Beitragvon satmax » Fr, 29. Nov 2013 11:49

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
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
 
Beiträge: 775
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich


Zurück zu SQLExpress

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste