把下面代码中, 标记是红色部分的改成你自己的设置就可以把数据输出了 Private Sub main() Call TransferData("my_table") ' 或者直接 TransferData "my_table" End SubPrivate Sub TransferData(ByVal tbname As String) Dim rs_server As ADODB.Recordset, rs_client As ADODB.Recordset Dim i As Integer, j As Integer, k As Integer, field_type As Integer, field_countAs Integer Dim sqls_client As String , sqls_server As String Dim dbstr_client As String , dbstr_server As String
sqls_server = "select * from " & tbname sqls_client= "select * from " & tbname & " where 1>2"
Do While Not rs_server.EOF rs_client.AddNew For j = 0 To field_count field_type = rs_server.Fields(j).Type If field_type <> 204 Then If field_type = 205 Then rs_client.Fields(j).AppendChunk rs_server.Fields(j) Else rs_client.Fields(j).Value = rs_server.Fields(j).Value End If End If Next rs_client.Update rs_server.MoveNext k = k + 1 Loop
rs_server.Close Set rs_server = Nothing Set rs_client = Nothing
End Sub
sqls = "insert into [型号1] select * from [型号]" --注access的SQL语句,表,列名最好加上中括号[],不然识别有问题
http://blog.csdn.net/claro/archive/2010/09/25/5905761.aspx
跨服务器连接查询
http://blog.csdn.net/claro/archive/2010/08/09/5798156.aspx
rs数据集里用到了conntmp连接,conntmp.open做了吗,看不到完整的代码,只能猜.
Call TransferData("my_table") ' 或者直接 TransferData "my_table"
End SubPrivate Sub TransferData(ByVal tbname As String) Dim rs_server As ADODB.Recordset, rs_client As ADODB.Recordset
Dim i As Integer, j As Integer, k As Integer, field_type As Integer, field_countAs Integer
Dim sqls_client As String , sqls_server As String
Dim dbstr_client As String , dbstr_server As String
sqls_server = "select * from " & tbname
sqls_client= "select * from " & tbname & " where 1>2"
dbstr_server = "Provider=SQLOLEDB;Data Source=(local);uid=sa;pwd=123;Initial Catalog=master"
dbstr_client= "driver={Microsoft Access Driver (*.mdb)};dbq=c:\test\db1.mdb;user id=admin;password=123"
Set rs_server = CreateObject("ADODB.Recordset")
Set rs_client = CreateObject("ADODB.Recordset")
If rs_server.State <> 0 Then rs_server.Close
If rs_client.State <> 0 Then rs_client.Close
rs_server.Open sqls_server, dbstr1, 3, 3
rs_client.Open sqls_client, dbstr2, 3, 3
field_count = rs_server.Fields.Count - 1
k = 0
Do While Not rs_server.EOF
rs_client.AddNew
For j = 0 To field_count
field_type = rs_server.Fields(j).Type
If field_type <> 204 Then
If field_type = 205 Then
rs_client.Fields(j).AppendChunk rs_server.Fields(j)
Else
rs_client.Fields(j).Value = rs_server.Fields(j).Value
End If
End If
Next
rs_client.Update
rs_server.MoveNext
k = k + 1
Loop
rs_server.Close
Set rs_server = Nothing
Set rs_client = Nothing
End Sub
--注access的SQL语句,表,列名最好加上中括号[],不然识别有问题
2楼 两篇文章貌似都是在服务器下操作SQL的,现在我这程序必须在非SQL安装环境下执行
3楼 conntmp.open 做了
4楼 题录里已经写了 SELECT * FROM *** 循环的 可以是可以但是死慢啊
5楼 sqls = "insert into [型号1] select * from [型号]" 这句提示的是链接表连接失败,我现在也很苦恼这里,为什么链接表都正确建立了。再次访问会这样,进入ACCESS表后 双击那连接表 提示也是连接失败,勾掉信任链接,输入服务器信息 又能正常访问,如果建立链接表的时候就去掉信任链接,那么在建链接表的时候就又提示服务器连接失败,我明明已经写了用户名和密码在里面了啊 为什么啊
6楼 谢谢
7楼 谢谢
8楼 谢谢
然后再看INSERT INTO的问题。
rs.Open sqls, conntmp, 1, 3 // 就这了,提示连接失败,如果在服务器上运行 这里就正常
改为
sqls = "insert into [型号1] select * from [型号]"
rs.Open sqls, conntmp, 1, 1
--可能不支持某种游标类型或者锁的模式。每种试一下,默认为,1,1
请看关于Recordset的open方法的说明:
Recordset.open Source,ActiveConnection[,CursorType,LockType,Options]Recordset对应你的rs
Source是你的sql语句变量,对应于sql
ActiveConnection是一个打开的连接,对应于你的cn
CursorType是游标类型,对应于你的第一个1
LockType是锁类型,用于控制并发,对应于你的第二个1当你修改了数据库中的列标题(准确的说法叫做“字段名称”)后,需要相应的修改sql变量中的sql语句,否则查询时会报错。关于CursorType和LockType的详细意义,以你目前的情况可以不用太关注。如果你确实有兴趣想了解,请往下见:CursorType:游标类型,定义如下0(adOpenForwardOnly): 只能在Recordset的记录中向前移动,但速度最快。1(adOpenKeyset):可以在Recordset中任意移动,其他用户所做的记录修改可见,但其他用户添加的记录不可见,删除的记录字段值不能被使用。2(adOpenDynamic):可以在Recordset中任意移动,其他用户增、删、改的记录都可见,但速度最慢。3(adOpenStatic):可以在Recordset中任意移动,其他用户增、删、改的记录都不可见。
LockType:并发控制0(adLockReadOnly):recordset的记录为只读1(adLockPessimistic):只要保持Recordset为打开,别人就无法编辑该记录集中的记录.2(adLockOptimistic):当update recordset中的记录时,将记录加锁3(adLockBatchOptimistic):以批模式时更新记录时加锁
一定要用链接表吗,链接表的稳定性不太好,连接也不是真正意义上的连接而是复杂的技术.
另外可以试试 conn.execute(sql) 不要定义recordset,反正你是插入数据的
为什么不在sqlserver端试试?我觉得不应该很慢的
12楼 其实现在不是乐观锁定还是悲观锁定的问题,就是通过程序访问ACCESS中链接表不能打开的问题
13楼 应为程序问题 不可能每次都拿到服务端去更新数据,如果是服务端更新数据的话 已经搞定了 速度不慢14W条 大概4-5分钟就全部完毕了