try
开始事务
...谢你的程序 结束事务
写标记成功except
begin
事务回滚
写标记为失败
end;
开始事务
...谢你的程序 结束事务
写标记成功except
begin
事务回滚
写标记为失败
end;
解决方案 »
- 回调函数的用法,我终于明白了,现在代码贴出来,。。。。。。。。。。。。
- com服务器与opendialog打开“我的文档”的冲突
- 在D7中用real组件,或是WebBrowser均不能观看电影?高分求助
- DLL制作的问题
- 有关数据显示问题。帮忙就给分。我把所有的分都给你们。
- 用ravereport5.0如何写预览和打印的程序呢?
- 用ado连接远程sybase,谁能给个string?
- to cobi(我是小新,我只有5岁):怎么捕捉由maskedit控件由于用户输入不能通过检查的错误呢?
- 给位大哥:Delphi中的哪个单元有Winsock2的函数?如:WSASocket(,,,,,)
- 哪里有能够显示tiff图形的控件?请速告知,谢了!
- 我的一个散分贴给删了,对不住刚才的各位了,怎么办?
- 散分不减专家分,会不会有人钻空子?这样不好!看来专家不一定啊
for i:=0 to adodataset1.count-1 do
begin
try
adoconnect.begintrans
...(传送)
写标记成功
adoconnect.committrans
except
begin
adoconnect.Rollbacktrans
写标记为失败
end;
adodataset.next
end;
不好意思,随心写的,很乱
我的意思是:要连接到俩个数据库服务器的俩个表中,所以用了俩个TAdoConnection构件,一个连接本地网络的数据库服务器,另一个连接远程的数据库服务器,然后将本地的一个表中的记录传送到远程服务器的某一表中,若传送成功,将本地的该记录打标记,若没有传送成功,当然不给本地的该记录打标记。关键问题是如果传送成功了,但在给本地的记录打标记时发生了错误,那么必须将远程数据库服务器中的表中的刚才传送的那条记录作废,方可保证数据的一致性。我想用事务的方法解决这样的问题,不知是否可行?
以下是我自己的代码,可行否?
假定有某表,有俩个字段Name:VarChar(10), Flag:Char(1),在本地和远程的数据库服务器各有一个拷贝,现要求将本地的字段Flag为‘F'的记录倒入远程服务器的对应表中,倒入成功后将本地的记录的Flag标记为'T'。以下代码不考虑对象的创建与释放。var
acLocal, acRemote: TAdoConnection;
aqLocal, aqRemote: TAdoQuery;
begin
//创建对象建立数据库连接
try aqLocal.Connection := acLocal;
aqRemote.Connection := acRemote;
aqLocal.Sql.Add('select * from LocalTable where Flag = ' + QuotedStr('F');
aqLocal.Open();
aqRemote.Sql.Add('select * from RemoteTable');
aqRemote.Open();
acLocal.BeginTrans();
acRemote.BeginTrans();
while not aqLocal.eof do
begin
aqLocal.Edit;
aqLocal.FieldByName('Flag').AsString ;= 'T';
aqRemote.Insert();
aqRemote.FieldByName('Name').AsSTring := aqLocal.FieldByName('Name').AsString;
aqRemote.FieldByName('Flag').AsString := aqLocal.FieldByName('Flag').AsString;
aqLocal.Next();
aqRemote.Post();
end;
acRemote.CommitTrans();
acLocal.CommitTrans();
except
//传送失败
acRemote.RollbackTrans();
acLocal.RollbackTrans();
end; //释放各对象
end;
外面的人用什么科学、先进的技术方法,我真的不知道!
我说我的想法,希望大家指点
---------------------------------------------------
1、总体: 客户端 <-----Winsock(TCP)-----> 服务器2、客户端:(1)获取待传送数据,保存到一个文件(还可加密)
(2)压缩文件
(3)拨号(连接远程服务器)
(4)利用WINSOCK把文件传送到远程服务器
3、服务器端:
(1)监听端口,接受连接申请,分配资源
(2)接收数据(文件)
(3)解压,解密
(4)更新数据库
另外,您的服务器端负责侦听的程序是一直在运行吗?是多线程的吗?如果是一直在运行的,需要考虑的问题很多。譬如运行时获得的资源是否可以彻底的释放等等。你是怎样解决的?
我目前的一个项目中需要这样的功能,由于时间很紧,恐怕难以使用传文件的发法了。就我上面的使用事务的方法除了你所讲的占用时间多以外,还有其他缺陷吗?最重要的是能否保证本地和远程的数据的一致性。再次谢谢 LKJ99(永动机) !同时谢谢各位的参与!
分数在我们讨论后一定会奉上!
这个问题很有趣,没碰到过,但觉得很常见
LKJ99(永动机) 的方法该是可行的,
但如果能直接通过数据库的事物管理能力来解决,该会简单好多……不好意思,帮不了忙
开始事务
...谢你的程序
写标记成功
结束事务
except
begin
事务回滚
写标记为失败
end;
将第一位仁兄的程序改一下即可以上是将写标记成功这段提到结束事务以前即可。