我正在尝试使用SQL检查数据库(Access)中是否存在特定的用户名。如果我只使用字母或字符串字符,代码工作正常,但当我使用数字时,如下面的示例所示,即使我将它们作为字符串插入,我也会收到错误:
“无法将类型(Null)的变量转换为类型(OleStr)”
DataModule.Query.Active := False;
sQuery := 'SELECT * FROM Login WHERE Username = "31"';
DataModule.Query.SQL.Text := sQuery;
DataModule.Query.Active := True;
我不知道我做错了什么。
编辑:
调试器在以下代码中的if行之后给出错误
if UpperCase(DataModule.Query['Username']) = sUsername then
begin
if DataModule.Query['Password'] = sPassword then
begin
bPass := True;
end
[已解决]
谢谢你们所有人的建议,我让它工作了!
1条答案
按热度按时间smtd7mpg1#
您应该使用
Query.FieldByName('Password').AsString
(与Username字段相同)来消除任何NULL问题。.AsString
会将db NULL转换为 Delphi 空字符串''
。打开查询后,需要在实际测试用户名/密码逻辑之前测试是否存在任何记录。
注意:您不需要再次检查“使用者名称”,因为如果查询传回的结果有相符项目,而且该使用者存在于您的数据表中:
如前所述,您最好使用参数化查询,或者至少使用
QuotedStr
以避免SQL注入。例如:参数化查询应如下所示: