我有两个数据库,一个是Access,一个是SQL Server.要做到两个数据库同步更新,怎么搞啊?
主要是两个数据库不全一样,SQL Server数据库的字段包含Access的字段。我的笨办法就是用两套DataSource、DataSet、Query.一套对Access,一套对SQL Server,先对SQL Server写,然后提出一部分字段再对Access写。
我程序是这样写的:procedure TForm1.Button1Click(Sender: TObject);
var s1,s2:string;
begin
s1:=query1.fieldbyname('地区').asstring;
s2:=query1.fieldbyname('销售额').asstring;
with query1 do
  begin
   database1.starttransaction; //开始传输
   try
    applyupdates;
    database1.commit; //提交数据
   except
    database1.rollback; //若提交失败,回滚
   raise;
   end;
   commitupdates;
     with query2 do
  begin
   query2.append;
   query2.edit;
   query2.fieldbyname('地区').asstring:=s1;
   query2.fieldbyname('销售额').asstring:=s2;
   database2.starttransaction; //开始传输
   try
    applyupdates;
    database2.commit; //提交数据
   except
    database2.rollback; //若提交失败,回滚
   raise;
   end;
   commitupdates;
   end;
   end;
end;结果出现问题了:SQL Server与Access有可能其中一个数据库没提交记录成功,另一个却提交成功了。如果解决同时提交成功,否则同时提交不成功。

解决方案 »

  1.   

    用两个ADOCONNECT比较简单。或者用一个ADOCONNECT动态写链接数据库,就OK了呀
      

  2.   

    我写数据库一直都是用的ODBC连接,还没有用过ADO呢。sigh,搞不懂了。
      

  3.   

    你用两个连接吧。一个连到SQL-SERVER 另一个连到Access
      

  4.   

    能不能这样?
    with query1 do
      begin
       database1.starttransaction; //开始传输
       try
        applyupdates;
        database1.commit; //提交数据
       except
        database1.rollback; //若提交失败,回滚
       raise;
       end;
       
         with query2 do
      begin
       query2.append;
       query2.edit;
       query2.fieldbyname('地区').asstring:=s1;
       query2.fieldbyname('销售额').asstring:=s2;
       database2.starttransaction; //开始传输
       try
        applyupdates;
        database2.commit; //提交数据
       except
        database2.rollback; //若提交失败,回滚
       raise;
       end;
       commitupdates;
       commitupdates;
       end;  
       end;
      

  5.   

    数据库同步的问题,我以前看过书,好象sql server 2000
    里面有提供这个功能,可以做一个sql里面的数据库和access文件的数据进行同步,
    然后在sql里面设置一些触发器,应该可以把功能实现
      

  6.   

    我现在不担心SQL Server写不进去,主要是Access写不进,我要回滚SQL Server的数据,麻烦阿。
      

  7.   

    郁闷ing,经过我的试验,发现commitupdates对提交数据一点作用都没有,raise对异常处理也没有作用。看来如果次路不通就只好用ado连接了,或者用存储过程+触发
      

  8.   

    具體看數據存放在同一台機或是不同如機器如果在同一如服務器上﹐一個ADOConnection(連接SQL Server)就可以搞定
    Access通過SQL Server去調用﹐操作的時候對ADOConnection進行事務處理就行
      

  9.   

    没有在一台机器上.我的SQL Server数据库在中央服务器上,Access在本地客户机上.