• Mở kết nối lại link table không cần activex Control
  • Mở kết nối lại link table không cần activex Control

    ledangvan > 06-05-17, 10:20 PM

    Có bác nào biết chỉ giùm tôi có cách nào kết nối lại link table không cần activex Control không ?  040
  • RE: Mở kết nối lại link table không cần activex Control

    maidinhdan > 06-05-17, 10:41 PM

    (06-05-17, 10:20 PM)ledangvan Đã viết: Có bác nào biết chỉ giùm tôi có cách nào kết nối lại link table không cần activex Control không ?  040

    Thử cái này xem: Chép 2 hàm này vào mà dùng
    Mã PHP:
    Function TaoLinkTable(DuongdanFile As StringMatkhauFile As StringTenTableCanLink As StringDatTenLinkTable As String) As Boolean
        On Error 
    GoTo Loi
        
        Dim tdf 
    As TableDef
        Dim TestLinkTable 
    As Boolean
        Dim myDB 
    As Database

        
    If KiemtraTableTontai(DatTenLinkTableThen
            CurrentDb
    .TableDefs.Delete DatTenLinkTable
        End 
    If
        Set myDB CurrentDb
        Set tdf 
    myDB.CreateTableDef(DatTenLinkTable)
        
        With tdf
            
    .Connect "Ms Access;UID=Admin;PWD=" MatkhauFile ";DATABASE=" DuongdanFile
            
    '.Connect = ";PWD=" & PwdString & ";DATABASE=" & strPath
            .SourceTableName = TenTableCanLink
        End With
        
        myDB.TableDefs.Append tdf
        
        TestLinkTable = True
        
    LoiExit:
        TaoLinkTable = TestLinkTable
        Exit Function
        
    Loi:
        If Err = 3110 Then
            Resume LoiExit
        Else
            If Err = 3011 Then
                Resume Next
            End If
        End If
    End Function 



    Mã PHP:
    Function KiemtraTableTontai(tblName As String) As Boolean
        Dim tdf 
    As TableDef
        Set tdf 
    CurrentDb.TableDefs(tblName)
        Set tdf Nothing
        KiemtraTableTontai 
    True
    End 
    Function 
  • RE: Mở kết nối lại link table không cần activex Control

    ledangvan > 06-05-17, 11:10 PM

    (06-05-17, 10:41 PM)maidinhdan Đã viết:
    (06-05-17, 10:20 PM)ledangvan Đã viết: Có bác nào biết chỉ giùm tôi có cách nào kết nối lại link table không cần activex Control không ?  040

    Thử cái này xem: Chép 2 hàm này vào mà dùng
    Mã PHP:
    Function TaoLinkTable(DuongdanFile As StringMatkhauFile As StringTenTableCanLink As StringDatTenLinkTable As String) As Boolean
        On Error 
    GoTo Loi
        
        Dim tdf 
    As TableDef
        Dim TestLinkTable 
    As Boolean
        Dim myDB 
    As Database

        
    If KiemtraTableTontai(DatTenLinkTableThen
            CurrentDb
    .TableDefs.Delete DatTenLinkTable
        End 
    If
        Set myDB CurrentDb
        Set tdf 
    myDB.CreateTableDef(DatTenLinkTable)
        
        With tdf
            
    .Connect "Ms Access;UID=Admin;PWD=" MatkhauFile ";DATABASE=" DuongdanFile
            
    '.Connect = ";PWD=" & PwdString & ";DATABASE=" & strPath
            .SourceTableName = TenTableCanLink
        End With
        
        myDB.TableDefs.Append tdf
        
        TestLinkTable = True
        
    LoiExit:
        TaoLinkTable = TestLinkTable
        Exit Function
        
    Loi:
        If Err = 3110 Then
            Resume LoiExit
        Else
            If Err = 3011 Then
                Resume Next
            End If
        End If
    End Function 



    Mã PHP:
    Function KiemtraTableTontai(tblName As String) As Boolean
        Dim tdf 
    As TableDef
        Set tdf 
    CurrentDb.TableDefs(tblName)
        Set tdf Nothing
        KiemtraTableTontai 
    True
    End 
    Function 

    Cách dùng như nào chỉ anh với Dân ơi
  • RE: Mở kết nối lại link table không cần activex Control

    maidinhdan > 06-05-17, 11:23 PM

    (06-05-17, 11:10 PM)ledangvan Đã viết:
    (06-05-17, 10:41 PM)maidinhdan Đã viết:
    (06-05-17, 10:20 PM)ledangvan Đã viết: Có bác nào biết chỉ giùm tôi có cách nào kết nối lại link table không cần activex Control không ?  040

    Thử cái này xem: Chép 2 hàm này vào mà dùng
    Mã PHP:
    Function TaoLinkTable(DuongdanFile As StringMatkhauFile As StringTenTableCanLink As StringDatTenLinkTable As String) As Boolean
        On Error 
    GoTo Loi
        
        Dim tdf 
    As TableDef
        Dim TestLinkTable 
    As Boolean
        Dim myDB 
    As Database

        
    If KiemtraTableTontai(DatTenLinkTableThen
            CurrentDb
    .TableDefs.Delete DatTenLinkTable
        End 
    If
        Set myDB CurrentDb
        Set tdf 
    myDB.CreateTableDef(DatTenLinkTable)
        
        With tdf
            
    .Connect "Ms Access;UID=Admin;PWD=" MatkhauFile ";DATABASE=" DuongdanFile
            
    '.Connect = ";PWD=" & PwdString & ";DATABASE=" & strPath
            .SourceTableName = TenTableCanLink
        End With
        
        myDB.TableDefs.Append tdf
        
        TestLinkTable = True
        
    LoiExit:
        TaoLinkTable = TestLinkTable
        Exit Function
        
    Loi:
        If Err = 3110 Then
            Resume LoiExit
        Else
            If Err = 3011 Then
                Resume Next
            End If
        End If
    End Function 



    Mã PHP:
    Function KiemtraTableTontai(tblName As String) As Boolean
        Dim tdf 
    As TableDef
        Set tdf 
    CurrentDb.TableDefs(tblName)
        Set tdf Nothing
        KiemtraTableTontai 
    True
    End 
    Function 

    Cách dùng như nào chỉ anh với Dân ơi

    Sax, Gửi file lên đây hoặc gửi vào email em minh họa cho,
  • RE: Mở kết nối lại link table không cần activex Control

    ledangvan > 07-05-17, 12:00 AM

    Sax, Gửi file lên đây hoặc gửi vào email em minh họa cho,
    [/quote]

    Giúp anh với nhé : http://www.mediafire.com/file/s4uwih26j9...Ketnoi.rar
  • RE: Mở kết nối lại link table không cần activex Control

    maidinhdan > 07-05-17, 12:37 AM

    (07-05-17, 12:00 AM)ledangvan Đã viết: Sax, Gửi file lên đây hoặc gửi vào email em minh họa cho,

    Giúp anh với nhé : http://www.mediafire.com/file/s4uwih26j9...Ketnoi.rar
    [/quote]

    Lưu ý trong hàm: TaoLinkTable có đoạn
    Dùng cái này nếu file có mật khẩu:
    Mã PHP:
    .Connect "Ms Access;UID=Admin;PWD=" MatkhauFile ";DATABASE=" DuongdanFile 
    Còn file anh gửi không có mật khẩu thì dùng
    Mã PHP:
    .Connect ";DATABASE=" DuongdanFile 

    Và khi gọi ra dùng đối với bài anh thì:
    Mã PHP:
    Private Sub cmdLinktable_Click()
    Dim linkfile As String
    linkfile 
    CurrentProject.Path "\db2_be.mdb"

    TaoLinkTable linkfile"""A""AX"
    TaoLinkTable linkfile"""B""BX"

    MsgBox "Da Link thanh cong"
    End Sub 

    File đính kèm đã sửa, hy vọng đúng ý anh
  • RE: Mở kết nối lại link table không cần activex Control

    ledangvan > 07-05-17, 09:54 AM

    (07-05-17, 12:37 AM)maidinhdan Đã viết:
    (07-05-17, 12:00 AM)ledangvan Đã viết: Sax, Gửi file lên đây hoặc gửi vào email em minh họa cho,

    Giúp anh với nhé : http://www.mediafire.com/file/s4uwih26j9...Ketnoi.rar

    Lưu ý trong hàm: TaoLinkTable có đoạn
    Dùng cái này nếu file có mật khẩu:
    Mã PHP:
    .Connect "Ms Access;UID=Admin;PWD=" MatkhauFile ";DATABASE=" DuongdanFile 
    Còn file anh gửi không có mật khẩu thì dùng
    Mã PHP:
    .Connect ";DATABASE=" DuongdanFile 

    Và khi gọi ra dùng đối với bài anh thì:
    Mã PHP:
    Private Sub cmdLinktable_Click()
    Dim linkfile As String
    linkfile 
    CurrentProject.Path "\db2_be.mdb"

    TaoLinkTable linkfile"""A""AX"
    TaoLinkTable linkfile"""B""BX"

    MsgBox "Da Link thanh cong"
    End Sub 

    File đính kèm đã sửa, hy vọng đúng ý anh
    [/quote]

    Tạo link thì OK tuy nhiên anh muốn nó link tất cả các table theo dữ liệu mà anh lựa chọn chứ không mặc định nó tên là db2_be
    Có nghĩa là khi anh an open hoặc Link thì nó mở File cho anh lựa chọn và link các table của file lựa chọn đó
  • RE: Mở kết nối lại link table không cần activex Control

    maidinhdan > 07-05-17, 07:30 PM

    (07-05-17, 09:54 AM)ledangvan Đã viết: Tạo link thì OK tuy nhiên anh muốn nó link tất cả các table theo dữ liệu mà anh lựa chọn chứ không mặc định nó tên là db2_be
    Có nghĩa là khi anh an open hoặc Link thì nó mở File cho anh lựa chọn và link các table của file lựa chọn đó

    Anh xem lại Tiêu đề và câu mình đã đặt ra, Muốn hỏi câu khác thì làm Topic mới.

    Và cũng lưu ý: Trình bày câu hỏi rõ ràng, tốt nhất có ví dụ minh họa. Đừng tiết kiệm vài phút gõ bàn phím.

    Thân mến!
  • RE: Mở kết nối lại link table không cần activex Control

    ledangvan > 08-05-17, 09:20 AM

    (07-05-17, 07:30 PM)maidinhdan Đã viết:
    (07-05-17, 09:54 AM)ledangvan Đã viết: Tạo link thì OK tuy nhiên anh muốn nó link tất cả các table theo dữ liệu mà anh lựa chọn chứ không mặc định nó tên là db2_be
    Có nghĩa là khi anh an open hoặc Link thì nó mở File cho anh lựa chọn và link các table của file lựa chọn đó

    Anh xem lại Tiêu đề và câu mình đã đặt ra, Muốn hỏi câu khác thì làm Topic mới.

    Và cũng lưu ý: Trình bày câu hỏi rõ ràng, tốt nhất có ví dụ minh họa. Đừng tiết kiệm vài phút gõ bàn phím.

    Thân mến!

    Câu hỏi anh đặt rõ mà Dân, anh hỏi là : Mở kết nối lại link table
    Anh hỏi cái này vì hiện tại việc Open và kết nối lại link anh dùng thông qua Activex Control, tuy nhiên ở một số máy chạy win64 hay offce 2007 nó hay bị lỗi nên anh không muốn dùng thông qua Activex Control, nên anh mới đặt câu hỏi như vậy.
    Trong demo của em gửi cho anh, lúc anh để nguyên tên db2_be thì nó kết nối đúng, khi anh đổi file đó thành db2_be1 thì nó vẫn báo "Đã kết nối" tuy nhiên 2 bảng  link A và B thì bị xóa đi.
    Trong hàm của em anh thấy có kiểm tra tồn tại của bảng, nhưng sao khi anh đổi tên dữ liệu đáng ra nó phải báo là không có bảng hay dữ liệu không đúng chứ nhỉ.
    Thực ra anh là dân không chuyên nên cũng có thể cách đặt câu hỏi cũng không chính xác lắm, mong Dân và anh em trong diễn đàn thông cảm và giúp đỡ.
    Xin trân trọng cảm ơn
  • RE: Mở kết nối lại link table không cần activex Control

    ongke0711 > 08-05-17, 01:33 PM

    (08-05-17, 09:20 AM)ledangvan Đã viết: Anh hỏi cái này vì hiện tại việc Open và kết nối lại link anh dùng thông qua Activex Control, tuy nhiên ở một số máy chạy win64 hay offce 2007 nó hay bị lỗi nên anh không muốn dùng thông qua Activex Control, nên anh mới đặt câu hỏi như vậy.
    Trong demo của em gửi cho anh, lúc anh để nguyên tên db2_be thì nó kết nối đúng, khi anh đổi file đó thành db2_be1 thì nó vẫn báo "Đã kết nối" tuy nhiên 2 bảng  link A và B thì bị xóa đi.
    Trong hàm của em anh thấy có kiểm tra tồn tại của bảng, nhưng sao khi anh đổi tên dữ liệu đáng ra nó phải báo là không có bảng hay dữ liệu không đúng chứ nhỉ.

    Nếu không dùng ActiveX Control, sao anh không dùng hàm API họăc FileDialog để mở file cần xử lý.

    Mã PHP:
    Private Sub cmdBrowse_Click()
    Dim dlgopen As Object  'FileDialog'
    Dim strFolder As String
    Set dlgopen 
    Application.FileDialog(4 '(msoFileDialogFolderPicker)'
    strFolder "Chưa chọn folder nào cả"
    With dlgopen
       If 
    .Show = -1 Then
           strFolder 
    dlgopen.SelectedItems(1)
           Me.txtPath strFolder
       End 
    If
    End With 

    Hàm API: copy vào Module

    Mã PHP:
    Option Compare Database
    Option Explicit

    #If VBA7 Then
       Public Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" Alias _
               
    "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
          
       Public Type OPENFILENAME
           lStructSize 
    As Long
           hwndOwner 
    As LongPtr
           hInstance 
    As LongPtr
           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 LongPtr
           lpTemplateName 
    As String
       End Type
      
    #Else

       Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
               
    "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
          
       Public 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 Type
    #End If

    Function LaunchCD(strform As Form) As String
       Dim OpenFile 
    As OPENFILENAME
       Dim lReturn 
    As Long
       Dim sFilter 
    As String
       OpenFile
    .lStructSize Len(OpenFile)
       OpenFile.hwndOwner strform.Hwnd
       sFilter 
    "All Files (*.*)" Chr(0) & "*.*" Chr(0) & _
         
    "JPEG Files (*.JPG)" Chr(0) & "*.JPG" Chr(0)
       OpenFile.lpstrFilter sFilter
       OpenFile
    .nFilterIndex 1
       OpenFile
    .lpstrFile String(2570)
       OpenFile.nMaxFile Len(OpenFile.lpstrFile) - 1
       OpenFile
    .lpstrFileTitle OpenFile.lpstrFile
       OpenFile
    .nMaxFileTitle OpenFile.nMaxFile
       OpenFile
    .lpstrInitialDir "C:\"
       OpenFile.lpstrTitle = "
    Select a file using the Common Dialog DLL"
       OpenFile.flags = 0
       lReturn = GetOpenFileName(OpenFile)
           If lReturn = 0 Then
               MsgBox "
    Ban khong chon file nao!", vbInformation, _
                 "
    Thong bao"
            Else
               LaunchCD = Trim(Left(OpenFile.lpstrFile, InStr(1, OpenFile.lpstrFile, vbNullChar) - 1))
            End If
    End Function 

    - Về cái hàm KiemTraTonTai, nếu không lầm thì bạn Dân thiếu cái bẫy lỗi:
    Mã PHP:
    Function KiemtraTableTontai(tblName As String) As Boolean
        On Error Resume Next
       Dim tdf 
    As TableDef
       Set tdf 
    CurrentDb.TableDefs(tblName)
       If Err.Number 3265 Then
           KiemtraTableTontai 
    False
       Else
           KiemtraTableTontai 
    True
       End 
    If
    End Function