Warum geht der eine SQL und der andere mit Parameter nicht ???



  • hab 2 sqks geschrieben die beide das selbe bewirken (dachte ich zumindest).
    pflichtfelder sind nur Name und Vorname und die anderen können leergelassen werden. der erste sql funktioniert aber nur wenn alle felder ausgefüllt sind sonst bringt er mir eine odbc fehlermeldung das ein ungenauer wert oder sowas änliches aufgetretten ist.

    hier der 1. sql der nur geht wenn alle felder ausgefüllt sind

    // SQL Abfrage erstellen
            fmDB->ADOQuery1->SQL->Add("INSERT INTO Personal (Vorname, Name, Strasse, PLZ, Ort, Tel, Mobil, Status)");
            frmDB->ADOQuery1->SQL->Add("VALUES(:Vorname, :Name, :Strasse, :PLZ, :Ort, :Tel, :Mobil, 'on')");
    
            frmDB->ADOQuery1->Parameters->ParamByName("Vorname")->Value     = txtVorname->Text;
            frmDB->ADOQuery1->Parameters->ParamByName("Name")->Value        = txtName->Text;
            frmDB->ADOQuery1->Parameters->ParamByName("Strasse")->Value     = txtStrasse->Text;
            frmDB->ADOQuery1->Parameters->ParamByName("PLZ")->Value         = txtPLZ->Text;
            frmDB->ADOQuery1->Parameters->ParamByName("Ort")->Value         = txtOrt->Text;
            frmDB->ADOQuery1->Parameters->ParamByName("Tel")->Value         = txtTel->Text;
            frmDB->ADOQuery1->Parameters->ParamByName("Mobil")->Value       = txtMobil->Text;
    

    und hier der 2. sql bei dem alles geht:

    Personal (Vorname, Name, Strasse, PLZ, Ort, Tel, Mobil, Status)");
            frmDB->ADOQuery1->SQL->Add("VALUES('" + txtVorname->Text + "', '" + txtName->Text + "', '" + txtStrasse->Text + "', '" + txtPLZ->Text + "', '" + txtOrt->Text + "', '" + txtTel->Text + "', '" + txtMobil->Text + "', 'on')");
    

    danke für euere hilfe!!!



  • vor ein paar tagen habe ich, wie blöd nach genau gleichem fehler gesucht, wo eigentlich kein fehler ist.

    irgend wann bin auf die idee gekommen, die anweisungen in meinem code zu vertauschen.

    also zuerst parameter zuweisen dann SQL Statement einfügen. danach ging. 😡

    ich habe meine Parameter aber "per hand" erstellt:

    if (!EditABis->Text.IsEmpty())
      {
        TParameter *p = ADOQuery1->Parameters->AddParameter();
        p->DataType = ftString;
        p->Name = "ABIS";
        p->Value = EditABis->Text; 
        String SQL = " AND (abv.BELEGPOS.ARTIKEL_NR<=:ABIS)";
        ADOQuery1->SQL->Add(SQL);
      }
    

    👎 👎 👎

    ...ist wohl einer, der unzähligen bcb 6 bugs.

    vieleicht hilft es dir auch



  • SQL_DEBUGGER schrieb:

    frmDB->ADOQuery1->Parameters->ParamByName("Vorname")->Value = txtVorname->Text;
    

    Hast Du schon mal anstatt Value AsString ausprobiert, also etwa so:

    frmDB->ADOQuery1->Parameters->ParamByName("Vorname")->AsString = 
                                                          txtVorname->Text;
    

    Es könnte aber vielleicht auch so sein, daß der BCB die Parameter nicht
    rechtzeitig kennt, also auch die Feldtypen nicht. U.U. hilft ein Prepare().
    Manche Datenbank-Treiber unterstützen auch prinzipiell keine Parameter.

    Gruß,

    Alexander


Anmelden zum Antworten