关于: ADOQuery1.Parameters.ParamByName('lastName').Value := '' 后面赋值的一个问题.
问题如下:
adoquery1 对应的SQL语句是:
select * from Employees where LastName =:lastName and FirstName =:FirstName
如果用户在"LastName"框中输入了:Tom 在"FirstName"框中没有输入值进去. 也就是客房只想查找LastName 为:Tom 的人的信息.
对应的实际SQL语句为:
select * from Employees where LastName = 'Tom'
或者:
select * from Employees where LastName ='Tom' and FirstName=FirstName
如果采用参数传递的方式,那么前一个参数应这样写:
ADOQuery1.Parameters.ParamByName('lastName').Value := 'Tom'
可是后一个参数 FirstName 呢?应该怎样写?
ADOQuery1.Parameters.ParamByName('FirstName')...............
[解决办法]
Sql语句改为:
Sql.text:=
'select * from Employees where LastName =:lastName and FirstName like ''%:FirstName%'''
[解决办法]
那你可以这们做嘛:
if trim(edt_LName.text) < > ' ' and trim(edt_fName.text)<>'' then
begin
sqlstr:=select * from Employees where LastName =:LastName and FirstName=:FirstName;
ADOQuery1.Parameters.ParamByName('LastName').value:=edt_LName.text;
ADOQuery1.Parameters.ParamByName('FirstName').value:=edt_FName.text;
end;
if trim(edt_LName.text) < > ' ' and trim(edt_fName.text)='' then
begin
sqlstr:=select * from Employees where LastName =:LastName;
ADOQuery1.Parameters.ParamByName('LastName').value:=edt_LName.text;
end;
if trim(edt_LName.text) = ' ' and trim(edt_fName.text)<>'' then
begin
qlstr:=select * from Employees where FirstName=:FirstName;
ADOQuery1.Parameters.ParamByName('FirstName').value:=edt_FName.text;
end;
[解决办法]
对于参数不确定的情况,可以根据条件动态生成SQL语句,像你下面的情况:
select * from Employees where LastName =:lastName and FirstName =:FirstName
可以写成这样
var
sqlstr:string;
begin
sqlstr:='select * from Employees where ';
if lastname.text<>'' then
begin
sqlstr:=sqlstr+'lastname=:lastname ';
ADOQuery1.Parameters.ParamByName( 'lastName ').Value :=lastname.text;
end;
if (firstname.text<>'')and(lastname<>'') then
begin
sqlstr:=sqlstr+' and firstname=:firstname';
ADOQuery1.Parameters.ParamByName( 'firstName ').Value := firstname.text;
end;
if (firstname.text<>'')and(lastname='') then
begin
sqlstr:=sqlstr+' firstname=:firstname';
ADOQuery1.Parameters.ParamByName( 'firstName ').Value := firstname.text;
end;
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add(sqlstr);
adoquery1.open;
end;