ADO+SQL7的BUG吗?使用SQLSERVER 7.0的朋友看过来,我遇到一个怪问题了,不知是何原因,帮忙看看。。。 问题已确认是BUG,但很怪,有分析数据

  • 主题发起人 主题发起人 yym
  • 开始时间 开始时间
Y

yym

Unregistered / Unconfirmed
GUEST, unregistred user!
ADO+SQL7的BUG吗?使用SQLSERVER 7.0的朋友看过来,我遇到一个怪问题了,不知是何原因,帮忙看看。。。 问题已确认是BUG,但很怪,有分析数据在里面,请高手帮忙 。怪怪怪怪怪怪怪怪怪怪怪怪怪怪怪怪怪怪 (100分)<br />我在使用ADO连SQLSERVER 7.0的时候,[表结构test1只有a,b两字段,test2为C,D两字段]
使用如下的程序段,进行添加,但是TEST1就是没有数据,TEST2可以保存,(没用缓存更新)
相同的程序放在sqlserver2000下运行正常。在sqlserver7下用事件探查器也看不到什么特别的,
主要是两条插入语句。
请使用SQLSERVER 7.0的朋友帮忙试验一下,我已把ADO更新到2.7问题照旧。

相同问题改用BDE操作可以保存数据,有SQL7的朋友帮忙测试一下。是否为ADO的问题呢?
shangshang的方法也一样
try
ADOConnection1.BeginTrans;
with adoquery1 do
begin
close;
sql.clear;
sql.add('select * from test1');
open;
append;
fieldbyname('a').asstring:='aaaaaa';
fieldbyname('b').asstring:='bbbbbb';
post;
end;
with adoquery2 do
begin
close;
sql.clear;
sql.add('insert into test2(c,d)'); //去掉INTO也一样
sql.add('values(:c,:d)');
Parameters.ParamByName('c').Value:='ccccccc';
Parameters.ParamByName('d').Value:='ddddddd';
execsql;
end;
ADOConnection1.CommitTrans;
except
ADOConnection1.RollbackTrans;
showmessage('出错');
end;
最终实验如下:
如果同时两个改用APPEND可以保存,
如果同时两个改用INSERT不能保存第一个数据,
上面的问题虽然可以变通解决,但我想知道是否我的程序问题还是其他原因?请有
sqlserver7的朋友帮忙测试一下,先谢了。
 
保险些

try
ADOConnection1.BeginTrans;
with adoquery1 do
begin
close;
sql.clear;
sql.add('select * from test1');
open;
append;
fieldbyname('a').asstring:='aaaaaa';
fieldbyname('b').asstring:='bbbbbb';
post;
end;
with adoquery2 do
begin
close;
sql.clear;
sql.add('insert into test2(c,d)');
sql.add('values('+QuotedStr('cccccc')+','+QuotedStr('ddddddd')+')');
execsql;
end;
ADOConnection1.CommitTrans;
except
ADOConnection1.RollbackTrans;
showmessage('出错');
end;

未经测试,但这个写法肯定可以
 
在sqlserver7下用事件探查器也看不到什么???
连那条insert的语句也看不到吗?
你的写法应该没什么问题啊?
 
你是不是连接服务器错了,你的语句应是没有什么问题
 
按理说应该没有问题的,更何况你用了事务。
 
你删掉ADOQuery1重新放置一下看看...
看不出你的程序本身有什么不对的...
 
to:yanghaijun
删除掉ADOQUERY2后ADOQUERY1可以保存呀。
 
try
ADOConnection1.BeginTrans;
with adoquery1 do
begin
close;
sql.clear;
sql.add('select * from test1');
open;
append;
edit;///可能要加這一句
fieldbyname('a').asstring:='aaaaaa';
fieldbyname('b').asstring:='bbbbbb';
post;
end;
with adoquery2 do
begin
close;
sql.clear;
sql.add('insert into test2(c,d)');
sql.add('values(:c,:d)');
Parameters.ParamByName('c').Value:='ccccccc';
Parameters.ParamByName('d').Value:='ddddddd';
execsql;
end;
ADOConnection1.CommitTrans;
except
ADOConnection1.RollbackTrans;
showmessage('出错');
end;

append以後要用到EDIT的。
如果不用,可能沒有更新表,只是表面更新。
 
TO:luky_99
用你的方法刚试了,还是不行,我用的是SQL7标准版,在NT下和在98下都一样效果。
有SQL7的朋友帮忙试一下,只是随便建两表调试一下就行,求大家了。
 
你不会别这样用,两个表都写SQL执行不就行了
 
to:左右手
两个表都写SQL执行不就行了,???上面的不是SQL吗?
还有好象包含EXECSQL就会这样,我只想解决掉。
 
fieldbyname('a').asstring:='aaaaaa';
fieldbyname('b').asstring:='bbbbbb';
不对
 
出什么错误提示?光看程序看不出来多少道道。
 
我说的用SQL是指的用insert into语句,然后用EXECSQL
你那哪叫用SQL呀,把个ADOQuery用的跟ADOTbale一样,把第一个表的操作改成跟第二个那样就行了。
 
to:all
我觉得程序应该不会有错,主要是同样的程序连SQL7和SQL2000就不同结果,SQL2000可以
保存,如果说是SQL7的问题,那改用BDE操作时又可以,那有可能是ADO的问题,我这里又
没有其他版的SQL7可以调试,大家帮忙建两个表再用上面的语句加入看是否会出错即知,
这样就可以知道是我这里的原因还是大家共有的原因了。
 
我用了這麼長時間都沒有出現過這樣的情況
代碼也沒有什麼問題,用第一個表的方法試試
 
建议你把mdac_typ.exe再装一遍,把delphi的ADO补丁再打一下看看
你这不算是什么怪毛病,我这里比你还怪呢,我用ADO连ORACLE数据库,然后提取数据后,
居然所有的数字都是0,其他类型的字段却没事。偶程序一个字都没改,拿到同事机器上一
运行,一点毛病没有,这不铁定是我机器有问题呀,所以你可以把它拿别人机器上试试在说
 
谢谢左右手
我在提这个问题之前已经试过三台机子了,两台WINME,一台WIN98,结果都一样才提问的。
 
這好像也是一個bug來的
我都遇到過讀兩個字段值出來,運行老是提示第二個字段不存在
最後把兩個語句倒過來,什麼事都沒有,一切正常
這個問題我也一直找不到原因
 
后退
顶部