有鬼!来抓鬼呀!为何在一个多表查询(ADOQUERY)中提交(Post)了一条记录以后,发现这条记录中的数据又不见了?不知道哪位会抓这鬼的!

Drate
博客专家认证
2002-10-31 07:58:41
数据库:Oracle 9i
ADO版本:2.7 CN
DELPHI :V6.0

BodyQuery的属性设置LockType为ltBatchOptimistic;
这是我的SQL语句:
With BodyQuery do
begin
Close;
SQL.Clear;
SQL.Add('select S.LISTNO , G.GDSID ,G.GDSINID , G.GDSNAME , G.SPECIFY ,G.UOMID ,');
SQL.Add('S.UNITPRICE , S.TOTALQTY ,S.DISCOUNT ,S.AMOUNT ,S.ROWNO');
SQL.Add('FROM STOCKIMPORTBODY S ,GOODS G WHERE S.GDSINID = G.GDSINID');
SQL.Add('and ListNO = :ListNO ORDER BY ROWNO');
Parameters.ParamByName('ListNO').Value := '00001';
Open;
Filtered := False;
FilterGroup := fgNone;
end;

而我在BeforePost,AfterPost 事件中写:

procedure TOrigInputStockForm.BodyQueryBeforePost(DataSet: TDataSet);
begin
showmessage(dataset.Fields.Fields[1].AsString);{可以正常看到输入的数据}
end;

procedure TOrigInputStockForm.BodyQueryAfterPost(DataSet: TDataSet);
begin
showmessage(dataset.Fields.Fields[1].AsString);{显示的只有一片空白,但插入的这条记录还存在,只不过没有内容!}
end;


如果我修改原来已存在的记录的话,则会出现在BeforePost显示的是你修改后的值,但到了AfterPost时,显示的就还是最开始没有被修改的值!

不知道这是为什么?


...全文
170 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
日总是我哥 2002-11-01
  • 打赏
  • 举报
回复
去啦,我把我们的聊天记录 都贴上去了,没人敢说我们“倒分”的,呵呵
Tian 说:
really no need
CoolSlob 说:
代我谢他!
CoolSlob 说:
嘻嘻
CoolSlob 说:
那我代领啦 <<<------------------Here!!!
Tian 说:
sure, please thank him for his kindness<<<------------------Here!!!
Drate 2002-11-01
  • 打赏
  • 举报
回复
up
日总是我哥 2002-11-01
  • 打赏
  • 举报
回复
Tian 说:
by the way, here is a link for ado connection strings for all kinds of dbs:http://www.able-consulting.com/MDAC/ADO/Connection/OLEDB_Providers.htm#OLEDBProviderForOracleFromOracle
日总是我哥 2002-11-01
  • 打赏
  • 举报
回复
为略表谢意,恳请XXXXX来领分:)

CoolSlob 说:
hi, 问你个怪问题
Tian 说:
sure
CoolSlob 说:
我有一应用程序(.exe文件),在A机器上运行正确,在B机器上却错误,所做的程序仅仅是修改数据,ADO版本一样,连接的数据库也是一样(Oracle9i)
Tian 说:
what kind of errors?
CoolSlob 说:
在机器A上可以执行修改数据的操作,而机器B上却不可以!没有任何错误信息出现!
Tian 说:
are you using odbc?
CoolSlob 说:
OLE DB for ORACLE
CoolSlob 说:
到了机器B上,它的Dataset就好像是ReadOnly了,不能接受用户输入数据了
Tian 说:
what about oracle client side driver version?
CoolSlob 说:
v9
Tian 说:
not the database, but the client utility version
CoolSlob 说:
client utility 在哪里查看呀?因为我不是用Oracle的
CoolSlob 说:
这个问题也是我同学的问题
Tian 说:
oracle has a server component and client utility, basically, the utility gives you the tools and basic drivers
CoolSlob 说:
嘻嘻 他说他找不到,我看是没办法救他了
Tian 说:
go odbc data source administrator, go to Drivers tab, look there, check oracle's version
CoolSlob 说:
他发一这么一串:oracle in oradb V9!是不是这个?
CoolSlob 说:
microsoft ODBC for ORACLE V2.573
CoolSlob 说:
还有这个
CoolSlob 说:
我请你喝咖啡先
Tian 说:
what's his connection string?
Tian 说:
ask him to check the drivers on a and b machines are same
CoolSlob 说:
Provider=OraOLEDB.Oracle.1;Password=frans;Persist Security Info=True;User ID=frans;Data Source=oracled是指这个connection string吗?
Tian 说:
yes, looks fine
Tian 说:
ask him to remove "Persist Security Info=True;"
CoolSlob 说:
ok,
CoolSlob 说:
是的,是客户端的问题,V8与V9的不一样,V9会出问题!
CoolSlob 说:
我同学说的
CoolSlob 说:
呵呵 让他自己再看了,谢谢你!我也要做事了,为了帮同学,公司的事都没做,
Tian 说:
no problem
CoolSlob 说:
为略表心意,来这里 领分吧 我等你http://expert.csdn.net/Expert/TopicView1.asp?id=1137952
Tian 说:
hehe, no need
日总是我哥 2002-11-01
  • 打赏
  • 举报
