求教,Ado引号内字符串没有正确结束

萤火虫不高飞 2013-11-13 05:52:49
执行后,测试报这个错



procedure TForm1.Button1Click(Sender: TObject);
var T:string;
begin


if edit1.Text <> '' then
begin
T:=' and t.name like ''' +'%'+edit1.Text+'%'+ ''' ' ;
end;

if edit2.Text <> '' then
begin
T:= T + ' and t.about like ''' +'%'+edit2.Text+'%'+ ''' ' ;
end;

if edit3.Text <> '' then
begin
T:= T + ' and t.about1 like ''' +'%'+edit3.Text+'%'+ ''' ' ;
end;

with adoquery1 do
begin
close;
sql.Clear;
sql.Text:=('select t.name,t.about,t.about1 from tpl_word1 t where t.wordtype <> '' ''' + T + ''' ') ;
open;
end;
end;
...全文
242 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
萤火虫不高飞 2013-11-22
  • 打赏
  • 举报
回复
引用 10 楼 babydog01 的回复:
非空,这里的空并不是空格。空格应该说是字符串。 nil:空指针,空地址,对象也是指针,所以可以object := nil; null:null是一个未定义值的变量,既不是0也不代表空字符串,它是未定义的。
那如果我要在语句里面判断非空呢,应该怎么写?
babydog01 2013-11-22
  • 打赏
  • 举报
回复
select t.name,t.about,t.about1 from tpl_word1 t where t.wordtype isnull
babydog01 2013-11-21
  • 打赏
  • 举报
回复
非空,这里的空并不是空格。空格应该说是字符串。 nil:空指针,空地址,对象也是指针,所以可以object := nil; null:null是一个未定义值的变量,既不是0也不代表空字符串,它是未定义的。
萤火虫不高飞 2013-11-21
  • 打赏
  • 举报
回复
漏了个'',应该是t.wordtype<>'''',看来我还是quotedstr好了
萤火虫不高飞 2013-11-21
  • 打赏
  • 举报
回复
我如果想让t.wordtype的条件为非空,t.wordtype<>''不行么
萤火虫不高飞 2013-11-21
  • 打赏
  • 举报
回复
找出来了,应该是 t.wordtype<>''出了字符问题,改为t.wordtype in (0,21,23,25)就没报错了
nm_wyh 2013-11-19
  • 打赏
  • 举报
回复
T:=' and t.name like ''' +'%'+edit1.Text+'%'+ ''' ' ; 都改为: T := ' and t.name like ''%' + Trim(Edit1.Text) + '%''';即可。其他的语句都照这个改就行了, 还有就是像2楼说的用quotedstr就可以,防止SQL 注入可以。
萤火虫不高飞 2013-11-19
  • 打赏
  • 举报
回复
楼上的是无效字符,如果没填写内容就变成 引号内的字符串没有正确结束
萤火虫不高飞 2013-11-19
  • 打赏
  • 举报
回复
引用 1 楼 Oraclers 的回复:
sql.Text:=('select t.name,t.about,t.about1 from tpl_word1 t where t.wordtype <> '' ''' + T) ; 去掉背后一个引号,见上。
按照你和3楼的方法又变成了字符错误,是不是数据库的字段类型问题?我三个数据都是varchar2的
babydog01 2013-11-15
  • 打赏
  • 举报
回复
楼主这种写法,要是edit1,edit2,edit3中有一个引号,你就惨了。 用quotedstr('%'+edit1.text+'%')这个好用。
固执的大叔 2013-11-15
  • 打赏
  • 举报
回复
sql.Text:=('select t.name,t.about,t.about1 from tpl_word1 t where t.wordtype <> '' ' + T) ;
Oraclers 2013-11-13
  • 打赏
  • 举报
回复
sql.Text:=('select t.name,t.about,t.about1 from tpl_word1 t where t.wordtype <> '' ''' + T) ; 去掉背后一个引号,见上。

2,497

社区成员

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

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