Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ParamsByName liefert ? zurück (https://www.delphipraxis.net/46460-paramsbyname-liefert-zurueck.html)

Bacardifeeling 25. Mai 2005 11:00

Datenbank: Firebird • Version: 1.5 • Zugriff über: Zeos

ParamsByName liefert ? zurück
 
Moin :)

Habe ein kleines Problem mit einem INSERT....

Delphi-Quellcode:
 begin
      with Datamodule1 do
        begin
          //Kundendetails füllen
          Zquery.SQL.clear;
          Zquery.SQL.Add('SELECT MAX (ID) MAXVAR FROM KUNDEN_D');
          Zquery.Open;
          Maxvar := (Zquery.fieldbyname ('maxvar').AsInteger) + 1;
          Zquery.Close;
          Zquery.sql.Clear;
          Zquery.sql.add ('INSERT INTO Kunden_d values ');
          Zquery.sql.add ('(:ID, :Lieferzonen_ID, :Bankverb_ID, :Orte_ID, :Strasse, :Geb_Datum, :Kunde_Seit, :Tel, :Email, :Handy)');
          //Zquery.ParamCheck := True;
          Zquery.Params.ParamByName('ID').AsInteger := MaxVar;
          showmessage(inttostr(Zquery.Params.ParamByName('ID').AsInteger));
          Zquery.Params.ParamByName ('Lieferzonen_ID').AsInteger := (integer(CB_Lieferz.Items.Objects[cb_Lieferz.ItemIndex]));
          Zquery.Params.ParamByName('Bankverb_ID').AsInteger := 1;
          Zquery.Params.ParamByName ('Orte_ID').AsInteger := (integer(cb_Ort.Items.Objects[cb_Ort.ItemIndex]));
          Zquery.Params.ParamByName('Strasse').AsString := ME_STR.Text;
          Zquery.Params.ParamByName('Geb_Datum').Asstring := me_geb.text ;
          Zquery.Params.ParamByName('Kunde_Seit').Asstring := me_DAt.text;
          Zquery.Params.ParamByName('Tel').Asstring := me_tel.text;
          Zquery.Params.ParamByName ('Email').AsString := me_mail.text;
          Zquery.Params.ParamByName('Handy').AsString := me_handy.text;
          showmessage (Zquery.SQL.Text);
          Zquery.ExecSQL;
         .
         .
         .
 end;
Der über schowmessage angezeigte Text für den Parameter :ID enthält den richtigen Wert...
bei Ausgabe des gesamten Textes bekomme ich dann :
Zitat:

INSERT INTO Kunden_d values (:ID, :Lieferzonen_ID, :Bankverb_ID, :Orte_ID, :Strasse, :Geb_Datum, :Kunde_Seit, :Tel, :Email, :Handy)
es stehen also, IMHO, keine Werte in den Parametern.

In der Exeption steht es genauso, ausser dass die Parameter mit je einem "?" gefüllt sind.

Wäre nett wenn mir jemand sagen könnte was ich hier falsch mache...





PS: Ach ja, schön dabei zu sein :corky:

alcaeus 25. Mai 2005 11:10

Re: ParamsByName liefert ? zurück
 
Hallo bacardifeeling,

die SQL-Anweisung des Queries wird immer die Parameter enthalten. Dies erlaubt es dir, dem Parameter einen neuen Wert zuzuweisen, ohne das Query selbst anfassen zu müssen. Wenn die Parameter im Query sofort durch die Werte ersetzt werden würden, wärs das gewesen mit der Einfachheit ;)
AFAIR werden die Parameter beim Execute eingesetzt, dann aber auch nur intern.
Warum eine Exception auftritt, weiß ich jetzt nicht, welche Exception tritt überhaupt auf? Ein "?" statt einem Parameter heißt aber, dass kein Wert für den Parameter zugewiesen worden ist, was mich in deinem Fall etwas stutzig macht, da du ja alles zuweist. :-?

