作者:崔显莉京_716 | 来源:互联网 | 2023-05-18 07:13
各位高手:您们好!在delphi环境下,用adoquary控件查询包括多个表的记录,select语句超过255个字节,程序报错,该如何解决,请高手指点!谢谢!
各位高手:
您们好!
在delphi环境下,用adoquary 控件查询包括多个表的记录,select语句超过255个字节,程序报错,该如何解决,请高手指点!谢谢!
24 个解决方案
'select * from table '+#13
+' where ……'+#13
+' and ……';
adoquary.sql.text:=adoquary.sql.text+'and (超长的语句)';
把SQL语句分一下,分成两部分,
adoquary.sql.text:='少于255个SQL语句';
adoquary.sql.text:=adoquary.sql.text+'and (超长的语句)';
//定义SQL语名变量
procedure TForm1.Button1Click(Sender: TObject);
var str1:string;
begin
str1:='select * from 表名'
str1:=str1+' where 字段名='条件值'';
//还有的话继续写str1:=str1+...
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(str1);
adoquery1.Open;
end;
可以直接这样写:
Str := 'Select * from table1 ' +
' where .....' +
' and ......' +
' order by .....'
即直接在后面用+连接即可
不建议使用 3-5楼的方案,
这样写的是可以,但调试时得到的sql语句太长,可读性极差,
应该写的时候就进行好断句,以后调试时才容易理解,否则过一段时间连自己都看不懂
6楼和3-5楼一样, 我晕呀,你都一个星了,你这种句子有几十行加起来,在sql查询器里怎么调呀!
自由界面和报表的完美解决方案!
http://www.anylib.com
to: zsjzwj(北极熊)
你的方法,固然可以,但不能否认别人方法!
你不会是写程序总是想着在sql查询器调吧,
即使在里面调也没关系,你在sql查询器中截断分行也未尝不可!
to hqhhh(枫叶) :
有时一句sql 就有一两屏,多达几千字符,自己截的话,一句就要用一个小时呀!还要考虑嵌套、多重嵌套,那么这句话调好要多久?
sql语句如果发生错误,用sql查询器调是最方便快捷的,不是吗?
Str := 'Select * from table1 ' +
' where .....' +
' and ......' +
' order by .....'
这样写是可以的,如果"有时一句sql 就有一两屏,多达几千字符,自己截的话,一句就要用一个小时呀!还要考虑嵌套、多重嵌套"
那就在adoquery1.sql.add(str)之前加上一句:edit1.text:=str;或者直接输出到文本(比如日志),然后拷出来调试,找出错误再回去改源代码
说起来麻烦,调起来很简单,我们一直都是这么做的
adoquary有这问题?
超过255个字节会报什么错?
sql.clear;
sql.add('.....');
sql.add('.....');
sql.add('.....');
sql.add('.....');
写多少字都可以,sql是个Tstrings类。
To: zsjzwj(北极熊)
-----------
有时一句sql 就有一两屏,多达几千字符,自己截的话,一句就要用一个小时呀!还要考虑嵌套、多重嵌套,那么这句话调好要多久?
sql语句如果发生错误,用sql查询器调是最方便快捷的,不是吗?
-------------------
sql语句如果发生错误,用sql查询器调是最方便快捷的,这个是不可否认的!
但 如果一句sql 有一两屏,多达几千字符,如果再不考虑用视图或存储过程之类写,就不可思议了!
我的工作环境是delphi+mssql2000, 程序的代码中几乎有一半是sql语句,有时处理复杂的数据逻辑时几十上百行一句的sql语句一但出现错误,调试就是非常复杂的一个工作了。特别不是自己写的,如果可读性不好,就更晕了。
楼主你还想borland德源代码改了不成!如果可以改那应该就...
哈哈哈
谢谢大家的讨论!存储过程我不熟悉,我还是想用断句的方式来写SQL 语句,用sql查询器调试,不失为一种比较好的方法,本人在实际编程经常用到。