请问如何实现从一个数据库把数据转到另一个服务器上的相同结构的数据库,用delphi实现,用BDE。要如何设置数据库,如何处理事物?给代码提示。谢谢!

解决方案 »

  1.   

    如果是备份方式,
    数据库-》另一台机器的空的数据库的话(有表和结构,无记录的),
    一行SQL搞定一个表。
      

  2.   

    SQL Server?先备份,uses
      adodb,db;
    function repl_substr(sub_old, sub_new, s: string): string; //把sub_old换成sub_new,后面有用。
    function BackupSQLDataBase(connstr_sql,DatabaseName,Backup_FileName:string):Boolean;//数据库备份函数
    //SQL数据数据库备份,connstr_sql是ADO控件的connectionstring,DatabaseName是数据库名称,
    //Backup_FileName要备份到的目 标文件
    function RestoreSQLDataBase(connstr_sql,DatabaseName,Restore_FileName:string):Boolean;//数据库恢复函数
    //Restore_FileName以前备份的数据库文件,
    implementation
    如果没有数据库,就先创建数据库IF EXISTS (SELECT *FROM sysdatabasesWHERE name = '数据库名称')BEGINDROP database 数据库名称END;CREATE database 数据库名称;
    再还原:
    function repl_substr(sub_old, sub_new, s: string): string;
    var
      i: integer;
    begin
      repeat
        i := pos(sub_old, s);
        if i > 0 then
        begin
          delete(s, i, Length(sub_old));
          insert(sub_new, s, i);
        end;
      until i < 1;
      Result := s;
    end;
    function BackupSQLDataBase(connstr_sql,DatabaseName,Backup_FileName:string):Boolean;
    var
    //备份SQL数据库SQL数据数据库备份,connstr_sql是ADO控件的connectionstring,DatabaseName是数据库名称,
    //Backup_FileName要备份到的目标文件
    aADOQuery:TADOQuery;
    begin
    try
      aADOQuery:=TADOQuery.Create(nil);
      aADOQuery.Close;
      aADOQuery.ConnectionString:=connstr_sql;
      aADOQuery.SQL.Clear;
      aADOQuery.SQL.Add('backup database '+DatabaseName+' to disk = ' + '''' + Backup_FileName + ''' with format');
      Try
        aADOQuery.ExecSQL;
      Result:=true;
      Except
        Result:=false;
       exit;
      end;
     finally
      aADOQuery.Free;
     end;
    end;
    function RestoreSQLDataBase(connstr_sql,DatabaseName,Restore_FileName:string):Boolean;
    var//数据库恢复函数,estore_FileName以前备份的数据库文件
    aADOQuery:TADOQuery;
    begin
    try
      aADOQuery:=TADOQuery.Create(nil);
      aADOQuery.Close;//恢复数据库不能打开数据库,要打开系统数据库master,把连接字符串如adoconnetion的connectionstring中的数据库名称换成"master"数据库
      aADOQuery.ConnectionString:=repl_substr(DatabaseName,'master',connstr_sql);
      aADOQuery.SQL.Clear;
      aADOQuery.SQL.Add('RESTORE DATABASE '+DatabaseName+' from disk = ' + '''' + Restore_FileName + '''');
     Try
        aADOQuery.ExecSQL;
      Result:=true;
     Except
        Result:=false;
       exit;
      end;
     finally
      aADOQuery.Free;
     end;
    end;
    end. 参考一下
      

  3.   

    谢谢insert2003(高级打字员) 。
    不好意思,题目说的不是很清楚,补充一下。
    我是要转移部分表的数据,不需要全部表的转移。
    欢迎指教!
      

  4.   

    在DELPHI中引入DTS的包,然后调用DTS进行数据的导入
      

  5.   

    "我是要转移部分表的数据,不需要全部表的转移。"
    这句话的意思就是我要先从本地服务器上找出符合条件的数据来,然后通过delphi程序把数据插入到远程服务器上,要有事务处理。
      

  6.   

    insert 目的表
    select *  
    from 表
    where 条件或者:用写程序一条一条增加即可.用两个Query等.
      

  7.   

    query里
    SELECT *
    FROM OPENDATASOURCE('SQLOLEDB','DataSource=sql另一个实例;User ID=sa;Password=').数据库名.dbo.shebei
      

  8.   

    qizhanfeng(glacier)
    和我想的一样:)
      

  9.   

    不过必须要目标SQL机器上有一样的表和结构才行的。