我使用Delphi XE3并使用SQLite数据库和DB express。Delphi + SQLite +数据库快速选择带参数错误
这是我user validation
代码:
function validateUser(UserName, Password: string): Boolean;
var
AParams: TParams;
SQLTxt: string;
MD5 : TIdHashMessageDigest5;
RecCount: integer;
begin
AParams := TParams.Create(nil);
MD5 := TIdHashMessageDigest5.Create;
try
Result := False;
AParams.CreateParam(ftString, 'username', ptInput).Value := UserName;
AParams.CreateParam(ftString, 'password', ptInput).Value :=
MD5.HashBytesAsHex(MD5.HashString(Password));
SQLTxt := 'SELECT login_id FROM login WHERE '+
'login_username = :username AND login_password = :password ;';
with Form1.sqlqry1 do
begin
SQL.Clear;
SQL.Text := SQLTxt;
Params := AParams;
//Params.Items[0].Value := AParams.Items[0].Value;
//Params.Items[1].Value := AParams.Items[1].Value;
Prepared := true;
Open;
end;
RecCount := Form1.sqlqry1.RecordCount;// I have error here
if RecCount = 0 then
Result := False
else
Result := True;
// end
finally
AParams.Free;
MD5.Free;
end;
end;
应用告诉我[0x0005]: Operation Not Supported
错误。
什么问题?为什么?
这是[已知问题](http://edn.embarcadero.com/article/28494)。我会通过执行'SELECT COUNT(*)FROM ...'查询并从字段中获取值来解决此问题。 – TLama
@TLama:不适用于COUNT(*); –
它应该。 SQLite支持'COUNT'函数,所以如果你执行这样的查询,你应该从第一个字段'SQLQuery1.Fields [0] .AsInteger'获得计数。这将是替换有问题的'RecordCount'属性。 – TLama