Greetz
alcaeus

Dummy 25. Mai 2005 11:10

Re: ParamsByName liefert ? zurück
 
Hi ,
also ich würde es so machen:

Delphi-Quellcode:
Zquery.sql.add ('INSERT INTO Kunden_d values ');
Zquery.sql.add '(:ID, :Lieferzonen_ID, :Bankverb_ID, :Orte_ID, :Strasse, :Geb_Datum, :Kunde_Seit, :Tel, :Email, :Handy)');
Zquery.sql.add ('VALUES ('+ IntToSTr(MaxVar)+', '+
                          + IntToStr(cb_Ort.Items.Objects[cb_Ort.ItemIndex])+','+ 
usw usw..
                         ')');
[edit=alcaeus]Überlanges Zitat entfernt und Delphi-Tags eingefügt. Beim nächsten Mal bitte selbst machen. Danke :) Mfg, alcaeus[/edit]

Bacardifeeling 25. Mai 2005 11:25

Re: ParamsByName liefert ? zurück
 
Danke für die Antworten ersteinmal.
Glaube den Fehler gefunden zu haben...

Zitat:

Zitat von alcaeus
Hallo bacardifeeling,

... welche Exception tritt überhaupt auf?...
alcaeus

nach einem "intensiven Studium" der Exception habe ich mir meine DB nochmal angeschaut...
und siehe da... 13 Felder und ich weise nur 10 zu... :roll: ... :wall:

versuche jetzt mal das einzubauen und sage dann ob's das war.

Bacardifeeling 25. Mai 2005 11:39

Re: ParamsByName liefert ? zurück
 
hm...
das hinzufügen der drei Feldzuweisungen hat den besagten ausgeschaltet, bekomme jetzt allerding einen "Convertion Error"... :(

Das sagt mir nu gar nix...

könnte das jemand für mich Verständlich machen?

@Alcaeus: Danke für den Denkanstoss...

Edit:

Delphi-Quellcode:
Zquerry1.Params.ParamByName ('pass').AsString := '0';
        Zquerry1.Params.ParamByName ('abgleich').AsString := '0';
        Zquerry1.Params.ParamByName ('Dat_abgl').AsString := me_Dat.Text;
Der hinzugefügte Code...

alcaeus 25. Mai 2005 11:56

Re: ParamsByName liefert ? zurück
 
Hallo bacardifeeling,

Zitat:

Zitat von Bacardifeeling
Delphi-Quellcode:
Zquerry1.Params.ParamByName ('pass').AsString := '0';
        Zquerry1.Params.ParamByName ('abgleich').AsString := '0';
        Zquerry1.Params.ParamByName ('Dat_abgl').AsString := me_Dat.Text;

du weist einem Parameter einen String zu, das heißt dieser wird anschließend wahrscheinlich auch noch in Hochkommas gewickelt, so dass es keine Probleme mit dem Query gibt. Wenn das Feld aber ein Int-Feld ist, so krachts natürlich bei den Hochkommas.

Ich würde es so machen:
Delphi-Quellcode:
Zquerry1.Params.ParamByName ('pass').AsInteger := 0;
Zquerry1.Params.ParamByName ('abgleich').AsInteger := 0;
Zquerry1.Params.ParamByName ('Dat_abgl').AsString := me_Dat.Text;
Greetz
alcaeus

Bacardifeeling 25. Mai 2005 12:00

Re: ParamsByName liefert ? zurück
 
Ok, hab über die Delphi-Praxis suche einen Beitrag gefunden welcher zu meinem Problem passt...

Convertion Error

werde dann meine Typzuweisungen mal umstellen :)

Sind einige Datumsfelder in der Tabelle welche ich versuche als String zu übergeben...


Danke für die Hilfe... :zwinker:

Edit:
manchmal reicht schon ein Denkanstoss...

Mfg
Oli


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz