ADOQuery中使用IN做为查询条件时的参数传入

belsai 2020-07-07 04:08:51
在DELPHI7中使用TADOQuery组件连接SQLSERVER数据库

ADOQ1.Close;
ADOQ1.SQL.Text := 'SELECT * FROM TABLE1 WHERE HNAME IN(:NAME)';
ADOQ1.Parameters[0].Values := ??//这个参数该如何传递?
ADOQ1.Open;

字段HNAME数据类型为VARCHAR(20)
我试过传入字符串:
sText := '张三,李四'

sText := '''张三'',''李四'''
两种方式都不行
...全文
351 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
belsai 2020-07-08
  • 打赏
  • 举报
回复
引用 3 楼 xrbaa 的回复:
这样试试: IN(:NAME1,:NAME2) ADOQ1.Parameters[0].Values := '张三'; ADOQ1.Parameters[1].Values := '李四';
可是用IN做为条件就是因为参数数量不能确定
秋天之落叶 2020-07-08
  • 打赏
  • 举报
回复
楼上正解,两个参数不能用一个变量覆盖
belsai 2020-07-08
  • 打赏
  • 举报
回复
引用 6 楼 xrbaa 的回复:
再这样试试: IN :NAMES ADOQ1.Parameters[0].Values := '(''张三'',''李四'')';
经测试不行!
belsai 2020-07-08
  • 打赏
  • 举报
回复
引用 7 楼 早打大打打核战争 的回复:
ADOQ1.SQL.Text := Format('SELECT * FROM TABLE1 WHERE HNAME IN(%s)', ['"张三", "李四"']); ADOQ1.Open;
这种方式可行使用略有不便,但总算是可以解决问题了!
hj8090 2020-07-08
  • 打赏
  • 举报
回复
var alist: TStringList; begin alist := TStringList.Create; try alist.Add(QuotedStr('张三')); alist.Add(QuotedStr('李四')); alist.Add(QuotedStr('xx')); ADOQ1.Close; ADOQ1.SQL.Text := Format('SELECT * FROM TABLE1 WHERE HNAME IN(%s)', [alist.CommaText]); ADOQ1.Open; finally alist.Free; end;
xrbaa 2020-07-08
  • 打赏
  • 举报
回复
7楼的方案是不用参数,把要查询的参数拼接到SQL语句里。
  • 打赏
  • 举报
回复
ADOQ1.SQL.Text := Format('SELECT * FROM TABLE1 WHERE HNAME IN(%s)', ['"张三", "李四"']);
ADOQ1.Open;
xrbaa 2020-07-08
  • 打赏
  • 举报
回复
再这样试试:
IN :NAMES

ADOQ1.Parameters[0].Values := '(''张三'',''李四'')';
xrbaa 2020-07-07
  • 打赏
  • 举报
回复
这样试试:
IN(:NAME1,:NAME2)

ADOQ1.Parameters[0].Values := '张三';
ADOQ1.Parameters[1].Values := '李四';
belsai 2020-07-07
  • 打赏
  • 举报
回复
引用 1 楼 sixgj 的回复:
''张三,李四''
经过测试没结果,sText := '张三'可以
sixgj 2020-07-07
  • 打赏
  • 举报
回复
''张三,李四''

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