 |
操作系统: 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。
|
| |
|
| |
|
| |
|
|