以下是连接数据库的语句:
连接ACCESS:
With Connection
    .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Trim(txtBase.Text) & ";Mode=ReadWrite|Share Deny None;Persist Security Info=False;Jet OLEDB:Database Password=1"
    .Provider = "sqloledb"
    .Open
End With其中txtBase.Text为相对路径。如果我不调用CommonDialog控件的showopen方法,连接完全正常。但是如果在程序中使用了一个CommonDialog控件,我只要一调用showopen方法,相对路径前面就加上了showopen的路径。所以连接数据库就会失败。连接SQL数据库也是用样,只要一调用showopen方法就连接失败。请问这该如何解决?

解决方案 »

  1.   

    不会呀.你的相对路径是不是 app.path 呀.
      

  2.   

    不是APP.path。比如数据库文件是相同目录下的ww.mdb,连接语句就是Data Source=ww.mdb。如果只是这样没有问题。如果我在程序中加一个功能,就是选择图片显示在picture中。当使用CommonDialog选择图片后,连接数据库时提示找不到图片路径下的ww.mdb。但是如果选择的图片与程序在相同目录下则无问题
      

  3.   

    你要是知道数据库目录的话,在你连接之前你可以把当前路径更改为其路径的..假如目录是:c:\test\ww.mdbdim iPos as integer
    dim sPath as stringspath = "c:\test\ww.mdb"ipos = instrrev(spath,"\")
    if ipos >0 then spath = left(spath ,ipos - 1)ChDrive Left(sPath, 2)
    chdir spath试试这样行不行吧..
      

  4.   

    在连接字符串中加上app.path,这样就可以了With Connection
        .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\" & Trim(txtBase.Text) & ";Mode=ReadWrite|Share Deny None;Persist Security Info=False;Jet OLEDB:Database Password=1"
        .Provider = "sqloledb"
        .Open
    End With
      

  5.   

    使用下面的代码不会改变app.path
    Option Explicit
    Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
    Private Const OFN_HIDEREADONLY = &H4
    Private Type OPENFILENAME
        lStructSize As Long
        hwndOwner As Long
        hInstance As Long
        lpstrFilter As String
        lpstrCustomFilter As String
        nMaxCustFilter As Long
        nFilterIndex As Long
        lpstrFile As String
        nMaxFile As Long
        lpstrFileTitle As String
        nMaxFileTitle As Long
        lpstrInitialDir As String
        lpstrTitle As String
        flags As Long
        nFileOffset As Integer
        nFileExtension As Integer
        lpstrDefExt As String
        lCustData As Long
        lpfnHook As Long
        lpTemplateName As String
    End TypePrivate  Function CommonOpenFile(ByVal hWndParent As Long, ByVal Filter As String, ByVal InitDir As String, ByVal Title As String) As String
      Dim OFName As OPENFILENAME             '打开一个文件
      Dim Tam As Long
        
      OFName.lStructSize = Len(OFName)
      OFName.hwndOwner = hWndParent
      OFName.hInstance = App.hInstance
      OFName.lpstrFilter = Filter
      OFName.lpstrFile = Space$(254)
      OFName.nMaxFile = 255
      OFName.lpstrFileTitle = Space$(254)
      OFName.nMaxFileTitle = 255
      OFName.lpstrInitialDir = InitDir
      OFName.lpstrTitle = Title
      OFName.flags = OFN_HIDEREADONLY
      If GetOpenFileName(OFName) Then
        OFName.lpstrFile = Trim(OFName.lpstrFile)
        Tam = Len(OFName.lpstrFile)
        CommonOpenFile = Mid(OFName.lpstrFile, 1, Tam - 1) 'cut char 0
      Else
        CommonOpenFile = ""
      End If
    End Function
    Private Sub open_Click()
     Dim FileName As String
      FileName = CommonOpenFile(Me.hwnd, "", App.Path, "Open")
      If FileName <> "" ThenEnd If
    End Sub
      

  6.   

    to qingoodrar(和风) :还是不行,它还是找showopen打开的那个路径。starsoulxp(星魂.NET) :首先,这样连也会失败,同样它还是找showopen打开的那个路径。
    其次,输入为绝对路径你的方法也不适用了。
      

  7.   

    laviewpbt(pbt):app.path并没有改变,只是连接数据库时它总是找ShowOpen路径下的文件。
      

  8.   

    以下是我程序的主要代码:
    连接数据库:
    With Connection
            .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Trim(txtBase.Text) & ";Mode=ReadWrite|Share Deny None;Persist Security Info=False;Jet OLEDB:Database Password= 1"
            .Provider = "sqloledb"
            .Open
    End With打开图片:
    CommonDialog.ShowOpen
    strPicPath = DiaPicSel.FileName
    Image5.Picture = LoadPicture(strPicPath)
    虽然可能大家觉得很简单,但我还是希望各位高手能够自己先测试一下,谢了。
      

  9.   

    没用。更奇怪的是连接SQL也出错