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 steht

    Um 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 Datensatz

    mfg VergissEs



  • Danke für die Antwort!

    Hat mir echt geholfen, obwohl ichs jetzt etwas anderst gelöst hab... 😃

    greetz
    d-fence


Anmelden zum Antworten