AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi 2. POST innerhalb des selben Datensatzes bringt Fehlermeld.
Thema durchsuchen
Ansicht
Themen-Optionen

2. POST innerhalb des selben Datensatzes bringt Fehlermeld.

Ein Thema von BrinkschulteManfred · begonnen am 12. Dez 2004 · letzter Beitrag vom 13. Dez 2004
Antwort Antwort
Benutzerbild von BrinkschulteManfred
BrinkschulteManfred

Registriert seit: 23. Sep 2003
Ort: Menden
97 Beiträge
 
Delphi 7 Enterprise
 
#1

2. POST innerhalb des selben Datensatzes bringt Fehlermeld.

  Alt 12. Dez 2004, 11:58
Hallo zusammen,

mit DELPHI 7 Ent. greife ich per ADO auf SQL 2000 zu. Alles funktioniert prima. Nun habe ich eine BeforePost-Prozedur eingebaut, die vor dem Speichern eines Datensatzes das Änderungsdatum und den Namen des Bearbeitenden innerhalb der Tabelle ablegen soll. Beim ersten POST funktioniert auch alles gut, wenn ich aber dann eine zweie Änderung in diesem Datensatz in dem Datensatz vornehmen möchte, ohne vorher zu einem anderen Datensatz gegangen zu sein (obwohl, eventuell kommt dann der Fehler auch??) dekomme ich den Fehler:
Die zum Aktualisieren angegebene Zeile wurde nicht gefunden. Einige Werte wurden seit dem letzten Lesen ggf. geändert! Im Moment weiss ich nicht, wo ich suchen soll ....

Gruß
Manfred
  Mit Zitat antworten Zitat
urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#2

Re: 2. POST innerhalb des selben Datensatzes bringt Fehlerme

  Alt 12. Dez 2004, 16:51
Ich kenne mich mit Deiner Konstellation nicht aus, aber bei SQL Servern gibt es oft "Komplikationen" mit dem Refresh von Datenmengen.
Das könnte mit verschiedenen Faktoren zusammenhängen.
Z.B. könnte es sein, dass Du nach dem ersten Post die Transaktion committen musst, damit der Server die Änderungen auch kennt.
Oder Du musst nach dem Post die Datenmenge schließen und wieder neu einlesen.
Oder Du musst Refresh aufrufen (da gibts aber auch wieder Verschiedenes zu beachten).


Ich würde mal bei "Refresh" zu suchen beginnen.

Hoffe, das hilft
Urs

P.S. Das ist schon ein Schuss ins Trübe, ich bin mir gar nicht sicher...
  Mit Zitat antworten Zitat
Benutzerbild von BrinkschulteManfred
BrinkschulteManfred

Registriert seit: 23. Sep 2003
Ort: Menden
97 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: 2. POST innerhalb des selben Datensatzes bringt Fehlerme

  Alt 13. Dez 2004, 09:26
Hallo Urs,

ein abschließendes Refresh hat nur einen Stack-Fehler gebracht. Ich habe aber noch eine Weile probiert und habe bisher noch folgende weitere Erkenntnisse sammeln können.
In der Tabelle, die ich aktualisieren möchte, gibt es u.a. die Felder 'Aenderer' als varchar25 und das 'Aenderungsdatum' als SmallDateTime.

Diese möchte ich mit
Delphi-Quellcode:
procedure TFormTeile.ADOQueryTeileBeforePost(DataSet: TDataSet);
begin
  //Aenderer und Aenderungsdatum setzen
  ADOQueryTeile.FieldValues['Aenderungsdatum'] := Now();
  ADOQueryTeile.FieldValues['Aenderer'] := GetCurrentUserName;
end;
ändern. Mein Wunsch funktioniert, wenn ich nur den Aenderer aktualisieren lasse. Wenn das Aenderungsdatum (DateTime) gesetzt werden soll, funktioniert dies nur bei dem jeweiliog ersten Aufruf innerhalb eines Datensatzes. Beim Datensatzwechsel ist das kein Problem, ich kann wiederum einmal ein Post ausführen. Auch ein Wechsel der beiden Zeilen brachte keine Besserung.


Aaaah, Erfolg!!!
Ein Requery im AfterPost bringt das ersehnte Erlebnis !!!
Aber wieso, warum ist dies nötig?
Zumindest läuft es....


Aber noch eine Frage: Sollte man abschließend Requery oder Refresh aufrufen? Was ist Resourcenschonender?
Gruß
Manfred
  Mit Zitat antworten Zitat
urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#4

Re: 2. POST innerhalb des selben Datensatzes bringt Fehlerme

  Alt 13. Dez 2004, 10:48
Hallo Manfred,

genau kann ich es nicht erklären, aber es hat auf jeden Fall damit zu tun, dass Dir ein SQL-Server im Gegensatz zu einer Desktop-DB (wie Paradox, dBase, Access...) keine echten, also physischen Tabellen liefert, sondern eine Ergebnismenge.
Selbst wenn Du eine Komponente hättest, die sich wie eine Tabelle benimmt, ruft diese intern die DAten doch über eine SELECT-Abfrage ab.
Der SErver stellt nun auf Deine Anfrage hin eine Ergebnismenge zusammen und hält die so lange vor, wie die Transaktion aktiv ist.
Wenn Du nun etwas an den Daten änderst, wird das in den Tabellen in der DB eingetragen; die Ergebnismenge weiß aber noch nichts davon. Deshalb müssen die Daten neu eingelesen werden. Ich glaube, es gibt ausgefeilte Komponenten, die tatsächlich nur den geänderten Datensatz neu einlesen, was natürlich wesentlich schneller ist als eine komplette DAtenmenge mit Tausenden Datensätzen neu einzulesen..
Ihc denke, Dein Requery entspricht meinem Vorschlag, die Query zu schließen und wieder zu öffnen (wie gesagt, ich kenne mich mit ADO nicht aus).


Eine Alternative wäre evtl. mit CachedUpdates zu arbeiten. Dann werden alle Änderungen in einer lokalen Kopie beim Client gemacht und am Schluss auf einmal in die DB geschrieben.

MfG
Urs
  Mit Zitat antworten Zitat
shmia

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

Re: 2. POST innerhalb des selben Datensatzes bringt Fehlerme

  Alt 13. Dez 2004, 12:21
Zitat von BrinkschulteManfred:
In der Tabelle, die ich aktualisieren möchte, gibt es u.a. die Felder 'Aenderer' als varchar25 und das 'Aenderungsdatum' als SmallDateTime.
Der Datentyp SmallDateTime ist problematisch, weil er nicht die Genauigkeit hat, die SysUtils.Now() besitzt.
Du könntest stattdessen den Datentyp Datetime verwenden.
Nach einem Requery hat das Feld ADOQueryTeile.FieldValues['Aenderungsdatum'] höchst wahrscheinlich
einen anderen Wert als das Feld davor hatte.
Andreas
  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 12:18 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