闲话少说,进入正题:
逻辑:
access支持
select * into tbl from[odbc:dsn=a;uid=uid;pwd=pwd].tbl这种方式的数据导入
所以我们只需要在要运行的客户端上建立一个连接数据源Oracle的ODBC数据源便可,Access不需要做任何设置
由于用户并不一定知道怎么建立ODBC数据源,而且dsn需要有oracle的network/admin下的tnsnames.ora(这个用过oracle的都知道是啥玩意)来指向oracle服务器,但客户端不一定会装oracle
所以程序里除了开头说的那个sql之外,另外还需解决2个问题:帮助客户端建立ODBC数据源,并在帮助这个ODBC数据源在没有tnsnames.ora文件的情况下连接到数据库.
基本问题就是这些,下面一一道来
建立ODBC数据源需要引用
Imports DAO
然后通过DAO.DBEngine建立DSN:
    Private Sub CreateDSN(ByVal sDSN As String)
        Dim sDriver As String
        sDriver = "Microsoft ODBC for Oracle"
        Dim sAttributes As String = "Server=ORA9" 
        Dim DBEngine As New DAO.DBEngine
        DBEngine.RegisterDatabase(sDSN, sDriver, True, sAttributes)

    End Sub

建立好之后不放心的可以在测试机的数据管理那里测试一下有没有建立好,关键是Server那里要写对,再就是driver那里因为我是用ora9的所以用"Oracle in OraHome92"这个也可以.但是要考虑客户端那边并不一定有这个driver.

下面是连接DSN并抓数据了,其实关键就是这一句:
select * into tbl from[odbc:dsn=a;uid=uid;pwd=pwd].tbl
在同事的帮助下,我在codeproject.com上找到了怎么将tnsnames.ora也写在连接字符串里..很简单..就是把这个文件里连接目标数据库的那一段加进[odbc:..]这里面,最后就写成这样:
 SELECT * INTO tbl FROM [ODBC;DSN=ExportWork;uid=UID;pwd=PWD;CONNECTSTRING=" & System.Configuration.ConfigurationSettings.AppSettings.Get("tnsnames") & ";].tbl
这个tnsnames的字符串写在app.config里
<add key="tnsnames" value="(DESCRIPTION=(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.65)(PORT = 1521))(CONNECT_DATA =(SERVICE_NAME = ora9)))"></add>

这样就基本ok了
最后说几个注意的地方:
第一:这个sql需要用ODBC来执行,为什么我就不用说了吧,至于为什么我要提这个,因为我就曾经用ole db来执行这个sql,然后错了都不知道为什么....;
第二:在执行这个sql的时候,如果access里已经有了相应的表,会出错.所以在执行这个sql之前先要drop掉那个表...但是access不支持if exists这种玩意,美办法之下我只好try catch了..
第三:oracle里有BLOB这种格式,会出错...至于怎么解决,我倒是看到有解决方案,但是没想好怎么加到这段程序里.也问过邹建,他也说他一时也想不出有啥更好的办法..大家有什么好建议记得吱一声哈..

如上.就这样了