我需要用vb访问dbf格式的数据文件,选择odbc方式实现,由于程序所要运行的客户端间各自采用的数据库不同(有dbase,sqlserver,foxpro),所以要求程序独立于数据库即在没有数据库环境的机器上也能运行访问dbf数据文件。我先用dbase驱动,能够连接,但表名字符数不能超过8个,否则报找不到文件错,改用foxpro驱动,手工配驱动连接成功且表名问题解决,但编程建立数据源,则有问题,总报"an error occured configuring the dsn,please check the parameters and try angain",而且手工配置时必须选择路径,否则即使程序配置SourceDB,执行时也会报SourceDB错误,难道必须安装foxpro后,才能用它的驱动吗?可手工配置怎么又可以用啊,这个问题真把我搞晕了,向高手求救,以下是我的相关程序代码,请帮看一下是否有错误,谢谢了!strattrib = "Description=" _
        & "foxpro conn" _
  & Chr$(13) & "OemToAnsi=No" _
  & Chr$(13) & "SERVER=127.0.0.1" _
  & Chr$(13) & "Network=tcp/ip" _
  & Chr$(13) & "SourceDB=e:\dbpath" _
  & Chr$(13) & "SourceType=DBF" _
  & Chr$(13) & "Exclusive=Yes" _
  & Chr$(13) & "BackgroundFetch=Yes" _
  & Chr$(13) & "Collate=Machine" _
  & Chr$(13) & "Null=Yes" _
  & Chr$(13) & "Deleted=Yes" _
  & Chr$(13) & "Extended Properties = dBASE" _
  & Chr$(13) & "Provider=MSDASQL.1"
'  & Chr$(13) & "DatabaseType=Free Table directory" _
'  & Chr$(13) & "dbq=e:\dbpath" _
rdoegn.rdoRegisterDataSource "bbb", "Microsoft Visual Foxpro Driver", True, strattrib
Set rdoconn = rdoevn.OpenConnection("aaa", rdDriverNoPrompt, "Provider=MSDASQL.1;UID=;PWD=;SourceDB=e:\dbpath;SourceType=DBF;Extended Properties = dBASE")

解决方案 »

  1.   

    Why do you configure all these in your code?  Go to Control Panel -> Administrative Tools -> Data Source (ODBC).  Create a "System DSN" and configure all the parameters there.  Then in your code you just need to reference the ODBC name you created in the above step.  This will eliminate a lot of errors.Try that.
      

  2.   

    因为程序是运行在客户端,用户很多而且大都不怎么会用计算机,我不可能到每一个客户端去帮他们配置,所以必须程序自动配置,各位高手帮忙想个好的解决方法,必有重谢。(还有上面程序中的dsn应为bbb,程序中没写错,拷贝时拷错了)
        还有改用ado方式可以不安装数据库直接用吗,有谁试过吗?
      

  3.   

    yoki能帮详细解释一下吗,是用Jet 4.0的odbc驱动程序? vb6.0是否支持或更高的版本,是必须要用ado吗,最好能给个简单的例子,真的很急,先谢谢了!
      

  4.   

    用ADO连接sqlserver和foxpro库表的驱动是不同的
      

  5.   

    连接FoxPro
    con.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=Visual FoxPro Tables;Initial Catalog=f:\fp"
    连接SQL
    Set CN = New ADODB.Connection
        With CN
            .ConnectionString = "uid=sa;pwd=;driver={SQL Server};server=ServerName;database=DB"
            .ConnectionTimeout = 30
            .CursorLocation = adUseServer
            .Open
        End With
      

  6.   

    楼上的人兄,你说的这两种方法是不是都要求客户端安装有相应的数据库,程序才能运行,我想要一种独立于数据库的方法访问dbf格式的数据文件,我试过dbase驱动,可以不要数据库就建立dsn,但表名长度超过8位就报找不到文件错误。试过foxpro驱动,不安装数据库的情况下,手工配置dsn可以用,但编程配置总报上面说的错误。
        难道真的没有办法实现这个要求。各位帮我想个方法,我一定高分重谢!
      

  7.   

    '用ADO连接吧.
    '引用:'Microsoft ActiveX Data Objects 2.x Library
    'x是版本号,视你的电脑上安装的版本而定Sub Foxpro()
        Dim iRe As ADODB.Recordset
        Dim iConc As String
        
        iConc = "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=""DSN=Visual FoxPro Database;UID=;SourceType=DBF;" & _
            "SourceDB=c:\""" 'c:\是dbf文件所在的目录
            
        Set iRe = New ADODB.Recordset
        iRe.Open "select * from [aa.dbf]", iConc, adOpenKeyset, adLockOptimistic
        
        MsgBox iRe(0)
        iRe.Close
    End Sub
      

  8.   

    上面的方法,要求程序所在的电脑上安装有MADOC就行了,
    一般win98第二版以后的操作系统都有.
      

  9.   

    zjcxc兄非常感谢你,我终于看到希望了,但我想再请教一下,程序中的dsn=Visual FoxPro Database是必须通过手工建立吗,我需要通过程序自动建立,可以吗?能给个例子吗,感谢!
      

  10.   

    不用建立啊,dsn=Visual FoxPro Database
    默认的情况下,win98已经自带了foxpro的驱动程序,如果没有的话,安装了MADOC后也会自动生成这个.所以不需要配置什么.
      

  11.   

    如果是这样,那我的程序应该没有问题了,zjcxc兄太感谢你了,我马上给你加分。