AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datensatz wurde von anderem User geändert ?
Thema durchsuchen
Ansicht
Themen-Optionen

Datensatz wurde von anderem User geändert ?

Ein Thema von HolgerCW · begonnen am 29. Aug 2007 · letzter Beitrag vom 29. Aug 2007
Antwort Antwort
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#1

Datensatz wurde von anderem User geändert ?

  Alt 29. Aug 2007, 12:13
Datenbank: ORACLE • Version: 9 • Zugriff über: DATABASE
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Datensatz wurde von anderem User geändert ?

  Alt 29. Aug 2007, 12:15
1. Weg mit der BDE
2. wie sehen die Tranaktionseinstellungen aus.
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Datensatz wurde von anderem User geändert ?

  Alt 29. Aug 2007, 12:18
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
Heiko
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#4

Re: Datensatz wurde von anderem User geändert ?

  Alt 29. Aug 2007, 13:13
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Datensatz wurde von anderem User geändert ?

  Alt 29. Aug 2007, 13:45
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
Heiko
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Datensatz wurde von anderem User geändert ?

  Alt 29. Aug 2007, 13:45
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.
Andreas
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#7

Re: Datensatz wurde von anderem User geändert ?

  Alt 29. Aug 2007, 14:13
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:27 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