一个动态sql语句的问题? (200分)

  • 主题发起人 主题发起人 qzzwg
  • 开始时间 开始时间
Q

qzzwg

Unregistered / Unconfirmed
GUEST, unregistred user!
几个月前自己做了一个档案管理程序,现在重新做,同样的程序,同样的开发环境
(delphi6+IB6)为什么一段语句以前能执行现在就不能执行。
详述如下:
以前能编译且运行的语句:
qu_jbb.SQL.Add('select * from jbb where (dh>=:n1)and(dh<=:n2)');
但现在却要这样写才可以(加引号):
qu_jbb.SQL.Add('select * from "jbb" where ("dh">=:n1)and("dh"<=:n2)');

还有个区别:前面的语句在以前执行时是可以获得能编辑的数据,但现在却不能获得
能编辑
代码:
[:)]的“活动”的数据(如果将query的RequestLive属性设为True,就会出错。
请教:
1、select语句中的“表”到底用不用引号,什么时候用,为什么以前不用就行?
2、TQuery部件获得“活动”的查询结果数据的约束条件

当通过SQL语句查询数据库服务器中的数据库表:

● 查询只能涉及到一个单独的表

● SQL语句中不能包含ORDER BY命令

● SQL语句中不能含聚集运算符SUM或AVG运算

这个语句并不符合上述条件,但为什么不能获得能编辑的“活动”的数据?

谢谢!
 
1、可能是不同的用户名登陆的问题,重点检查用户权限;
2、你的语句可以简化的: select * from jbb where db between :n1 and :n2
3、改用ADO连接的话,可以跳过上面的两个条件:
ADO可以对两个连接的表进行更新;可以更新order by表,前提是有primary key。
 
//qu_jbb.SQL.Add('select * from "jbb" where ("dh">=:n1)and("dh"<=:n2)');
这个语句是错误的,如果确实如此,那就是数据库环境的问题了
 
不加引号的语句是对的,如真如你所言,应该是数据库环境的问题,你用的是什么数据库?
 
这个语句已经编译运行,查询也没问题,用的是interbase6
qu_jbb.SQL.Add('select * from "jbb" where ("dh">=:n1)and("dh"<=:n2)');
 
楼主不会在定义 表名、字段名时就加上双引号吧,
interbase6 ? 想听听,呵呵 :)
 
试试这个:
qu_jbb.SQL.Add('select * from jbb where dh between n1 and n2‘);
 
建议用:
qu_jbb.SQL.text:='select * from jbb where dh between :n1 and :n2‘;
parambynae('....

或者qu_jbb.SQL.text:=Format('select * from jbb where dh between %d and %d‘,[n1,n2]);

 
多人接受答案了。
 
后退
顶部