Schreiben in Tabellen die in Beziehung stehen



  • Hallo ich nochmal....man soll ja für jedes Thema einen Thread machen ,also mach ich noch einen!

    Und zwar hab ich problem damit, daten in tabellen zu schreiben die miteinander verknüpft sind (Feld R_ID)!

    Die Tabellen in die geschrieben wird sind vom aufbau genau gleich...werden nur in 2 spalten mit anderen werten gefüttert!

    Das feld der verknüpfung ist ein autowertfeld, da immer weitergezählt werden muss!
    Das feld ist auch primärschlüssel!

    Der autowert beginnt in beiden tabellen bei 1 und wird immer um 1 erhöht...somit dürfte es doch keine probleme geben, da beim schrieben in die tabellen immer in beide geschrieben wird...und somit auch der autowert immer gleich ist in beiden!

    Vielleicht hat jemand eine idee?


  • Mod

    Hallo

    was geht nicht
    welche Fehlermeldung kommt
    ...
    ...

    So kann dir keiner helfen (ausser die mit der Glaskugel) 😃

    MfG
    Klaus



  • Das die Tabellen mit einander in Beziehung stehen und das nicht in die Tabelle geschrieben werden kann!

    Mehr sagt er nicht!

    Aber hab schon mit Gandalf gesprochen, der konnte im Pelentir au nix sehen 😃 😉



  • was für eine Datenbank?
    wird der Autowert von der DB oder deinem Prog erhöht?
    wie erfolgt der Zugriff auf die Tabellen?
    wie erfolgt der Abgleich des Autowertes?
    ...

    etwas Code zum kontrollieren wär auch nicht schlecht



  • Access Datenbank
    Autowert von DB (wie kann ich es vom Prog machen?)
    Zugriff erfolgt über TQuery
    Abgleich des Autowertes? Nunja eigentl garnicht...die autowerte sollen eben die Beziehung sein!

    etwas code...hier wird in DB geschrieben:

    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    Query1->Close();
    Query1->SQL->Clear();
    Query1->RequestLive = true;
    Query1->SQL->Add("select * from User where Vorname like '" + Edit3->Text +"'");
    Query1->Open();
    Query1->Edit();
    
    Query3->RequestLive = true;
    Query3->SQL->Add("select * from Result_1");
    Query3->Open();
    Query3->Insert();
    if (Query1->RecordCount>=1)
            {
                if (Edit1->Text>Edit2->Text)
                {
                Query3->FieldByName("User_ID")->AsInteger = Query1->FieldByName("User_ID")->AsInteger;
                Query3->FieldByName("Tore")->AsInteger = StrToInt(Edit2->Text);
                Query3->FieldByName("Points")->AsInteger = 0;
                Query3->FieldByName("Name")->AsString = Query1->FieldByName("Vorname")->AsString;
                Query1->FieldByName("Gesamtp")->AsInteger = 0;
                Query3->Post();
                Query1->Post();
                }
                else if (Edit1->Text==Edit2->Text)
                {
                Query3->FieldByName("User_ID")->AsInteger = Query1->FieldByName("User_ID")->AsInteger;
                Query3->FieldByName("Tore")->AsInteger = StrToInt(Edit2->Text);
                Query3->FieldByName("Points")->AsInteger = 1;
                Query3->FieldByName("Name")->AsString = Query1->FieldByName("Vorname")->AsString;
                Query1->FieldByName("Gesamtp")->AsInteger = 1;
                Query1->Post();
                Query3->Post();
                }
                else if (Edit1->Text<Edit2->Text)
                {
                Query3->FieldByName("User_ID")->AsInteger = Query1->FieldByName("User_ID")->AsInteger;
                Query3->FieldByName("Tore")->AsInteger = StrToInt(Edit2->Text);
                Query3->FieldByName("Points")->AsInteger = 3;
                Query3->FieldByName("Name")->AsString = Query1->FieldByName("Vorname")->AsString;
                Query1->FieldByName("Gesamtp")->AsInteger = 3;
                Query1->Post();
                Query3->Post();
                }
    
    Query3->Close();
    Query3->UnPrepare();
    Query3->RequestLive = false;
    
    Query1->Close();
    Query1->UnPrepare();
    

    natürlich is das nich alles beim Buttonclick, das selbe kommt ja nochmal für Result_2 (nur das da QUery 2 und 4 ist)

    Und zwischen Result_1 und Result_2 soll eben die Beziehung über das Autowertfeld R_ID sein...



  • PS: bitte nich über den stil meckern....aber freundliche änderungsvorschläge nehm ich gern an 🙂



  • die Tabellen sind also im Access verbunden und beide Tabellen haben einen Autowert names R_ID

    ich hab mal versucht ein Beispiel nachzubauen und dazu im Access 2 Tabellen mit einer 1:1-Verknüpfung erstellt, dann hab ich nur in eine Tabelle Werte eingetragen und es gab keine Probleme: der Autowert wird von der Datenbank inkrementiert und die Daten werden ohne Meldung eingetragen

    gibt es irgendeine Besonderheit in deiner Access-DB bei der Beziehung zwischen den Tabellen?
    wann kommt die Fehlermeldung? und wie lautet sie genau?



  • also besonderheit...hm....R_ID ist Primärschlüssel und Autowert, und über R_ID wird verknüpft!
    Fehler kommt bei Query1->Post();

    Meldung ist, das in Tabelle nicht geschrieben werden kann, weil Index, Primärschlüssel oder Beziehung zwischen 2 tabellen besteht!

    Wo bei eh noch ein Fehler war...ich will das Gesamtp immer addiert werden...also hab ich
    statt:

    Query1->FieldByName("Gesamtp")->AsInteger = 3;
    Query1->Post();
    

    hab ich das:

    Query1->SQL->Add("Update User where Gesamtp = Gesampt+1")
    Query1->ExecSQL;
    

    wobei da anscheinend die Updatefunktion nicht klappt...



  • dein Update-Befehl ist falsch

    UPDATE Tabelle SET Feld = Wert WHERE Suchbedingung
    


  • Habs jetzt so:

    Query1->SQL->Add("UPDATE User SET Gesamtp = Gesamtp+1 where Vorname like '" + Edit3->Text +"'");
    Query1->ExecSQL();
    

    geht immer noch nicht!

    Fehler:
    Syntaxfehler(fehlender Operator) in Abfrageausdruck 'Vorname like 'Thomas' (<- eingegebener User)
    UPDATE User SET Gesamtp = Gesamtp+1 where Vorname like 'Thomas".'.Prozess wurde.....


Log in to reply