maidinhdan > 23-03-21, 05:43 PM
Ham_TaoLinkAllTable(DuongDanFile,[Mat khau co the bo trong neu file khong co mat khau])
=>
    Ham_TaoLinkAllTable Me.txtlinkfile1, Me.txtpass            'File co Pass
    Ham_TaoLinkAllTable Me.txtlinkfile2                    ' File khong Pass, chi can dien Link File la dc 
![[Hình: demoHinh_LinkNhieuTable_Phan2.png]](https://sites.google.com/site/postdumdemo/home/hinh/demoHinh_LinkNhieuTable_Phan2.png)
' --------------------------------------------------------------------------------------------------------
' Ten Modules/Class:    modLinkTable
' Ten ham/thu tuc    :  Ham_TaoLinkAllTable
' Tao tren may PC    :  HENDAN
' Author/ Tac gia    :  maidinhdan@gmail.com ,  Ngay, gio tao: 23/03/2021 4:19:39 PM
' Parameters/Tham so :
' Cu phap/ Purpose  : Ham_TaoLinkAllTable(DuongDanFile,[Mat khau co the bo trong neu file khong co mat khau])
' Pham vi ap dung    : Tao LinkTable nhanh voi nhieu File Access khac nhau va co so luong table lon
' --------------------------------------------------------------------------------------------------------
Public Function Ham_TaoLinkAllTable(DuongDanFile As String, Optional MatkhauFile As String) As Boolean
    On Error GoTo Loi
        'Chen cac Thu tuc cua ban o day
    Dim dbHienHanh As DAO.Database, i As Integer
    Set dbHienHanh = CurrentDb
    Dim TableHienHanh As String
    'Duyet lay tat ca table Access hien hanh, bao gom ca cac table dang link, ngoai tru table he thong
    For i = 0 To dbHienHanh.TableDefs.Count - 1
        If Left(dbHienHanh.TableDefs(i).Name, 4) <> "MSys" Then
        TableHienHanh = dbHienHanh.TableDefs(i).Name
            Debug.Print "HienHanh: ___________", TableHienHanh
        End If
    Next i
    ' Khoi tao mot ket noi den Link file chi dinh; cac dong mau xanh la cay de Admin Test thoi, khi dung hay bo di
    Dim dbKhac As DAO.Database  ', i As Integer
'    Dim DuongDanFile As String, MatkhauFile As String
    Dim tdf As TableDef
'    DuongDanFile = CurrentProject.Path & "\DataTest.mdb"
'    MatkhauFile = "111444"
'    DuongDanFile = CurrentProject.path & "\TaoFileMDB.mdb"
'    MatkhauFile = ""
    i = 0  'Set bien i lai tu dau
    Set dbKhac = DBEngine.Workspaces(0).OpenDatabase(DuongDanFile, False, False, "MS Access;PWD=" & MatkhauFile)
    Dim TableKhac As String
    
    ''Duyet lay tat ca table Access theo Link file chi dinh, ngoai tru table he thong
    For i = 0 To dbKhac.TableDefs.Count - 1
        If Left(dbKhac.TableDefs(i).Name, 4) <> "MSys" Then
        TableKhac = dbKhac.TableDefs(i).Name
        'So sanh Table trong File chi dinh co khac voi table hien hanh khong? Khac thi xoa; Khong thi bo qua
        If KiemtraTableTontai(TableKhac) Then  'Hàm kiem tra table hien hanh co ton tai khong?
            CurrentDb.TableDefs.Delete TableKhac
            Debug.Print TableKhac & "________Da Xoa va Se tao lai"  'Thong bao Table dang ton tai, se xoa va se tien hanh lien ket lai
        Else
            Debug.Print TableKhac & "________SeTaoMoi"  'Thong bao Table chua co, va se tien hanh lien ket lai
        End If
        'Tien hanh link lai lien ket voi table trong file chi dinh
                Set dbHienHanh = CurrentDb
                Set tdf = dbHienHanh.CreateTableDef(TableKhac)
                'Danh dau ket noi den file Access chi dinh de tien hanh link table
                With tdf
                    .Connect = "Ms Access;UID=Admin;PWD=" & MatkhauFile & ";DATABASE=" & DuongDanFile
                  .SourceTableName = TableKhac
                End With
                ' ra lenh ket noi
                dbHienHanh.TableDefs.Append tdf
            
        End If
    Next i
    'Xoa bien khoi bo nho
      Set dbHienHanh = Nothing
      Set dbKhac = Nothing
      Ham_TaoLinkAllTable = True
' Doan xu ly cac loi
LoiExit:
    Exit Function
Loi:
    Ham_TaoLinkAllTable = False
    If Err = 3110 Then
        Resume LoiExit
    Else
        If Err = 3011 Then
            Resume Next
        End If
    End If
End Function 
ledangvan > 23-03-21, 05:54 PM
ongke0711 > 24-03-21, 12:58 PM
Function XoalinkedTables() As Boolean
    On Error GoTo EH
    Dim dbs As DAO.Database
    Dim tdf As DAO.TableDef
    Set dbs = CurrentDb
    'Xoa linked table'
    For Each tdf In dbs.TableDefs
        If Len(tdf.Connect) > 0 Then
            If tdf.Connect Like "*;DATABASE=*" Then    'Chi xóa link cua Access database'
                'On Error Resume Next                    '* Khong có dòng này, se không xóa hêt tdf
                'DoCmd.DeleteObject acTable, tdf.Name  '
                dbs.TableDefs.Delete tdf.Name
            End If
        End If
    Next tdf
    XoalinkedTables = True
    Exit Function
EH:
    XoalinkedTables = False
End Function 
maidinhdan > 24-03-21, 03:55 PM
(24-03-21, 12:58 PM)ongke0711 Đã viết: Cái vụ Linked Table này trước đây tôi cũng vật vã với nó ở việc "Xoá linked table hiện tại".
Sẳn cái folder Data của maidinhdan, tôi viết cái hàm XoaLinkedTable(). Cái hàm này có cái lỗi là không xoá được hoàn toàn các Linked Table trong Database hiện hành. Các bạn ngâm cứu xem nguyên nhân ở đâu nhé.
Link file: https://www.mediafire.com/file/hu9yvs2gf...e.rar/file
Public Function XoaTatCaTablehienhanh()
    On Error GoTo Loi
        'Chen cac Thu tuc cua ban o day
    Dim dbHienHanh As DAO.Database, i As Integer
    Set dbHienHanh = CurrentDb
    Dim TableHienHanh As String
    'Duyet lay tat ca table Access hien hanh, bao gom ca cac table dang link, ngoai tru table he thong
    For i = 0 To dbHienHanh.TableDefs.Count - 1
        If Left(dbHienHanh.TableDefs(i).Name, 4) <> "MSys" Then
        TableHienHanh = dbHienHanh.TableDefs(i).Name
            CurrentDb.TableDefs.Delete TableHienHanh
        End If
    Next i
  
    'Xoa bien khoi bo nho
      Set dbHienHanh = Nothing
    MsgBox "Da xoa tat ca table hien co, vui long khoi dong lai ung dung", vbInformation, "Thông báo"
' Doan xu ly cac loi
LoiExit:
    Exit Function
Loi:
    
    If Err = 3110 Then
        Resume LoiExit
    Else
        If Err = 3011 Then
            Resume Next
        End If
    End If
End Function 
ongke0711 > 24-03-21, 04:39 PM
(24-03-21, 03:55 PM)maidinhdan Đã viết: * Nguyên nhân Lỗi của hàm anh là do nó không thể xóa Table hệ thống/ hoặc table nó không tồn tại; như vậy phải viết thêm vài dòng để xử lý nó.
 Cái hàm của em thì anh test OK rồi. Nguyên nhân lỗi của cái hàm anh làm không phải như em nói vì:
maidinhdan > 24-03-21, 04:51 PM
(24-03-21, 04:39 PM)ongke0711 Đã viết:(24-03-21, 03:55 PM)maidinhdan Đã viết: * Nguyên nhân Lỗi của hàm anh là do nó không thể xóa Table hệ thống/ hoặc table nó không tồn tại; như vậy phải viết thêm vài dòng để xử lý nó.
Cái hàm của em thì anh test OK rồi. Nguyên nhân lỗi của cái hàm anh làm không phải như em nói vì:
- Anh có kèm điều kiện .Connect >0 --> tức chỉ chỉ có linked table mới có chuỗi .Connect, nếu table hệ thống (MSys) thì chuỗi .Connect = Null
- Trong code anh duyệt qua toàn bộ TableDef của CurrentDb thì nếu Table nào không tồn tại thì nó sẽ không có Name.
- Trong chuỗi Connect, anh có thêm điều kiện "*; DATABASE=*" mục đích chỉ xoá Linked Table nào liên quan đến CSDL Access, còn những Linked Table khác tới các CSDL khác như SQL Server, Excel, CVS... sẽ không bị xoá.
dotrung > 25-03-21, 03:20 PM
mrtoanbin > 29-03-21, 08:34 PM
HTQuang > 02-04-21, 10:22 AM
maidinhdan > 07-05-21, 03:43 PM