beginwith Query1 do
begin
try
close;
SQL.Clear;
SQL.Text:='SELECT * FROM Operator_Info WHERE 用户名=:username';
ParamByName('username').AsString:='admin';
Open;
if Eof=False then
if (FieldByName('密码').AsString='1')and(FieldByName('操作级别').AsString='主管') then
Label1.Caption:='数据库连接成功,用户名存在';
except on E:Exception do
Showmessage(e.Message);
end;
end;
end;为什么说找不到'密码'呢?
SQL.Text:='SELECT * FROM [Operator_Info] WHERE [用户名]=:username';
ParamByName('username').AsString:='admin';
Open;
if Eof=False then
if (FieldByName('[密码]').AsString='1')and(FieldByName('[操作级别]').AsString='主管') then还是找不到...
ParamByName('username').AsString:='admin';
把上面两句换成
SQL.Text:='SELECT * FROM Operator_Info WHERE 用户名='+QuotedStr('admin');试试
改成:
Parameters.ParamByName('username').Value := 'admin';
晕,字段名就不能用中文吗?
建议用英文件缩写
pwd
哎,改程序是最郁闷的了。让一个做C++的做Delphi,就更加郁闷了。
还请大家多多帮忙。不然没法混了
i: Integer;
beginwith Query1 do
begin
try
close;
SQL.Clear;
SQL.Text:='SELECT * FROM Operator_Info WHERE 用户名=:username';
ParamByName('username').AsString:='admin';
Open;
if Eof=False then begin
for i := 0 to Fields.Count do begin
ShowMessage(Fields.Fields[i].FieldName);
end;
if (FieldByName('密码').AsString='1')and(FieldByName('操作级别').AsString='主管') then
Label1.Caption:='数据库连接成功,用户名存在';
end;
except on E:Exception do
Showmessage(e.Message);
end;
end;
end;使用上面的代码看一下有没有"密码"这个字段名称存在。
用户名 密码 年龄 操作级别 ...
admin 1 20 主管上面的代码只,读出了年龄
然后就是 list index out of bounds(1)
....
测试还是一样的效果。
for i := 0 to Fields.Count - 1 do begin 如果只读取了一个"年龄"就List index out of bounds(1),那说明就只有一个字段,应该是你的查询出现了问题。
unsigned 给的代码中只读出了年龄,因为年龄是int类型的。于是我把nvarchar类型改成varchar类型以后,就完全正确了。多谢大家的帮助!