Adodc控件使用相对路径连接数据库(Adodc无法设置为动态路径),程序运行时先使用了commondialog导入数据,然后运行含有Adodc控件的窗体时,Adodc控件连接数据库的路径不是app.path,而会变成commondialog所对应的路径,导致无法访问数据库。已经在commondialog 运行完毕后,设置了commondialog.initdir=app.path;也在含有adodc控件的窗体load实践中加了一句Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBFile & ";Persist Security Info=False",但仍然无效,请大家看看如何解决?

解决方案 »

  1.   

    我把Ado控件换成Ado对象,也还是不行。我的方法如下:Dim Adodc1 As New ADODB.Connection
    Private Sub Form_Load()
      Dim strConn As String
      strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBFile & ";Persist Security Info=False"
      Adodc1.ConnectionString = strConn
      Adodc1.CommandType = adCmdText   'Adodc1.CommandType = adCmdUnKnown   
      Adodc1.RecordSource = "select * from [region]"
      Set DataGrid1.DataSource = Adodc1
    End Sub错误在Adodc1.CommandType = adCmdText行,提示如下:
    实时错误 '446'
    对象不支持命名参数大家帮忙看看,谢谢!
      

  2.   

    说明一下,我用的是Access数据库。
      

  3.   

    谢谢jhone99的回复,我重新说一下这个问题。程序中,有多个窗体都使用了DataGrid控件和Adodc控件绑定,Adodc控件设置连接字符串中指定数据库位置好像无法使用变量,是通过相对路径实现("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;Persist Security Info=False" ),动态链接字符串放在窗体的Form_Load事件中好像无效("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & app.path & "\test.mdb;Persist Security Info=False" )。其中有一个窗体使用使用了CommonDialog控件。程序在开发环境本机不会出错,一切正常运行,但发布拿到其他计算机上,会出问题。这个问题是这样的,如果没有使用过CommonDialog控件,DataGrid和Adodc绑定正常,能正常显示数据,如果使用过Commondialog控件,再去调用含有DataGrid和Adodc的窗体,就会提示找不到数据库,提示信息中给出的数据库路径竟然是CommonDialog.InitDir相同,但下次重新启动程序又正常了,如果又使用了CommonDialog控件,还会出现这种错误。让人感到很奇怪,上网搜索了一下,看到不止我一人遇到这个问题,目前还没有搜到解决的办法。请各位再帮忙看看,谢谢!
      

  4.   

    CommonDialog.InitDir改变了app.path的值,再简单不过的事了
    干脆不用app.path改用CommonDialog获取路径
      

  5.   

    咳咳
    初学者的问题,N年前我也遇到同样的问题
    每次调用commondialog 后
    执行下面两句,把路径切换回来就行了
    ChDrive Left(App.Path, 1)
    ChDir App.Path
      

  6.   

    jhone99老兄,我没有改变过app.path的值,按道理,app.path应该是只读。
      

  7.   

    app.path应该是只读没错
    commondialog 改变的是“当前路径”
    再把“当前路径”切换到app.path就行了
      

  8.   

    CommonDialog.InitDir会把app.path的值改变,怎么看不明白?app.path的概念理解吗?
      

  9.   

    糊涂了N年,受教了
    刚才看了看MSDN,app.path虽然是只读属性,但是会被其他因素改变,不一定是可执行程序所在路径
    呵呵
      

  10.   

    咦?
    Private Sub Command1_Click()
        Dim s As String
        Print App.Path
        s = App.Path
        CommonDialog1.InitDir = "d:\"
        CommonDialog1.ShowOpen
        Print App.Path
        ChDir s
        Print App.Path
    End Sub这段代码,在IDE里面app.path会受到CommonDialog1的影响
    编译以后就不受影响,app.path始终是exe所在路径
      

  11.   

    幸好app.path编译后不受影响
    我一直把它当成绝对可靠的只读属性来用的
    现在看来确实是只读
      

  12.   

    Dim Adodc1 As New ADODB.Connection这样也行
      

  13.   

     
    yachong
    感谢蚜虫大哥,十分的感谢。受教了