Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datensatz wurde von anderem User geändert ? (https://www.delphipraxis.net/98582-datensatz-wurde-von-anderem-user-geaendert.html)

HolgerCW 29. Aug 2007 12:13

Datenbank: ORACLE • Version: 9 • Zugriff über: DATABASE

Datensatz wurde von anderem User geändert ?
 
Hallo zusammen,

Wenn ich vorher mit einer TQuery ein Update auf eine Tabelle1 absetze und danach mit einer DBComboBox auch eine Änderung durchführe, kommt die Fehlermeldung, das der DAtensatz durch einen anderen User geändert wurde. Was muss ich in der TQuery ändern, das ich das Update komplett abschliesse ?

Gruss

Holger

mkinzler 29. Aug 2007 12:15

Re: Datensatz wurde von anderem User geändert ?
 
1. Weg mit der BDE
2. wie sehen die Tranaktionseinstellungen aus.

hoika 29. Aug 2007 12:18

Re: Datensatz wurde von anderem User geändert ?
 
Hallo,

was ist denn DATABASE für ein Zugriff ? BDE ?

Es sieht so aus, als ob deine TQuery in eine eigener Transaction
auf die DB zugreift, die DBComboBox aber über die Default.
Mit "anderer User" meint Oracle andere Transaction.

Abhilfe schafft vielleicht ein Commit bei der TQuery-Transaction.
Die DBComboBox erzeugt meistens beim Update eine (explizite) Transaction.

Die kommt jetzt mit der von TQuery in Konflikt.


Heiko

HolgerCW 29. Aug 2007 13:13

Re: Datensatz wurde von anderem User geändert ?
 
Hi,

wie bekomme ich denn bei der TQuery ein Commit mit rein. Wenn ich z.B. so update:

Delphi-Quellcode:
TQuery1.Close;
TQuery1.SQL[0] := 'UPDATE Tabelle1 SET Spalte1 = ''Wert'' WHERE Spalte2 = ''Test''';
TQuery1.ExecSQL;
Frage mich halt nur wenn ich z.B. nur ein Commit abschicke, woher weiss ORACLE welche Tabelle oder so ich meine ?

Was meint Ihr mit Zugriff genau ? DriverName ist ORACLE und SessionNAme ist Default. Das habe ich in meiner TDATABASE definiert, welche mit den TQuerys verbunden ist.

Gruss

Holger

hoika 29. Aug 2007 13:45

Re: Datensatz wurde von anderem User geändert ?
 
Hallo,

starte mal den SQL-Monitor,
lasse dir die Transaktionen und die "Ausgeführte Abfrage-Anweisungen" anzeigen.

Du müsstest doch ein TDataBase in deinem Projekt ahben.

Delphi-Quellcode:
DataBase.StartTransaction;
try
  // deine Query Dingens
finally
  DataBase.Commit;
end;
Ein Mischen eigener Sachen und der datensensitiven Elemente war noch nie gut,
kannst du die DBComboBox ersetzen durch eine normale ComboBox ?


Heiko

shmia 29. Aug 2007 13:45

Re: Datensatz wurde von anderem User geändert ?
 
Angenommen du hast eine QueryXX mit "SELECT * FROM Tabelle1" und zeigst die Daten in einem DBGrid an.
Dann machst du einen SQL-Update: 'UPDATE Tabelle1 SET Spalte1 = ''Wert'' WHERE Spalte2 = ''Test'''
Und nun möchtest in der QueryXX irgendwelche Daten ändern.
Dann erzeugt die VCL im Hintergrund eine UPDATE-Anweisung nach diesem Schema:
SQL-Code:
UPDATE Tabelle1 SET Spalte1 = @neuerWert1 WHERE Spalte2 = @neuerWert2
WHERE Spalte1=@alterWert1 AND Spalte2=@alterWert2
Da es aber die alten Werte nicht mehr in der Tabelle gibt, liefert die UPDATE-Anweisung
als Ergebnis, dass nichts geändert wurde. (RecordsAffected=0 sollte aber 1 sein)
Somit kommt die VCL zu dem Schluss, dass ein anderer User die Daten geändert hat.
In Wirklichkeit war es dein Programm selber, dass an der QueryXX vorbei geändert hat.
Abhilfe:
Nach deinem SQL-Update entweder QueryXX.Close gefolgt von QueryXX.Open oder nur QueryXX.Refresh (schneller; funkt aber nicht immer) ausführen.

HolgerCW 29. Aug 2007 14:13

Re: Datensatz wurde von anderem User geändert ?
 
Hi,

ich habe nun das Problem gefunden.

Ich habe mit einer Table (Tabelle1) die Daten für die DBComboBox bereitgestellt.

Danach mit einer Query auf Tabelle1 ein Update durchgeführt.

Nun änderte ich in der DBComboBox Daten und es kam der Fehler.

Lösung:

-> Erst das Update
-> Dann Open der Table.

Gruss

Holger


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz