DBGrid mit DB-Verbindung
-
Hallo zusammen!
Ich hab da ein kleines Problem mit dem schreiben in eine Access-DB mithilfe eines DBGrids.Ich benutze ADOConnection, DataSource, ADOTable und ein DBGrid.
Alles ist soweit richtig miteinander verknüpft...1. Funktion:
DBGrid bzw. Datenbank-Tabelle sind leer.
Im DBGrid, das mit der Access-DB verknüpft ist, werden 5 Datensätze neu erfasst.
Von den 2 forhanden Feldern wird nur eins eingetragen. -> funktioniert alles!Code:
TDataSet *pDB = DBGrid1->DataSource->DataSet; pDB->Edit(); //Grid in Edit-Modus setzen pDB->Fields->Fields[0]->Text = tmpLanguage; //Sprache ins Feld schreiben pDB->Insert(); //Neuen Datensatz einfügen
2. Funktion:
DBGrid beihaltet nun 5 Datensätze von Funktion 1.
Nun soll in jeden Datensatz ein Wert, in das noch leere Feld, eingetragen werden.
Es funktioniert auch, aber nur bis es zum Befehl 'pDB->Next()' kommt. Dort sollte es zum nächsten Datensatz gehen. Es erscheint die folgende Fehlermeldung:"Row cannot be located for updating. Same values may have been changed since it was last read."
Code:
TDataSet *pDB = DBGrid1->DataSource->DataSet; AnsiString Descript; AnsiString NewText; for (int i = 0; i < ADOTable1->RecordCount; i++) { if (pDB->Fields->Fields[0]->Text == Descript) { //Edit Modus pDB->Edit(); //Gefiltertes Descript in Feld schreiben pDB->Fields->Fields[1]->Text = NewText; pDB->Update(); pDB->Next(); //FEHLER break; } }
Keine Ahnung was da falsch läuft! Ich wäre sehr froh wenn mir jemand weiter helfen könnte.
thx
d-fence
[ Dieser Beitrag wurde am 20.06.2003 um 08:41 Uhr von d-fence editiert. ]
-
sicher das das Update() heissen muss und nicht Post()??
-
Hi!
Wenn ich Post() verwende, kommt der gleiche Fehler gleich nach dem Post()-Befehl!
Gibt es keine andere Möglichkeit, in ein vorhandenen Datensatz einen Wert einzufügen.
Nach meiner Methode sollte es doch auch funktionieren oder?d-fence
-
Moin!
Hat wirklich niemand eine Ahnung was hier falsch läuft?Ich wär sehr dankbar für eine Antwort.
greetz
d-fence
-
ich nehme an du hast ein AutoWert-Feld in der Tabelle,
das war bei mir immer das selbe Problem.Theorie:
Wenn du einen neuen Datensatz erzeugst wird leider nicht der Autowert
gleich mit erstellt sondern erst nach dem Post, aber nach dem Post steht
der Autowert noch nicht in den Table/Query, erst nach erneuten einlesen
des Table/Query bekommste den Autowert.Beispiel:
Du erstellst 5 Datensätze hintereinander, alle haben den selben Inhalt
da die Tabelle/Query nicht neu eingelesen wurde gibt es noch keinen Autowert
jetzt veränderst du einen Datensatz der 5 erstellten und springst zum nächsten jetzt jetzt meckert er rum
"Row cannot be located for updating. Same values may have been changed since it was last read."
und dies macht er weil er mit SQL Update den Datensatz verändern will nur hat er im moment 5 gleiche Datensätze jetzt weiss er nicht welchen er nehmen soll, bzw. findet ihn nicht, da noch nicht die Unterscheidung des AutoWerts mit drinnen stehtUm das Problem zu umgehen mache ich immer nach dem Neuerstellen eines Datensatzes ein ADOQuery1->Active = false; ADOQuery1->Active = true;
da er dann den Autowert hat also die Datensätze unterscheiden kann
und springe dann zum neuerstellten Datensatzmfg VergissEs
-
Danke für die Antwort!
Hat mir echt geholfen, obwohl ichs jetzt etwas anderst gelöst hab...
greetz
d-fence