这SQL如何写(50分)

Y

youngyu

Unregistered / Unconfirmed
GUEST, unregistred user!
with ADOQuery1 do
begin
Close;
sql.clear;
SQL.Add('Select * from mainmark');
SQL.ADD('where gs_dm IN:)p1)');
Parameters.ParamByName('P1').Value :='SH'; //查出相应的一条记录
// Parameters.ParamByName('P1').Value :='SH,RD,AB'; //查不出结果
open;
end;

数据库Sql SERVER 7.0,gs_dm是一个nvarchar字段,有'SH','RD','AB'等值。
我需要执行Parameters.ParamByName('P1').Value :='SH,RD,AB',
因为有很多记录,请不要告诉我用OR。
 
'('sh','rd','ab')'
 
'('sh','rd','ab')' 出错;
'(“sh”,“rd”,“ab”)' 查不到记录。
 
Parameters.ParamByName('P1').Value :='('+''''+SH+''''+','+''''+RD+''''+
','+''''+AB+''''+')';
标点符号用英文的
 
Parameters.ParamByName('P1').Value :='('+''''+SH+''''+','+''''+RD+''''+
','+''''+AB+''''+')';

还是出错:
[Error] Unit1.pas(41): Undeclared identifier: 'SH'
[Error] Unit1.pas(41): Undeclared identifier: 'RD'
[Error] Unit1.pas(42): Undeclared identifier: 'AB'

编译时,把值当变量了。
 
直接写SQL语句吧
这个用Parameter的方法行不通的,这个并不是简单的替换字符串操作(因为是ADO)
 
TO 青萍:
直接怎么写。
 
with ADOQuery1 do
begin
Close;
sql.clear;
SQL.Add('Select * from mainmark');
SQL.ADD('where gs_dm IN(''SH'',''RD'',''AB'')');
open;
end;

 
Parameters.ParamByName('P1').Value :='"SH","RD","AB"';
 
搞定。
Var X1:String;

X1:='select * from mainmark where gs_dm IN('+''''+'SH'+''''+','+''''+'RD'+''''+')';
ADOQuery1.sql.add(X1);
以上通过;

SQL.Add('Select * from mainmark');
SQL.ADD('where gs_dm IN(''SH'',''RD'',''AB'')');

这个也通过,但第一个适用性强。
谢谢各位大富翁。
 
顶部