Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Problem mit ADOTable und Refresh (https://www.delphipraxis.net/13015-problem-mit-adotable-und-refresh.html)

Nalincah 9. Dez 2003 14:03


Problem mit ADOTable und Refresh
 
Immer wenn ich mit das aufrufe (Steht in TADOTable.AfterPost), also nen Datensatz poste

Delphi-Quellcode:
TADOTable.Refresh;
Krieg ich ne Fehlermeldung:

Code:
Nicht genügend Schlüsselfeldinformationen zum Aktualisieren
Liegt das an der TADOTable? Oder muss ich noch was beachten

trifid 9. Dez 2003 16:59

Re: Problem mit ADOTable und Refresh
 
Hallo,

probier es mal damit
verwende statts einen
Delphi-Quellcode:
   ADOtable.Refresh;
folgende Zeilen
Delphi-Quellcode:
   ADOtable.Close;
   ADOtable.Open;

woki 9. Dez 2003 17:05

Re: Problem mit ADOTable und Refresh
 
Hi,

ist ein Bug in der TAdotable, wenn Du Dir ganz viel Ärger ersparen willst, zieh dir TBetterAdodataset aus dem Netz. Ist Freware, links über Google oder auch per Suche hier in der DP.

Grüsse
Woki

Nalincah 10. Dez 2003 07:25

Re: Problem mit ADOTable und Refresh
 
@trifid: Bringt mir nichts. Dann bin ich nach dem "open" beim ersten Datensatz. Das will ich aber nicht.
@woki: Hab ich schon, bin aber noch nicht ganz durchgestiegen

Ausserdem hab ich bei mir jetzt noch nen TClientDataSet und nen TDataSetProvider eingebaut, und in meinem ClientDataSet in AfterPost das reingeschrieben

Delphi-Quellcode:
ClientDataSet1.ApplyUpdates(0);
Jetzt wird zwar beim posten der Datensatz gespeichert, aber wenn ich unter dieser zeile ein
Delphi-Quellcode:
ClientDataSet1.Refresh
ausführe, passiert nix. Ich muss die Tabelle schließen und wieder öffnen, dann bin ich aber wieder beim ersten Datensatz und bei großen Tabellen ist das auch eine nicht sehr gute Lösung

HomerGER 10. Dez 2003 09:28

Re: Problem mit ADOTable und Refresh
 
welchen Datenbanktreiber nutzt du?
welche Datenbank?
bei den ADO hilft eigentlich immer zum refreshen nur die holzhammermethode
cose und dann open
diesen tip habe ich vom Andreas Kosch - und der sollte es wissen

aber hier noch eine andere ausführung aus dem Entwicklerforum
Zitat:

intern ruft Refresh die Methode Resync des eigentlichen ADO Objektes auf, falls dies unterstützt wird. Das bedeutet, dass für jede angezeigte Zeile ein SELECT auf die Datenbanktabelle angesetzt wird um diese zu aktualisieren. D.h. du solltest eigentlich die Änderungen innerhalb der Daten nun sehen können (bei mir funktioniert es bei gleichen Voraussetzungen). Was allerdings hier nicht funktioniert, ist die Anzeige von neuen Zeilen, also wenn ein anderer Benutzer über INSERT neue Zeilen einfügt. In diesem Fall musst du die Methode Requery aufrufen. Mit ihr wird das SELECT deiner Abfrage noch einmal neu ausgeführt!

Nalincah 10. Dez 2003 09:37

Re: Problem mit ADOTable und Refresh
 
Zitat:

Zitat von HomerGER
welchen Datenbanktreiber nutzt du?
welche Datenbank?
bei den ADO hilft eigentlich immer zum refreshen nur die holzhammermethode
cose und dann open
diesen tip habe ich vom Andreas Kosch - und der sollte es wissen

aber hier noch eine andere ausführung aus dem Entwicklerforum
Zitat:

intern ruft Refresh die Methode Resync des eigentlichen ADO Objektes auf, falls dies unterstützt wird. Das bedeutet, dass für jede angezeigte Zeile ein SELECT auf die Datenbanktabelle angesetzt wird um diese zu aktualisieren. D.h. du solltest eigentlich die Änderungen innerhalb der Daten nun sehen können (bei mir funktioniert es bei gleichen Voraussetzungen). Was allerdings hier nicht funktioniert, ist die Anzeige von neuen Zeilen, also wenn ein anderer Benutzer über INSERT neue Zeilen einfügt. In diesem Fall musst du die Methode Requery aufrufen. Mit ihr wird das SELECT deiner Abfrage noch einmal neu ausgeführt!

Datenbank: SAP DB 7.4
Also das Refresh mit ADOTable klappt gar nicht. Mit dem BetterADODataSet funktioniert nur das Requery bzw. das Refresh wenn ich
Delphi-Quellcode:
RefreshType := rtRequery
gesetzt hab, was aber beides das gleiche ist, oder?

Auf jeden Fall hab ich nach nem Requery zwar alle Datensätze aktualisiert, aber leider bin ich dann immer beim ersten Datensatz.

Kann das an nem Insert liegen? Es geht darum, dass wenn ich nen neuen Datensatz einfüge ein Trigger ausgeführt wird der im ID-Feld automatisch einen Wert anlegt. Will einfach nur das direkt nach dem Insert ein Refresh aufgerufen wird, damit der Wert sofort angezeigt wird und ich die Tabelle nicht neu öffnen muss (Also kein Close/Open). Geht das überhaupt?

woki 10. Dez 2003 15:48

Re: Problem mit ADOTable und Refresh
 
Zitat:

Zitat von General2003

Datenbank: SAP DB 7.4

Kann das an nem Insert liegen? Es geht darum, dass wenn ich nen neuen Datensatz einfüge ein Trigger ausgeführt wird der im ID-Feld automatisch einen Wert anlegt. Will einfach nur das direkt nach dem Insert ein Refresh aufgerufen wird, damit der Wert sofort angezeigt wird und ich die Tabelle nicht neu öffnen muss (Also kein Close/Open). Geht das überhaupt?

Fändest Du es nicht etwas fairer gegenüber den Leuten,die bereit sind ihre Zeit zu investieren um dir zu helfen, diese Informatinen von Anfang an preiszugeben, statt erstmal alle im trüben fischen zu lassen?
Also bei Datenbankproblemen gehören doch auf jeden Fall die verwendeten Komponenten, die Datenbank, alles mit Versionen und das genaue Vorgehen gleich in die Frage.

Grüsse
Woki

Nalincah 10. Dez 2003 15:52

Re: Problem mit ADOTable und Refresh
 
Schon klar das mit der Frage. Aber ich wusste erst nicht woran der Fehler liegt, da es bei jeder Tabelle und bei der Datenbank passiert. Auch bei z.B. Access-Datenbanken

woki 10. Dez 2003 16:30

Re: Problem mit ADOTable und Refresh
 
Zitat:

Zitat von General2003
Schon klar das mit der Frage. Aber ich wusste erst nicht woran der Fehler liegt,

Wenn Du's schon wüßtest, bräuchtest Du ja auch nicht zu fragen. Auch was Du schon probiert hast, gehört als Info mit dazu. Um gleich weiter im Dunkeln zu tappen, bei Access hattest Du es wahrscheinlich mit einem Autoincrementfeld getestet?
Bei Access im Zusammenhang mit einem Autoincrementfeld ist es ein Bug, da hilft TBetteradodataset (kann man genauso verwenden wie eine TTable, muß man nur einstellen, du solltest aber mal auf SQL und Queries umsteigen, wenn du mit anderen Dingen als filebasierten Desktopdatenbanken arbeitest), Auf den Bug hatte ich auch einfach mal blind getippt.
Bei der Version mit dem Trigger wäre auch verwunderlich wenn es funktionierte, denn für das refresh müßte er ja die Datensätze, die von der Datenbank kommen, mit den lokalen abgleichen, wie soll er das, wenn ein Trigger zwischendurch den Schlüssel eines Datensatzes verändert hat, wie soll er den dann für den Abgleich wiederfinden, ich denke hier kann man so nicht vorgehen.

Grüsse
Woki

HomerGER 10. Dez 2003 17:55

Re: Problem mit ADOTable und Refresh
 
wenn du access als DB benutzt welchen treiber ?
jet und wenn ja welche version auf weelchen os?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:27 Uhr.
Seite 1 von 2  1 2      

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