回复

我来了,呵呵~~
夏雨天NO1 2002-11-01
  • 打赏
  • 举报
回复
1
最好不要用select 打开多个表来进行增加和删除呀,那样要是删除则会把多
个表的数据都同是删除呀,最好用lookup字段呀,
2
TCleintDataSet 是做什么呀,是连三层吗,TCleintDataSet一般做了修改都ApplyUpdates()来提交数据呀。
hfycl 2002-11-01
  • 打赏
  • 举报
回复
up
xiamang 2002-11-01
  • 打赏
  • 举报
回复
up
smilelhh 2002-11-01
  • 打赏
  • 举报
回复
MD,我也遇到这类事了/

我的TClientDataSet删除了一行数据后,保存也没有提示出错,
可是当下次打开时,那条被删除的记录又出现了!
但是你增加的记录可以保存进去也可删除就不会出问题!
前二天还好好的.

真是活见鬼了.
Drate 2002-11-01
  • 打赏
  • 举报
回复
To:回复人: ddvboy(ddv)

我用的是ADO的BatchUpdate模式,所以数据是暂时存在客户端,暂时是不会提交到数据库中的!
而且我ShowMessage的是记录集中的数据,如果显示为空的话,当然是什么数据也没有了!
ddvboy 2002-11-01
  • 打赏
  • 举报
回复
你用SHOWMESSAGE显示的只能是在你界面上的数据
而已经POST数据库的是无法显示的呀!
你可以用DBEDIT看看是否已经POST数据库了
wab81923 2002-11-01
  • 打赏
  • 举报
回复
UP,关注中
Drate 2002-11-01
  • 打赏
  • 举报
回复
数据库哪能说换就换的呀~!这可是公司的不知道称不称得上是MRPII的系统,够复杂的了!如果要换的话,我们还得花大半年时间重来呀!
rwdx 2002-11-01
  • 打赏
  • 举报
回复
呵呵,楼主真幽默
换成其它的数据库试试
Drate 2002-10-31
  • 打赏
  • 举报
回复
关键的问题是,我上面的一个SQL语句其实关联到了三个表!

这个adoquery被命名为BodyQuery

还有一个称之为HeadQuery

这两个Query就是用ListNO字段来关联的!我在这里只是为了简单,所以没有写出来罢了!
Drate 2002-10-31
  • 打赏
  • 举报
回复
不紧张怎么行呢?晚上碰到这种问题,不是鬼是什么?

啊....

TNND,谁在后面拍我背?

不是真的是鬼吧!

blazingfire 2002-10-31
  • 打赏
  • 举报
回复
象这样只有两个表的情况,还是用主从表来作,可能要好控制一些
blazingfire 2002-10-31
  • 打赏
  • 举报
回复
哦哦哦....楼主别把气氛搞得这么紧张嘛。

2,495

社区成员

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

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