二个SQL数据库中数据的转移问题. ( 积分: 50 )

  • 主题发起人 主题发起人 leadroy
  • 开始时间 开始时间
L

leadroy

Unregistered / Unconfirmed
GUEST, unregistred user!
现开发一个系统,客户要求定期的将服务器上一些数据转移到老总的笔记本中,由于税务的问题.所以大家应该明白了.<br>服务器中的数据库与老总的笔记本数据库结构全部相同,使用的都是SQL&nbsp;SERVER.<br>例:<br>&nbsp;&nbsp;服务器中数据库名:S&nbsp;&nbsp;&nbsp;&nbsp;表名:Sales<br>&nbsp;&nbsp;老总笔记本数据库名:N&nbsp;&nbsp;表名:Sales<br>&nbsp;&nbsp;现在要做的就是将S数据库中的Sales表中15天前的所有数据转到N数据库中的Sales表中.二个表的结构全部一样.<br>&nbsp;&nbsp;功能应该是:先查出原表中的记录,插入中新表中,然后删除原表中的记录.<br>&nbsp;&nbsp;在一个数据库中没问题,但是在二个数据库中测试了一下没什么优化的解决方案,特向大家请教,并送上50分.
 
注明:需要使用DELPHI功能实现(最好是ADO控件),不要使用SQLSERVER中的过程或是其它的实现,由于数据库会不定期的做一些不能说的事情,所以!
 
1.先把要转移的数据查询出来:<br>procedure&nbsp;TForm1.Button1Click(Sender:&nbsp;TObject);<br>var<br>&nbsp;&nbsp;v_sql:string;<br>begin<br>&nbsp;&nbsp;//12-3以前(含3号)<br>&nbsp;&nbsp;v_sql:='&nbsp;select&nbsp;s.a,s.b,s.c,to_char(s.d,''yyyy-mm-dd&nbsp;hh24:mi:ss'')'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+'&nbsp;from&nbsp;Sales&nbsp;s&nbsp;where&nbsp;adddate&lt;=to_date(''2007-12-3'',''yyyy-mm-dd'')+1';<br>&nbsp;&nbsp;//可以直接双击设置ADOConnection1.ConnectionString<br>&nbsp;&nbsp;//v_str:='Provider=Microsoft.Jet.OLEDB.4.0;';&nbsp;&nbsp;&nbsp;//用access<br>&nbsp;&nbsp;//v_str:=v_str+'Password=&nbsp;;User&nbsp;ID=&nbsp;&nbsp;;';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//密码&nbsp;用户名<br>&nbsp;&nbsp;//v_str:=v_str+'Data&nbsp;Source=D:/DB/S.mdb;';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//S的路径<br>&nbsp;&nbsp;//v_str:=v_str+'Persist&nbsp;Security&nbsp;Info=True&nbsp;';<br>&nbsp;&nbsp;//ADOConnection1.ConnectionString:=v_str;&nbsp;<br>&nbsp;&nbsp;//ADOQuery1.Connection:=ADOConnection1&nbsp;<br>&nbsp;&nbsp;if&nbsp;ADOQuery1.Active&nbsp;then&nbsp;ADOQuery1.Close;<br>&nbsp;&nbsp;ADOQuery1.SQL.Text:=v_Sql;<br>&nbsp;&nbsp;ADOQuery1.Open;<br>end;<br>2.存储到笔记本<br>procedure&nbsp;TForm1.Button2Click(Sender:&nbsp;TObject);<br>var<br>&nbsp;&nbsp;v_sql,v_str:string;<br>begin<br>&nbsp;&nbsp;v_sql:='&nbsp;insert&nbsp;into&nbsp;Sales&nbsp;N(N.a,N.b,N.c,N.d)&nbsp;'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+'&nbsp;values('<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ADOQuery1.FieldByName('s.a').AsString<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+',&nbsp;'''+ADOQuery1.FieldByName('s.b').AsString+''''&nbsp;&nbsp;&nbsp;//b字段是字符串<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+',&nbsp;'+ADOQuery1.FieldByName('s.c').AsString<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+',&nbsp;to_date('''+ADOQuery1.FieldByName('s.d').AsString+''',''yyyy-mm-dd&nbsp;hh24:mi:ss'')';<br>&nbsp;&nbsp;//可以直接双击设置ADOConnection1.ConnectionString<br>&nbsp;&nbsp;//v_str:='Provider=Microsoft.Jet.OLEDB.4.0;';&nbsp;&nbsp;&nbsp;//用access<br>&nbsp;&nbsp;//v_str:=v_str+'Password=&nbsp;;User&nbsp;ID=&nbsp;&nbsp;;';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//密码&nbsp;用户名<br>&nbsp;&nbsp;//v_str:=v_str+'Data&nbsp;Source=D:/DB/N.mdb;';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//N的路径<br>&nbsp;&nbsp;//v_str:=v_str+'Persist&nbsp;Security&nbsp;Info=True&nbsp;';<br>&nbsp;&nbsp;//ADOConnection2.ConnectionString:=v_str;<br><br>&nbsp;&nbsp;ADOQuery2.Connection:=ADOConnection2;<br>&nbsp;&nbsp;ADOQuery2.SQL.Text:=v_Sql;<br>&nbsp;&nbsp;ADOQuery2.ExecSQL;<br>//3.删除原数据<br>&nbsp;&nbsp;v_sql:='&nbsp;delect&nbsp;*&nbsp;from&nbsp;Sales&nbsp;S&nbsp;where&nbsp;adddate&lt;=to_date(''2007-12-3'',''yyyy-mm-dd'')+1';<br>&nbsp;&nbsp;ADOQuery1.SQL.Text:=v_Sql;<br>&nbsp;&nbsp;ADOQuery1.ExecSQL;<br>end;
 
insert&nbsp;into&nbsp;b.b
 
用insert&nbsp;into&nbsp;s.sales&nbsp;select&nbsp;*&nbsp;from&nbsp;n.sales&nbsp;where&nbsp;+&nbsp;条件
 
insert&nbsp;INTO&nbsp;Safe.dbo.SalesOrderMain&nbsp;select&nbsp;*&nbsp;FROM&nbsp;dn.dbo.SalesOrderMain&nbsp;where&nbsp;id&nbsp;not&nbsp;in&nbsp;(select&nbsp;id&nbsp;from&nbsp;safe.dbo.salesordermain&nbsp;)<br><br>大家看上面的SQL,Safe这个数据库在笔记本上,dn这个数据库在不同的服务器上.这个语句不行.
 
以上的语句如可以的话是最方便的.可以减少很多开发时间,再加上我测试的速度是相当的快.
 
后退
顶部