problem mit UpdateRecord in einer Tabelle. kann wer helfen??



  • hallo zusammen,
    habe hier eine mdi-anwendung mit einer access db. ich möchte jetzt per buttonclick in der tablle was updaten.
    momentan habe ich das so:

    String filter_kunde = "knummer = '10002' AND rberechnen = '1'";
            DataModule1->TBkunde_report_auftrag->Filter = filter_kunde;
    
            Word Year, Month, Day;
            DecodeDate(Date(), Year, Month, Day);
            AnsiString jahr = IntToStr(Year);
            AnsiString monat = IntToStr(Month);
            AnsiString tag = IntToStr(Day);
            AnsiString datum = tag + "." + monat + "." + jahr;
    
            while (!DataModule1->TBkunde_report_auftrag->Eof) {
                    DataModule1->TBkunde_report_auftrag->Edit();
                    DataModule1->TBkunde_report_auftrag->UpdateRecord();
                    DataModule1->TBkunde_report_auftrag->FieldByName("rberechnen")->Value = 0;
                    DataModule1->TBkunde_report_auftrag->FieldByName("rgdatum")->Value = datum;
                    DataModule1->TBkunde_report_auftrag->Post();
                    DataModule1->TBkunde_report_auftrag->Next();
            }
    

    so, mein problem ist jetzt das ich in meiner db 6 datensätze habe, die auf die kriterien zutreffen die ich in filter_kunde deklariere.
    wenn ich jetzt den buttonclick ausführe, werden aber nur in jedem zweiten datensatz die updates aus der schleife ausgeführt.

    wieso wird das nur in jedem zweiten datensatz gemacht und nicht in jedem??

    danke im voraus für hilfe
    BeTZe


  • Mod

    Hallo

    warum verwendest du kein Query (SQL)
    ist einfacher 😉

    MfG
    Klaus



  • KlausB schrieb:

    warum verwendest du kein Query (SQL)
    ist einfacher 😉

    hallo KlausB,

    das habe ich auch schon probiert. leider bin ich zu "blöd" dafür glaube ich. habe das in der Query nicht hin bekommen mit einer schleife, sprich so wie ich das hier habe mit

    while (!DataModule1->TBkunde_report_auftrag->Eof) {
    

    und die daten dann upzudaten, das hat auch nicht geklappt. deshalb wollte ich das wieder so machen.

    kannst du mir da sonst helfen?? wäre super.

    BeTZe


  • Mod

    Hallo

    zB. so

    aSQL = "UPDATE datenbank SET rberechnen = 0, rgdatum = '";
    aSQL = aSQL + datum + "'";

    so werden allerdings ALLE Datensaetze ueberschrieben ⚠
    WHERE ....... verwenden ⚠ ⚠

    MfG
    KLaus



  • KlausB schrieb:

    aSQL = "UPDATE datenbank SET rberechnen = 0, rgdatum = '";
    aSQL = aSQL + datum + "'";

    hallo,

    also ich habe das jetzt mal zum testen so gemacht:

    UPDATE auftrage SET rberechnen = 0, rgdatum = '05.12.2003'
    

    das habe ich bei der query komponente direkt bei SQL mal eingegeben. wenn ich dann Active auf true setze kommt die fehlermeldung:
    "Fehler beim erstellen des Cursor-Handle"

    was ist das jetzt für ein fehler??

    BeTZe


  • Mod

    Hallo

    welches Query verwendest du (ADOQuery ?)
    welche Version BCB

    MfG
    Klaus



  • moin,
    also ich habe bcb 6.0 pro und verwende die query die bei bde drin ist. über bde habe ich auch meine access db verbunden.

    BeTZe


  • Mod

    Hallo

    hast du den "DatabaseName" der Query gesetzt ?

    versuchs mal so

    Query1->Close();
    Query1->SQL->Clear();
    Query1->SQL->Add (aSQL);
    Query1->ExecSQL();

    MfG
    Klaus



  • super, das klappt jetzt. danke schön. kleine frage nur noch:
    ich möchte das jetzt mit der WHERE anweisung noch mit einbauen.
    momentan habe ich das so:

    String aSQL = "UPDATE auftrage SET rberechnen = 0, rgdatum = '";
            aSQL = aSQL + datum + "' WHERE rgdatum = ''";
            DataModule1->Qauftrage->Close();
            DataModule1->Qauftrage->SQL->Clear();
            DataModule1->Qauftrage->SQL->Add (aSQL);
            DataModule1->Qauftrage->ExecSQL();
    

    Leider updatet er mir dann gar nichts mehr in der tabelle. er soll nur die datensätze updaten, wo das feld rgdatum leer ist. habe ich das so dann nicht richtig geschrieben??
    rgdatum ist in der db ein textfeld. liegt es vielleicht daran?? wie kann ich denn bei einem textfeld überprüfen, ob es leer ist oder nicht??

    BeTZe


  • Mod

    Hallo

    das sollte mittels LEN(feldname) gehen

    String aSQL = "UPDATE auftrage SET rberechnen = 0, rgdatum = '"; 
            aSQL = aSQL + datum + "' WHERE LEN(rgdatum) = 0"; 
            DataModule1->Qauftrage->Close(); 
            DataModule1->Qauftrage->SQL->Clear(); 
            DataModule1->Qauftrage->SQL->Add (aSQL); 
            DataModule1->Qauftrage->ExecSQL();
    

    MfG
    Klaus



  • hmm, funktioniert leider nicht. dann wird das update nicht ausgeführt.
    aber macht nichts. werde bei dem rgdatum feld jetzt standartwert 0 eintragen, und dann die 0 abfragen. das funktioniert.

    ich danke die für deine hilfe. bin dir zutiefst dankbar. deine hilfe hat mich gerettet. ist super wenn einem auch direkt geholfen wird, sprich auch mit lösungen.

    schöne grüße
    BeTZe



  • hallo KlausB,

    sorry das ich nochmal störe. vielleicht kannst mir ja da auch helfen.
    meine frage wäre noch:
    kann ich zwei tabellen über auch über sql miteinander verbinden, so wie bei table über mastersource??

    haben zwei tabellen bei denen es eine spalte id gibt die in beiden tabellen gleich sind. sprich sozusagen die eine tabelle mit den kunden daten, und die andere mit den bestellungen des kunden, wo nur die kundenid mit enthalten ist.

    geht das??

    danke im voraus
    BeTZe


  • Mod

    Hallo

    such mal nach join
    oder schau dir diesen Beitrag an

    http://www.c-plusplus.net/forum/viewtopic.php?t=56703&start=0&postdays=0&postorder=asc&highlight=

    MfG
    Klaus


Anmelden zum Antworten