本帖最后由 zenter 于 2010-10-22 02:47:45 编辑

解决方案 »

  1.   

    access的SQL访问及注意事项
    http://blog.csdn.net/claro/archive/2010/09/25/5905761.aspx
    跨服务器连接查询
    http://blog.csdn.net/claro/archive/2010/08/09/5798156.aspx
      

  2.   

    这个问题应发在vb版,
    rs数据集里用到了conntmp连接,conntmp.open做了吗,看不到完整的代码,只能猜.
      

  3.   

    把下面代码中, 标记是红色部分的改成你自己的设置就可以把数据输出了 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"    

    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
      

  4.   

    sqls = "insert into [型号1] select * from [型号]" 
    --注access的SQL语句,表,列名最好加上中括号[],不然识别有问题
      

  5.   

    1楼 都夜猫子啊,注意身体啊
    2楼 两篇文章貌似都是在服务器下操作SQL的,现在我这程序必须在非SQL安装环境下执行
    3楼 conntmp.open 做了
    4楼 题录里已经写了 SELECT * FROM *** 循环的 可以是可以但是死慢啊
    5楼 sqls = "insert into [型号1] select * from [型号]"  这句提示的是链接表连接失败,我现在也很苦恼这里,为什么链接表都正确建立了。再次访问会这样,进入ACCESS表后 双击那连接表 提示也是连接失败,勾掉信任链接,输入服务器信息 又能正常访问,如果建立链接表的时候就去掉信任链接,那么在建链接表的时候就又提示服务器连接失败,我明明已经写了用户名和密码在里面了啊 为什么啊
    6楼 谢谢
    7楼 谢谢
    8楼 谢谢
      

  6.   

    逐步测试。连在A上连接SELECT * FROM 一个表,看能否连接上并取得数据。
    然后再看INSERT INTO的问题。
      

  7.   

    sqls = "insert into 型号1 select * from 型号" 
    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):以批模式时更新记录时加锁 
      

  8.   

    看了十来分钟,总感觉理解有点困难,文章好像有歧义还是理解的问题,参考参考
    一定要用链接表吗,链接表的稳定性不太好,连接也不是真正意义上的连接而是复杂的技术.
    另外可以试试 conn.execute(sql) 不要定义recordset,反正你是插入数据的
      

  9.   

    对了 补充一下 双链接的方式很慢吗?
    为什么不在sqlserver端试试?我觉得不应该很慢的
      

  10.   

    11楼 select * from 如果正常访问SQL-可以 如果正常访问呢ACCESSDB-可以 如果访问ACCESS中的链接表(链接到SQL服务器中的表),提示链接SQL失败
    12楼 其实现在不是乐观锁定还是悲观锁定的问题,就是通过程序访问ACCESS中链接表不能打开的问题
    13楼 应为程序问题 不可能每次都拿到服务端去更新数据,如果是服务端更新数据的话 已经搞定了 速度不慢14W条 大概4-5分钟就全部完毕了