2009-07-06 4 views
1

VB 사용 6다른 시스템 또는 서버에서 데이터베이스에 액세스하는 방법은 무엇입니까?

다른 시스템 또는 서버에서 데이터베이스에 액세스하는 방법은 무엇입니까?

코드 내 코드에서 직접 연결을 제공하지 않으

Cn.ConnectionString = "Provider=Microsoft.jet.oledb.4.0; Data Source=" & _ 
         App.Path & "\DC-CS.MDB" 
Cn.Open 

, 나는 다른 시스템 또는 동일한 시스템 또는 서버에서 연결 및 * .mdb 파일을 선택합니다.

다른 시스템이나 서버에서 연결 테스트 및 mdb 파일을 선택하기 위해 VB에서 사용해야하는 컨트롤 유형은 무엇입니까?

우선 연결 테스트를 수행 한 후 다른 시스템이나 서버에서 * .mdb 파일을 선택하려고합니다. 나는 VB 6

의 연결 및 * .mdb 파일을 선택할 수있는 방법 VB 6 코드 도움말

답변

1

데이터 링크 속성 대화 상자를 사용하여 OLE DB 연결 문자열을 정의 할 수 있습니다. 공급자 및 기타 특성을 미리 정의하고 MDB 파일을 찾아 사용자가 Jet 4.0을 공급자로 미리 정의한 경우이를 선택할 수 있습니다.

일단이 선택이 이루어지면 연결을 a로 유지할 수 있습니다.UDL (Universal Data Link) 파일. UDL은 오랜 시간 전에 DSN을 대체했습니다. 나는 그들이 거의 사용하지 않는 것을 놀라게했다.


다음은 프로그램에서 사용자가 MDB 파일을 찾아 볼 수있는 UDL 및 기본 경로를 지정할 수있게 해주는 몇 가지 샘플 코드입니다. UDL이 없으면 사용자가 MDB를 선택할 수 있도록 Data Link Properties 대화 상자를 열고 설정을 Oking 또는 Cancel하기 전에 해당 대화 상자에서 테스트 연결 Test Connection을 허용합니다. 연결이 완전히 정의되면이를 UDL 파일로 유지하고 Connection 객체를 엽니 다.

UDL 파일이있는 경우 UDL의 사양을 사용하여 연결을 엽니 다.

여기의 키는 DbOpenPromptSave() 기능입니다.

'Requries references to: 
' Microsoft ActiveX Data Objects x Library (x >= 2.5) 
' Microsoft OLE DB Service Component 1.0 Type Library 

Private Function DbOpenPromptSave(_ 
    ByVal Conn As ADODB.Connection, _ 
    ByVal UDLPath As String, _ 
    Optional ByVal MDBSearchStartPath As String = "") As Boolean 
    'Returns True if user cancels the dialog. 

    On Error Resume Next 
    GetAttr UDLPath 
    If Err.Number Then 
     'No UDL, we need to prompt the user then create one. 
     On Error GoTo 0 
     Dim dlkUDL As MSDASC.DataLinks 

     Set dlkUDL = New MSDASC.DataLinks 
     Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ 
           & "Persist Security Info=False;" _ 
           & "Jet OLEDB:Engine Type=5;" _ 
           & "Data Source=" & MDBSearchStartPath & "\;" _ 
           & "Window Handle=" & CStr(Me.hWnd) 
     If Not dlkUDL.PromptEdit(Conn) Then 
      DbOpenPromptSave = True 
      Exit Function 
     End If 

     'Use a Stream as Unicode writer. Using a relative path to save 
     'respects the Current Directory of the process. 
     Dim stmUDL As ADODB.Stream 
     Set stmUDL = New ADODB.Stream 
     With stmUDL 
      .Open 
      .Type = adTypeText 
      .Charset = "unicode" 
      .WriteText "[oledb]", adWriteLine 
      .WriteText "; Everything after this line is an OLE DB initstring", _ 
         adWriteLine 
      .WriteText Conn.ConnectionString 
      .SaveToFile UDLPath, adSaveCreateOverWrite 
      .Close 
     End With 
     Conn.Open 
    Else 
     Conn.Open "File Name=" & UDLPath 
    End If 
End Function 

Private Function DbActions() As Boolean 
    'Returns True on cancel. 
    Dim connDB As ADODB.Connection 

    Set connDB = New ADODB.Connection 
    If DbOpenPromptSave(connDB, "sample.udl", App.Path) Then 
     MsgBox "User canceled!" 
     DbActions = True 
     Exit Function 
    End If 
    DoDbOperations connDB 'Whatever you need to do until closing. 
    connDB.Close 
End Function 

DbActions() 함수는 단순히 데이터베이스를 열 DbOpenPromptSave() 전화의 일례이다. 이 함수는 데이터베이스를 열고(표시되지 않음)을 호출하여 실제로 열린 데이터베이스와 작업 한 다음 데이터베이스 연결을 닫습니다.

