【发布时间】:2013-04-13 15:11:49
【问题描述】:
使用 Delphi 2010
谁能告诉我我的代码做错了什么。 cmets 显示了我在尝试将参数传递给 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;
注意:GetMD5 声明如下
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;
谢谢
【问题讨论】:
-
不带参数的插入是否有效?
-
不,我收到错误“INTO 语句中的语法错误”我试过 1.) qry.SQL.Text := 'INSERT INTO Users (User_Id, Password) VALUES (Admin, Admin))';我尝试了 2.) 在每个周围使用quotedStr(例如 QuotedStr('Admin') )
-
好吧,你必须先解决这个问题。由于您的语法看起来不错,因此它肯定取决于您要连接的数据库引擎。一旦能够成功执行不带参数的语句,就可以开始添加参数了。
-
所有其他 SQL 在我的应用程序中都可以正常工作,所以我认为没有数据库问题。我说我不认为,因为这是我尝试做的第一个插入。其他一切都是选择查询。用户表中有一个 ID 字段。但它是自动增量的。我必须在我的插入中做任何事情吗?
-
是的,尝试将两个值都作为 'Admin' 传递,带和不带参数,但仍然得到相同的错误
标签: delphi delphi-2010