![]() |
Datenbank: Access • Version: 2000 • Zugriff über: ADO + SQL
ADO: Parameter funktionieren nicht(oder ich wende falsch an)
Hi,
ich hab nochmal ein Problem mit meiner Accessdatenbank, auf welche ich per ADO zugreife.
Delphi-Quellcode:
Das Problem ist, dass nach dem einfügen der Parameter, die Parameter nicht verändert werden.
for I := 0 to Count - 1 do
begin p := Items[I]; profilequery.SQL.Text := 'INSERT INTO profile (user, password, domain, desc) ' + 'VALUES (:user, :pw, :domain, :desc)'; with profilequery.Parameters do begin ParamByName('user').Value := p.Benutzername; with TCipher_Rijndael.Create(PW, nil) do begin ParamByName('pw').Value := EncodeString(p.Passwort); end; ParamByName('domain').Value := p.Domain; ParamByName('desc').Value := p.Beschreibung; end; tmp := profilequery.SQL.text; // Nur zum Test [1] profilequery.ExecSQL; profilequery.Close; end; Will heißen, im tmp ([1]) steht noch der SQL-Befehl, ohne die veränderten Parametern. Vielleicht verwende ich das auch falsch :mrgreen: Danke für euere Antworten, mfG, Manu :hi: |
Re: ADO: Parameter funktionieren nicht(oder ich wende falsch
Zitat:
Folgende Codeanpassung dürfte die Inserts um einiges beschleunigen
Delphi-Quellcode:
profilequery.SQL.Text := 'INSERT INTO profile (user, password, domain, desc) ' +
'VALUES (:user, :pw, :domain, :desc)'; profilequery.Prepare; for I := 0 to Count - 1 do begin p := Items[I]; with profilequery.Parameters do begin ParamByName('user').Value := p.Benutzername; with TCipher_Rijndael.Create(PW, nil) do begin ParamByName('pw').Value := EncodeString(p.Passwort); end; ParamByName('domain').Value := p.Domain; ParamByName('desc').Value := p.Beschreibung; end; profilequery.ExecSQL; end; |
Re: ADO: Parameter funktionieren nicht(oder ich wende falsch
Hi Bernhard,
danke. Hab leider vergessen zu schreiben, dass noch die Fehlermeldung "Syntaxfehler in der INSERT INTO-Anweisung" kommt :oops: Vielleicht liegt es doch nicht an den Parametern (weil ich das zuerst dachte...). |
Re: ADO: Parameter funktionieren nicht(oder ich wende falsch
Zitat:
Aber nimm mal statt Value -> AsString. Kommt bei EncodeString auch ein "gültiger" String ohne $00 raus? |
Re: ADO: Parameter funktionieren nicht(oder ich wende falsch
Hi,
auch ohne EncodeString klappt das nicht. Und ich hab nur Value. AsString kommt "Undefinierter Bezeichner". Ich verwende ja ein TADOQuery. |
Re: ADO: Parameter funktionieren nicht(oder ich wende falsch
Zitat:
|
Re: ADO: Parameter funktionieren nicht(oder ich wende falsch
Hi,
das ADODataset kennt auch kein AsString :-\ |
Re: ADO: Parameter funktionieren nicht(oder ich wende falsch
Zitat:
|
Re: ADO: Parameter funktionieren nicht(oder ich wende falsch
Zitat:
|
Re: ADO: Parameter funktionieren nicht(oder ich wende falsch
Zitat:
Nenn mal deine Parameter Param1, ... Param4. Diese Felder sind doch alle vom Typ varchar, oder? |
Re: ADO: Parameter funktionieren nicht(oder ich wende falsch
Zitat:
Delphi-Quellcode:
befüllt werden.
ADOdataset.Parameters.ParamValues['user'] := username; // Variante A
// oder so ADOdataset.Parameters.ParamByName('user').Value := username; // Variante B Ich verwende meist Variante A, da weniger Schreibarbeit. .AsString, .AsInteger, u.s.w. gibt es bei den Parametern nicht. Zum Debuggen sollte man besser kein With ... Do Anweisung verwenden, sondern alles komplett ausschreiben. Zumindest Delphi 2-5 können sonst die Inhalte beim Debuggen nicht anzeigen. Wichtig: wenn die INSERT-Anweisung korrekt aussieht, aber dennoch Syntaxfehler gemeldet wird, liegt es meist an der Verwendung von reservierten Wörtern. Die Wörter "user" und "domain" könnten je nach SQL-Dialekt schon eine eigene Bedeutung haben. Ich würde empfehlen, die Feldnamen zu ändern. PS:
Delphi-Quellcode:
// das gefällt mir überhaupt nicht
// es sieht nach einem Speicherleck aus with TCipher_Rijndael.Create(PW, nil) do begin ParamByName('pw').Value := EncodeString(p.Passwort); end; // ich würde das Passwort zunächst direkt im Klartext speichern // nachdem das funktioniert hat, würde ich das verschlüsselte PW speichern |
Re: ADO: Parameter funktionieren nicht(oder ich wende falsch
Hi,
bin jetzt wieder zurück zum TADOQuery. @shmia Danke :) Das mit den Feldbezeichnungen wars. Hab die geändert und zack, gings. Das mit deinem PS hab ich schon geändert, trotzdem danke ;-) |
Re: ADO: Parameter funktionieren nicht(oder ich wende falsch
Zitat:
Hier noch ein paar Listen dazu: ![]() ![]() ![]() Man kann sich wirklich dumm und dämlich suchen, falls man eines dieser Wörter als Tabellen-, View- oder Feldname benützt. |
Re: ADO: Parameter funktionieren nicht(oder ich wende falsch
Zitat:
Danke für die Links ;-) Sowas kann man immer brauchen :D |
Re: ADO: Parameter funktionieren nicht(oder ich wende falsch
Ich grabe diesen Thread mal wieder aus da mein Problem sehr ähnlich ist.
SQL: Zitat:
Delphi-Quellcode:
Letzten Endes wird aber nur folgendes ausgeführt:
{Zugriffsberechtigung des Nutzers aus TW_Nutzer abfragen}
with qrySelNutzer do begin prepared:= true; active := false; close; Parameters.ParamByName('param1').Value := edit_benutzer.text; Parameters.ParamByName('param2').Value := edit_password.text; prepared := true; ExecSQL; end; Zitat:
|
Re: ADO: Parameter funktionieren nicht(oder ich wende falsch
Delphi-Quellcode:
with qrySelNutzer do
begin close; // Schreibweise mit ParamValues[] ist kürzer als ParamByName().Value Parameters.ParamValues['param1'] := edit_benutzer.text; Parameters.ParamValues['param2'] := edit_password.text; // ExecSQL; // FALSCH! SELECT * FROM .... gibt ja eine Datenmenge zurück Open; // Richtig end; |
Re: ADO: Parameter funktionieren nicht(oder ich wende falsch
Im ursprünlichen Thread ging es aber um einen INSERT
|
Re: ADO: Parameter funktionieren nicht(oder ich wende falsch
Zitat:
Leider hat mir das nicht geholfen. Habe es jetzt zwar abgekürzt aber laut ADOConnectionExecuteComplete sind die Platzhalter Fragezeichen immer noch da und wurden nicht durch die Werte ersetzt. Habe es auf
Delphi-Quellcode:
geändert.
with qrySelNutzer do
begin close; Parameters.ParamValues['param1'] := edit_benutzer.text; Parameters.ParamValues['param2'] := edit_password.text; Open; ... SQL Command:
SQL-Code:
SELECT * FROM tw_nutzer WHERE ( userid = ? AND password = ? )
|
Re: ADO: Parameter funktionieren nicht(oder ich wende falsch
Zitat:
Die Ersetzung der Parameter Fragezeichen findet erst tiefer in einer ADO Treiberschicht statt. Trotzdem arbeitet die Abfrage mit Parametern richtig. Möglicherweise kann man die Parameterersetzung anhand des Interface "Command15" selbst vornehmen, aber das passt jetzt nicht mehr zu diesen Thread. |
Re: ADO: Parameter funktionieren nicht(oder ich wende falsch
Okay vielen Dank erstmal.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:36 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-2025 by Thomas Breitkreuz