이 예는 sample.udl 위해 (App.Path로 일반적으로 같은 현재 디렉토리) 상대 경로를 사용하고 (App.Path로합니다 (선택 Access 데이터베이스 대화 상자가 열립니다)를 MDBSearchStartPath을 설정이 대화 상자의 기본값 때문에 마지막 CommonDialog가 열렸습니다). 그것은을 위해/보이는 그래서 다른 말로

...

는 CD (보통 App.Path)에서 UDL sample.udl를 저장하고 MDB 선택 대화 상자가 App.Path에서 열립니다. 아휴.

이 경우에는 CurDir$()을 전달하면됩니다.


요청하신 내용에 가까워지기를 바랍니다. 조금 애매합니다.

사용자가 열리는 MDB 선택 하위 대화 상자는 거의 표준 CommonDialog.ShowOpen 대화 상자입니다. 사용자는 원격 시스템의 파일 공유를 포함하여 모든 드라이브의 MDB 파일을 찾아 볼 수 있어야합니다.

+0

나는 UDL이 일반적으로 유지하기 쉽다고 덧붙여 야합니다. 탐색기에서 두 번 클릭하기 만하면 데이터 링크 속성 대화 상자가 다시 열리고 변경됩니다! – Bob77

0

도메인에 App.Path를 공유해야합니다 바랍니다. 그런 다음 다른 시스템에서 공유 폴더로 App.Path를 지정하십시오.

경로 및/또는 파일을 동적으로 선택하려면 FileOpen 대화 상자/컨트롤을 사용하십시오.

코드 예제에서 저는 거의 5 년 만에 실제 VB6을 사용하지 않았으므로 어떤 예제를 만들지도 모릅니다. 내가 올 수있는 가장 가까운 Excel VBA 6.5입니다.

Public Function OpenDB() As Boolean 
'Open the Database and indicate if successful' 
If IsOpen Then 
    OpenDB = True 'we are already open' 
    Exit Function 
End If 

If sFile = "" Then sFile = GetSetting("YourAppName", "History", "DBName") 

With Application.FileDialog(msoFileDialogFilePicker) 
    'specify the file open dialog' 
    .AllowMultiSelect = False 
    .Filters.Clear 
    .Filters.Add "Access Workbooks", "*.mdb" 
    .Filters.Add "All Files", "*.*" 
    .InitialFileName = sFile 
    .Title = "Open TIP Database" 

    .Show 

    If .SelectedItems.Count > 0 Then 
     sFile = .SelectedItems(1) 
    Else 'user canceled ...' 
     OpenDB = False 
     Exit Function 
    End If 
End With 

DB.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sFile 
On Error Resume Next 
    DB.Open 
If Err.Number <> 0 Then 
    MsgBox "Error(" & Err.Number & "): " & Err.Description, vbOKOnly + vbCritical, "Error in OpenDB" 
    OpenDB = False 
    Exit Function 
End If 

'Opened ok, so finsh-up and exit' 
OpenDB = True 
SaveSetting "YourAppName", "History", "DBName", sFile 
End Function 

당신은 VB 양식의 FileDialog 컨트롤에 대한 참조로 "Application.FileDialog"를 교체해야합니다/: 여기가 찾아 Access 데이터베이스를 열 Excel에서 사용하는 VBA를 함수의 예입니다 구성 요소는 도구 상자 (실제로는 구성 요소 컨트롤이므로 실제로는 볼 수 없음)에서 VB로 가져와야합니다.

GUI 기능이고 VB Forms GUI가 Excel GUI와 근본적으로 다르기 때문에 약간의 차이가있을 것으로 예상됩니다. 따라서 & 속성은 다를 수 있으며 VB 도움말에서 주변을 둘러 보거나 둘러 봐야합니다.

참고 : GetSetting 및 SaveSetting 항목은 레지스트리에서 마지막으로 사용한 파일 이름과 경로를 저장하기 때문에 다음 번에 기본 위치로 사용할 수 있습니다.

+0

@RBarryYoung. 제 질문을 읽어주세요, 분명히 내가 다른 시스템에서 데이터베이스 파일을 선택하고 싶은 파일 디렉토리를 열고 싶습니다. – Gopal

1

RBarry는 한 컴퓨터에서 특정 폴더를 "공유"할 수 있으므로 다른 컴퓨터에서 액세스 할 수 있습니다.

두 컴퓨터의 이름이 computer1 및 computer2 인 경우 computer2는 "sharedfolder"와 같은 이름을 가진 C : 드라이브의 폴더를 공유 할 수 있습니다. 그런 다음 computer1은 "\\ computer2 \ sharedfolder"경로를 사용하여 해당 폴더에 액세스 할 수 있습니다.

computer1의 응용 프로그램에서 해당 경로를 사용할 수없는 경우 "F :)와 같은 드라이브 문자를"\\ computer2 \ sharedfolder "에"매핑 "할 수 있습니다. 그러면 컴퓨터 1의 F : 드라이브처럼 보입니다.

관련 문제