Corba+Oracle(Oracle菜鸟一问)(100分)

  • 主题发起人 主题发起人 pander
  • 开始时间 开始时间
P

pander

Unregistered / Unconfirmed
GUEST, unregistred user!
偶是Oracle菜鸟
用delphi做了一个corba程序,开发时后台数据库用的SQL Server
后来又说要弄到Oracle上去
那就弄呗,结果发现数据库数据更新不了
后来想想可能是没有使用commit的原因
我就在Corba程序的服务器端程序的datasetprovider
的beforeapplyupdate和beforeapplyupdate中加了这些东东:
beforapplyupdate事件:
Database1.StartTransaction;
afterapplyupdate事件
Database1.Commit
加完以后发现还是不行。。
大虾们指点指点。谢谢。
 
首先你要搞清楚是由于事务没有提交导致数据没被保存
还是由于根本就没把数据Post到Oracle中。
如果是事务没提交,那你加了Commit是没有问题的了
可能是其他原因造成的吧。
 
因为在sql server中是没有问题的,而且在之中没有启动任何事务。
改到oracle时就提交不进去,
程序关闭前,数据都还在中间层
因为sqlserver处理时没有这些问题的,直接applyupdate就进去了。
我就加了以上的代码,在beforeapplyupdate时启动食物
afterapplyupdate时commit,不知道是什么原因。
 
你最好是在自己要修改和保存的地方加入上面的事务处理,加在beforapplyupdate等地方并
不见得好.
if PDM.DataBase.InTransaction then
PDM.DataBase.Commit;
PDM.DataBase.StartTransaction;
try
...
ApplyUpdate;//这儿不知写没写错,反正就是你保存那一句.
PDM.DataBase.Commit;
except
PDM.DataBase.Rollback;
end;
 
因为做成多层结构以后
客户端的提交和服务器端程序就分离了
applyupdate是在客户端作的。
而启动事务和commit又需要在服务器端程序作
所以不能写到一起,只能通过事件来触发。
如果都是一个数据模块,按你那样写肯定是对的。
 
牛人快来啊。。
 
怎么配置的,用BDE吗?还是OBDC、OLE,里面有个选项是autocommit,设一下
 
服务器程序跟oracle连接是通过ODBC的
客户端跟服务器程序通过corba连接。
我找找看。。
 
对不起,因为我实在想不起来如何解决的。
但我可以肯定不是啥子事务提交的问题,问题处在delphi数据库连接的内部。
我在使用dcom和socket时也有过着问题,我使用bde连接,在刚开始时也是不能更新,而且
不报任何错误。
后来好像是改了bde的配置还是中间层的东东就可以了,这我实在记不起来了,这都是1年多前
的事了。
仅供参考,谢谢
 
大哥啊。。想想好么??要死认了。。
 
查到这些东西:
FOR UPDATE in Oracle8
To use the keywords FOR UPDATE?in a passthru SELECT statement to pessimistically lock a result set you need todo
one of the following steps, but not both:
1. SQLPASSTHRU MODE must be set to SHARED NOAUTOCOMMIT
2. An explicit transaction must be started before executing the statement
 
没用啊。。
 
Trydo
A Component, it is faster than BDE and ODBC hundreds times,
and very stable
http://www.inprises.com/
 
把你的服务端使用的控件、SQL语句列出来看看。
 
我在用BCB5做多层结构系统时,我在Server端加入了一个取得服务器IP地址的方法:GetServerIP它的参数是vIP:Variant *,IN方式,并在服务端实现了这个方法,
加入的代码如下:
*vIP="192.168.0.01";最后我注册成功。
可是在我开发客户端程序时,我用TSocketConnection
当取得它的服务时我是这样做的:
Variant* vip;
SocketConnection1->AppServer.GetServerIP(vip);
Edit1->Tex=vip;
可 是我在运行程序时出错,没有编译通过。
它说getserverIP不是variant的成员
getserverIP is not a memober of variant
请问?
我该如何去调用这个方法呢?
请各位大侠多多指教?
小生的QQ:65466700(24小时在线恭候)
MAIL: alongsun@sina.com
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部