软件注册站
热情软件屋

 
有没有一种方法,一次插入所有的记录
编号: QA003564    
建立日期: 2000年11月22日 最后修改日期: 2004年2月29日
所属类别: Visual Basic - 数据库
   
    操作系统: win98
    编程工具: vb5
    问题: 一个困扰我多时的问题:
    本地的ACCESS数据库(数据源)用ADO传送到远程的SQL Server7.0数据库(目标库)。
    由于是一条一条的更新,算法太烂,每分钟只能传送500条记录,不能满足要求。
    有没有一种方法,一次插入所有的记录?
    源代码如下:
    Public Sub SendRecord()
     Dim cnn0 As ADODB.Connection
    ' 本地的ACCESS数据库(数据源)
     Dim cnn1 As ADODB.Connection
     ' 远程的SQL Server7.0数据库(目标库)
    
     Dim rst0 As ADODB.Recordset
     Dim rst1 As ADODB.Recordset
    
     Dim strCnn As String
    
     ' 打开数据源连接。
     Set cnn0 = New ADODB.Connection
     strCnn = "数据源" ' 已建立DSN为"数据源"的ODBC
     cnn0.Open strCnn
    
    
     ' 打开目标库连接。
     Set cnn1 = New ADODB.Connection
     strCnn = "Provider=sqloledb;Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=8848;"
     cnn1.Open strCnn
    
     ' 打开数据源表。
     Set rst0 = New ADODB.Recordset
     rst0.CursorType = adOpenKeyset
     rst0.LockType = adLockOptimistic
     rst0.Open "数据源表", cnn1, , , adCmdTable
    
     ' 打开目标表。
     Set rst1 = New ADODB.Recordset
     rst1.CursorType = adOpenKeyset
     rst1.LockType = adLockOptimistic
     rst1.Open "目标表", cnn1, , , adCmdTable
    
     rst0.Movefirst
     do until rst0.EOF
     rst1.AddNew
     rst1!emp_id = rst0!emp_id
     rst1!fname = rst0!fname
     rst1!lname = rst0!lname
     rst1.Update
     rst0.Movenext
     loop
    
     rst1.Close
     cnn1.Close
    
     rst0.Close
     cnn0.Close
    
    End Sub
    水平: 中级(chenxixian)
   
    使用Inset Table Values()語句.
    dim Adoconn as adoconn.connection
    dim sSQL as string,i as integer
    
    For i=1 to N
     sSQL=sSQL & " Insert Table Values(.....)"
    Next
    Adoconn.exec sSQL
    
    半块砖的意见:
    其实 ADO 支持批操作用此方法可以达到秒级。
     Dim cnnSQLBase As New ADODB.Connection
     Dim rstSQLBase As New ADODB.Recordset
    
     With cnnSQLBase
     .Provider = ????
    
     .ConnectionString =????
    
     .Mode = adModeWrite '只写连接
     .CursorLocation = adUseClient '客户端游标
     .ConnectionTimeout = 5 '超时设置
     .Open
     End With
    
     With rstSQLBase
     .ActiveConnection = cnnSQLBase '建立数据联接
     .LockType = adLockBatchOptimistic '批量更新模式
     .CursorType = adOpenForwardOnly '向前游标
     .CursorLocation = adUseClient '客户端游标
     .PageSize = 200
    
     .Open "DELETE ????? ", Options:=adCmdText '
     .Open "SELECT * FROM ????? ", Options:=adCmdText
    
     For I = 1 To ????
    
     .AddNew
     .Fields("????").Value = ???? '关键字
     .Fields("????").Value = ????
     .Update
     Next
    
     .UpdateBatch
     .Close
     Set rstSQLBase = Nothing
     End With
    

    
    sywtx的意见:
    用insert into ...in..方法
    dim mydb as database
    set mydb=opendatabase("",false,false,"odnc;dsn=mydsn") '用dao打开sql数据库
    
    mydb.execute ("insert into '目标表' select * from '数据源表' in 'c:\vb6\source.mdb' 'access') '把本地c:\vb6\source.mdb中的表‘数据源表'插入到sql server 中的'目标表'
    
    

    相关问题:
    QA003164 "能否不是将每个记录的值逐个用ADD NEW方法加入到ADO RECORDSET中"

    

此问题由xufb回答。

附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, 数据库, database, query

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio