![]() |
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 |
Re: Datensatz wurde von anderem User geändert ?
1. Weg mit der BDE
2. wie sehen die Tranaktionseinstellungen aus. |
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 |
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:
Frage mich halt nur wenn ich z.B. nur ein Commit abschicke, woher weiss ORACLE welche Tabelle oder so ich meine ?
TQuery1.Close;
TQuery1.SQL[0] := 'UPDATE Tabelle1 SET Spalte1 = ''Wert'' WHERE Spalte2 = ''Test'''; TQuery1.ExecSQL; 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 |
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:
Ein Mischen eigener Sachen und der datensensitiven Elemente war noch nie gut,
DataBase.StartTransaction;
try // deine Query Dingens finally DataBase.Commit; end; kannst du die DBComboBox ersetzen durch eine normale ComboBox ? Heiko |
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:
Da es aber die alten Werte nicht mehr in der Tabelle gibt, liefert die UPDATE-Anweisung
UPDATE Tabelle1 SET Spalte1 = @neuerWert1 WHERE Spalte2 = @neuerWert2
WHERE Spalte1=@alterWert1 AND Spalte2=@alterWert2 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. |
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 04:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz