TADOQuery bzw TADODataSet Fehlermeldung Parameter xy hat keinen Standardwert
-
Hallo z.Zt. verzweifele ich an einer Query: es kommt immer die Fehlermeldung :
Parameter xy hat keinen Standardwert, wobei xy bei mir "Kann" ist.
hier der Code aus einer switch Anweisung:case 1 :
Wochentag = "Sonntag";if (Form3->ADODataSet1->FieldByName(Wochentag)->AsBoolean == false)
{ Form3->ADODataSet1->Parameters->ParamValues["Kann"] = false;
Form3->ADODataSet1->Parameters->ParamValues["Liefz"] = Form1->LieferZeit;
Form3->ADODataSet1->Close();Select =" Select EmailAdresse, Fahrername, Vorname, Adresse, Handy,Telefonnummer,So1, So2, So3, So4, Sonntag";
Select += " from Fahrer Where (Bereit = true AND Kann = true ";
Select += " AND Liefz Between So1 AND So2) ";
Form3->ADODataSet1->CommandText = Select;Form3->ADODataSet1->Active = true;
Form3->ADODataSet1->Requery();
}
break;
-
Parameternamen werden innerhalb von SQL-Anweisungen mit einem Doppelpunkt voran geschrieben (denn wie soll man sie sonst identifizieren?):
Select += " from Fahrer Where (Bereit = true AND :Kann = true "; Select += " AND :Liefz Between So1 AND So2) ";Ich bin mir nicht sicher, ob durch das Schließen des Datasets nicht auch die Parameter gelöscht werden, also ggf. die Reihenfolge ändern.
Frage:
Sind "Kann" und "Liefz" bei dir nur Parameter oder sind das Namen von Datenbank-Spalten, da du vorher "Kann" auf false setzt und dann abfragst, ob ":Kann = true" ist?
-
Th schrieb:
Ich bin mir nicht sicher, ob durch das Schließen des Datasets nicht auch die Parameter gelöscht werden, also ggf. die Reihenfolge ändern.
Auf jeden Fall werden sie gelöscht, wenn man den CommandText ändert. Die Parameter dürfen also erst gesetzt werden, nachdem der CommandText zugewiesen wurde.
[Edit] Die ganze Select-Anweisung ist irgenwie falsch. Das kann so oder so nicht funktionieren. Schreib doch einfach mal, was denn da was für ein Parameter sein soll und was die Query schlussendlich machen soll.
-
Hallo
Ich vermute mal caia bringt Feldnamen und Parameter durcheinander. Denn Sinn würde das hier ergeben (davon ausgehend das Kann ein existierendes Feld ist auf dem die Bedingung angewendet werden soll)
Form3->ADODataSet1->Parameters->ParamValues["Kann_Wert"] = false; ... AND Kann = :Kann_Wert ...bis bald
akari
-
Der Doppelpunkt war der Fehler jetzt gibts zumindest keine Fehlermeldung mehr. Tatsächlich habe ich noch einige Fehler (vor lauter probieren) gemacht. Z.B in der if Schleife gemacht. Die geschweifte Klammer ist weiter oben. Ich bin halt noch ziemlich grün aber ich kämpf mich durch viele Dank Th. (und Joe_M hat ja auch recht, akari geb ich noch nicht recht.
Also Der Fahrer hat z.B. Urlaub oder so dann -> Bereit = false
oder er fährt z.B. Sonntags nie dann -> Kann = false
oder er fährt nicht (Liefz) in dem Zeitraum zwischen z.B 2:00 und 4:00 Uhr .if (Form3->ADODataSet1->FieldByName(Wochentag)->AsBoolean == false)
{ Form3->ADODataSet1->Parameters->ParamValues["Kann"] = false;}Form3->ADODataSet1->Parameters->ParamValues["Liefz"] = Form1->LieferZeit;
Form3->ADODataSet1->Close();
Select =" Select EmailAdresse, Fahrername, Vorname, Adresse, Handy,Telefonnummer,So1, So2, So3, So4, Sonntag";
Select += " from Fahrer Where (Bereit = true AND Kann = true ";
Select += " AND Liefz Between So1 AND So2) ";
Form3->ADODataSet1->CommandText = Select;Form3->ADODataSet1->Active = true;
Form3->ADODataSet1->Requery();break;