How to pass string parameters to an TADOQuery?
delphi, delphi-2010
Solution
This works fine for me, using the `DBDemos.MDB` file that shipped with Delphi (`C:\Users\Public\Documents\RAD Studio\9.0\Samples\Data\dbdemos.mdb` by the default installation)
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('INSERT INTO Country (Name, Capital, Continent, Area, Population)');
ADOQuery1.SQL.Add('VALUES (:Name, :Capital, :Continent, :Area, :Population)');
ADOQuery1.Parameters.ParamByName('Name').Value := 'SomePlace';
ADOQuery1.Parameters.ParamByName('Capital').Value := 'Pitsville';
ADOQuery1.Parameters.ParamByName('Continent').Value := 'Floating';
ADOQuery1.Parameters.ParamByName('Area').Value := 1234;
ADOQuery1.Parameters.ParamByName('Population').Value := 56;
ADOQuery1.ExecSQL;
ADOQuery1.Close;
// Open it to read the data back
ADOQuery1.SQL.Text := 'SELECT * FROM Country WHERE Name = :Name';
ADOQuery1.Parameters.ParamByName('Name').Value := 'SomePlace';
ADOQuery1.Open;
ShowMessage(ADOQuery1.FieldByName('Name').AsString);
Problem
Using Delphi 2010 Can anyone tell me what I am doing wrong here with my code. The comments show the errors that I receive with the particular methods that I tried to pass parameters to my ADOQuery ``` procedure CreateAdminLogin(const APasswd: string); var qry: TADOQuery; //P1, P2: TParameter; begin qry := TADOQuery.Create(nil); try qry.Connection := frmDataModule.conMain; qry.SQL.Text := 'INSERT INTO Users (User_Id, Password) VALUES (:u, :p)'; //Syntax error in INTO statement qry.Parameters.ParamByName('u').Value:= 'Admin'; qry.Parameters.ParamByName('p').Value:= GetMd5(APasswd); //invalid variant operation {qry.Parameters.ParamByName('u').Value.AsString:= 'Admin'; qry.Parameters.ParamByName('p').Value.AsString:= GetMd5(APasswd);} //invalid variant operation {P1:= qry.Parameters.ParamByName('u'); P1.Value.asString:= 'Admin'; P2:= qry.Parameters.ParamByName('p'); P2.Value.asString:= GetMd5(APasswd);} qry.Prepared := True; qry.ExecSQL; finally qry.Free; end; end; ``` NOTE: GetMD5 is declared as follows ``` function GetMd5(const Value: String): string; var hash: MessageDigest_5.IMD5; fingerprint: string; begin hash := MessageDigest_5.GetMd5(); hash.Update(Value); fingerprint := hash.AsString(); Result := fingerprint; end; ``` Thankx