DM.TADOQUERY.SQL('SELECT * FROM USER_INFO WHERE USERNAME=:USERNAME');什么意思?
应该是:
DM.TADOQUERY.SQL.Add('SELECT * FROM USER_INFO WHERE USERNAME=:USERNAME');
吧
是取出还是赋值?
若是取值:
EDIT1.TEXT:=VarToStr(DM.TADOQUERY.Parameters.ParamByName('UserName'));
若是赋值:
应该先赋值,再执行SQL
应该是:
DM.TADOQUERY.SQL.Add('SELECT * FROM USER_INFO WHERE USERNAME=:USERNAME');
吧
是取出还是赋值?
若是取值:
EDIT1.TEXT:=VarToStr(DM.TADOQUERY.Parameters.ParamByName('UserName'));
若是赋值:
应该先赋值,再执行SQL
DM.TADOQUERY.SQL.Clear;
DM.TADOQUERY.SQL.Add('SELECT * FROM USER_INFO WHERE USERNAME=:USERNAME');
DM.TADOQUERY.Parameters.ParamByName('UserName').DataType:=ftFixedChar;
DM.TADOQUERY.Parameters.ParamByName('UserName').value:=EDIT1.TEXT;
DM.TADOQUERY.Open;
这里你的USERNAME应该是赋值吧,用你原先的语句DM.TADOQUERY.Parameters.ParamByName('UserName').ASSTRING:=EDIT1.TEXT;
应该可以的。
实际上用ASSTRING则有错误,用VALUE就没错误!但ftFixedChar说没定义;
另外我在TRY..EXCEPT..END中使用ON EDBEngineError do,也提示EDBEngineError没定义,是什么原因?
DM.TADOQUERY.Close;
DM.TADOQUERY.SQL.Clear;
DM.TADOQUERY.SQL.Add('SELECT * FROM USER_INFO WHERE USERNAME=:USERNAME');
//DM.TADOQUERY.Parameters.ParamByName('UserName').DataType:=ftFixedChar;
DM.TADOQUERY.Parameters.ParamByName('UserName').value:=EDIT1.TEXT;
try
DM.TADOQUERY.Open;
except on EDBEngineError do
begin
showmessage('打开数据库错误!');
exit
end;
end;
begin
Close;
SQL.Add('SELECT * FROM User_Info WHERE UserName = :UserName');
Parameters.ParamValues['UserName'] := Edit1.Text;
Open;
end;
上述语句一次通过并无问题。提醒:
1)TADOQuery的Connection属性或ConnectionString属性是否正确设置。
2)会不会是Bug,你有没有安装Delphi的补丁程序。有没有安装ADOExpress的两个补丁程序。
另外,你使用的ADO版本是多少。