各位老师好,有关动态sql 语句的构造问题....想了好长时间都不得呵....

abcd_nonqq 2009-04-02 12:25:52
各位老师好,有关动态sql 语句的构造问题....

procedure TForm7.BitBtn2Click(Sender: TObject);
var n,i:integer;
sqlstr:string;
begin
sqlstr:='select * from stuinfo';
n:=ListBox1.Items.Count-1;
if n>=0 then
begin
sqlstr:=sqlstr+' WHERE (省份="'+trim(ListBox1.Items[0])+'")';
i:=1;
while i<=n do
begin
sqlstr:=sqlstr+'OR 省份="'+trim(ListBox1.Items[i])+'")';
i:=i+1;
end;
end;

sqlstr:=sqlstr+';';
Memo1.Lines.Add(sqlstr);
ADoquery1.SQL.Clear;
Adoquery1.SQL.Add(sqlstr);
ADoquery1.Open;
end;
编译不错,但是
运行时,有错,如选择某一字段,这字体贴是有的,如广东,系统提示:列名'广东'无效.
不知首错在那里,请帮忙吧.

以上程序构造出的sql 语句是 select * from stuinfo WHERE (省份="广东");

...全文
98 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
abcd_nonqq 2009-04-02
  • 打赏
  • 举报
回复
很感谢众多老师的帮助,特别是3楼的jadeluo 老师的帮助,使得问题得到解决.
寻梦928 2009-04-02
  • 打赏
  • 举报
回复
你把你动态组合的Sql语句用INputbox抛出来看看能否在查询分析器执行就行了。
伟志 2009-04-02
  • 打赏
  • 举报
回复
楼上的正解,Delphi里的字符串都是单引号的。
beifangke 2009-04-02
  • 打赏
  • 举报
回复
用showMessage或者Memo把sql语句输出来,在查询分析器里执行,看哪里有错

jadeluo 2009-04-02
  • 打赏
  • 举报
回复
代码还可以简化一些:

procedure TForm7.BitBtn2Click(Sender: TObject);
var
n, i : integer;
sqlstr: string;
begin
sqlstr := 'select * from stuinfo';
n := ListBox1.Items.Count - 1;
if n >= 0 then
begin
sqlstr := sqlstr + ' WHERE (省份=''' + trim(ListBox1.Items[0]) + ''')';
for i := 1 to n do
sqlstr := sqlstr + ' OR (省份=''' + trim(ListBox1.Items[i]) + ''')';
sqlstr := sqlstr + ';';
Memo1.Lines.Add(sqlstr);
ADoquery1.SQL.Clear;
Adoquery1.SQL.Add(sqlstr);
ADoquery1.Open;
end;
jadeluo 2009-04-02
  • 打赏
  • 举报
回复
sqlstr:=sqlstr+' WHERE (省份="'+trim(ListBox1.Items[0])+'")';
......
sqlstr:=sqlstr+'OR 省份="'+trim(ListBox1.Items[i])+'")';

这两句里的双引号应该修改为单引号, 另外第二句里少了一个左括号, 修改为:

sqlstr:=sqlstr+' WHERE (省份='''+trim(ListBox1.Items[0])+''')';
......
sqlstr:=sqlstr+'OR (省份='''+trim(ListBox1.Items[i])+''')';
bdmh 2009-04-02
  • 打赏
  • 举报
回复
看你的sql语句应该没问题,列名'广东'无效,应该是无广东这个字段,肯定是这里的错码

2,497

社区成员

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

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