SQL SERVER数据库在远端计算机上要求通过程序能够从本地远程访问SQL SERVER,将其中数据库TEST中的TEST_table1,TEST_table2,……TEST_table6等6张表中的数据导到本地access文件中1、本地access文件能否通过程序创建?
2、access文件中的表能否通过程序创建?
3、有的表数据记录会比较多,要求导出到本地的速度不能太慢欢迎提出解决思路

解决方案 »

  1.   

    开发环境为VC2005+MFC,SQL SERVER数据库为SQL SERVER2005要求采用ADO访问数据库
      

  2.   

    1\2 如果你的表结构是固定的,不防先做好Access库,及空表。
    3、VC创建连接对象,分别连接SQL\Aceess,ADO的连接方式网上很多。然后就是SQL的读与Access的写了。至于速度,得看你如何优化了。
      

  3.   

    ADO,主要通过sql语句来访问,创建table等
      

  4.   


    呵呵,以前没做过VC的数据库设计,没办法,进度有要求通过程序创建Access文件已经搞定了,就不麻烦了现在的问题是怎么把远端SQL的数据导入到本地access文件中?m_pCommand->CommandText = (_bstr_t)"insert into openrowset('Microsoft.Jet.OLEDB.4.0','TEST.mdb';'admin';'',TEST_table1) select * from TEST";上面这句通不过啊?
      

  5.   

    1  创建文件是可以的,楼主已解决,就不用说了
    2  创建表也肯定是可以的,不过如果是想从SQLSever中读取表的信息,然后通过程序在access文件中自动生成表,是会有问题的,一是字段类型名不一样,需要添加判断替换过程,二是access中创建表的语句列名数是有限制的,至少office2003的access是如此。
    3  用insert into openrowset。这样的语句有个问题,因为你的access文件在本地,所以你讲这个查询字符串提交远端SQL执行的时候,access文件的本地路径对远端的sql来说是没有意义的。据说可以通过共享,设置共享连接路径来解决,但我没有验证过。
       一般的方法就是本机分别创建SQL和access的连接对象和记录集,先从远端SQLSever中查询出某表的字符集,逐列读取信息,然后用access的连接对象实现插入。
      

  6.   

    用两个_RecordsetPtr来复制数据的方法已经搞定,继续征求其它更好方法 while (!m_pRecordset_sql->adoEOF)
    {
    m_pRecordset_access->AddNew();
    for (int i = 0; i < m_pRecordset_sql->Fields->Count; i++)
    {
    vValue = m_pRecordset_sql->GetCollect(_variant_t((long)i));
    m_pRecordset_access->PutCollect(_variant_t((long)i), vValue);
    }
    m_pRecordset_access->Update();
    m_pRecordset_sql->MoveNext();
    }
      

  7.   

    SQL Server可以创建DTS任务包,将数据从SQL Server导入Access
    在程序中采用dtsrun 命令提示实用工具执行包。