BDE的问题(20分)

  • 主题发起人 主题发起人 南宫吹云
  • 开始时间 开始时间

南宫吹云

Unregistered / Unconfirmed
GUEST, unregistred user!
  我用BDE连接PARADOX库执行以下SQL语句:
with dm.quecx do
begin
sql.clear;
sql.add('select sbbh from equip where port=:sport and sblx=1 and sbbh not in (select callno from gt where cport=:sport)');
parambyname('sport').asstring:=cbboxcport.Text;
open;
first;
cbboxcall.Items.Clear;
while not eof do
begin
cbboxcall.Items.Add(fields[0].asstring);
next;
end;
if recordcount<>0 then cbboxcall.text:=cbboxcall.Items[0];
end;

可以运行,执行结果正确,可是将它移植到SQLSERVER7.0上时却出错:
Capability not suported.
是什么原因?我想可能是BDE的问题,为什么在SQLSERVER中不能正确执行?
 
是做设备管理软件吗?呵呵,我也正在做呢。
感觉好象是你的SQL语句中的参数的问题啊,是否因为Paradox和Delphi结合太紧密了,
对参数要求比较宽松,而到了sql server 中就不行了。
可以用字符串相加的方式造sql语句,把参数加进去,然后把完成了的sql语句一次提交。
只是想法,我没测试啊
 
改成
sql.add('select sbbh from equip where port="'+cbboxcport.Text+'" and sblx=1 and sbbh not in (select callno from gt where cport="'+cbboxcport.Text+'")');
错误依旧。
奇怪,如果在query analyzer中执行也可以得到正确的结果,什么原因呢?
 
加一Database控件,属性设如下
Database1.DriverName:=MSSQL;
database1.databasename:= // 任意名称
database1.Params.Text:='server name =(你的SQL server名称)'+#13+#10+
'database name=(你的SQL 数据库名称)'+#13+#10+
'user name=SQL的登录名称'+#13+#10+
'password=密码'
database1.LoginPrompt:=false;
database1.Connected:=true;
再把dm.quecx的
databasename:=database1.databasename;
然后再调试!
 
改成这样:
select equip.sbbh from equip, gt
where equip.port=:sport
and equip.sblx=1
and equip.sbbh<>gt.callno
and gt.cport=equip.port;
不过我怀疑是不是RequestLive的问题?
 
szf说的有可能,因为我把quecx的RequestLive设为true了,为什么设成true就会出现这样的问题?
 
szf说对了,我把RequestLive改为false就可以了,但是我还是不明白这个RequestLive是怎么回事?
 
RequestLive决定了TQuery返回的是不是一个"活动"的数据集--即数据集是否可修改到表中。
下面的是帮助的内容,你看看吧。或者自己在dELPHI的帮助中查找RequestLive
If RequestLive is True, but the syntax does not conform to the requirements,
the BDE returns a read-only result set for Paradox or dBASE,
or an error return code for remote servers.
 
谢谢szf了
 
后退
顶部