• [Demo P2] Link Table nhiều File khác nhau (Hàm ngắn gọn)
  • [Demo P2] Link Table nhiều File khác nhau (Hàm ngắn gọn)

    maidinhdan > 23-03-21, 05:43 PM

    Hôm trước có giới thiệu [Thủ Thuật] [Phần 1]Demo Link Table nhiều File khác nhau



    Demo này Code gọi phải nhớ tên table hơi phiền phức; nhất là ứng dụng có nhiều table như của anh TranThanhAn1962



    Ưu điểm: Code gọi ngắn gọn

    Mã PHP:
    Ham_TaoLinkAllTable(DuongDanFile,[Mat khau co the bo trong neu file khong co mat khau])

    =>

        Ham_TaoLinkAllTable Me.txtlinkfile1Me.txtpass            'File co Pass

        Ham_TaoLinkAllTable Me.txtlinkfile2                    ' 
    File khong Passchi can dien Link File la dc 



    Khả năng ứng dụng:

    - Áp cho tất cả phiên bản Access *.mdb hoặc *.accdb, có Pass hay không có pass cũng vậy

    - Thích hợp Link table số lượng lớn và với nhiều File Access khác nhau cùng 1 lúc

    - Trong ứng dụng có đính kèm hàm xóa tất cả table; hàm chọn File; hàm Kiểm tra sự tồn tại table để các bạn test



    * Hình minh họa:

    [Hình: demoHinh_LinkNhieuTable_Phan2.png]


    Code:
    Mã PHP:
    ' --------------------------------------------------------------------------------------------------------
    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.DatabaseAs 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 dinhcac dong mau xanh la cay de Admin Test thoikhi dung hay bo di
        Dim dbKhac 
    As DAO.Database  ', i As Integer
    '
        Dim DuongDanFile As StringMatkhauFile 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 khongKhac thi xoaKhong thi bo qua
            
    If KiemtraTableTontai(TableKhacThen  '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 taise 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 


    Ai cần xin để lại email
  • RE: [Phần 2]Demo Link Table nhiều File khác nhau (Hàm ngắn gọn)

    ledangvan > 23-03-21, 05:54 PM

    Cho anh xin với nhé : Ledangvan06@gmail.com
    Anh cảm ơn nhiều
  • RE: [Phần 2]Demo Link Table nhiều File khác nhau (Hàm ngắn gọn)

    ongke0711 > 24-03-21, 12:58 PM

    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


    Hàm Xoá chỉ đơn giản như sau:

    Mã PHP:
    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àyse 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 
  • RE: [Phần 2]Demo Link Table nhiều File khác nhau (Hàm ngắn gọn)

    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


    Hàm nó đây: Anh xem xem, xóa hết được không?

    Mã PHP:
    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 hanhbao gom ca cac table dang linkngoai tru table he thong
        
    For 0 To dbHienHanh.TableDefs.Count 1
            
    If Left(dbHienHanh.TableDefs(i).Name4) <> "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 

    * 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ó.
    *cCode LinkTable trên là phương pháp so sánh để xóa table; nó không anh hưởng table hiện hành mà sẽ so sánh data chọn có table nào ---> xét table hiện hành có không? có-- thì xóa; không thì tạo mới; Về trình tự nó hơi khác với hàm của anh.
    Anh test hàm em xem sao?
  • RE: [Phần 2]Demo Link Table nhiều File khác nhau (Hàm ngắn gọn)

    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ó.

    007 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á.

    Vấn đề là khi chạy lệnh xoá, nó không xoá hoàn toàn mà vẫn còn sót lại vài Table, chạy 2 lần thì mới xoá hết. Vậy có thể là cái TableDefs Collection khi thực hiện xoá 1 phần tử trong nó, nó có thể cập nhật, sắp xếp lại hay sao đó mà dẫn đến cái danh sách Table bị thay đổi, không xoá hết. Trong trường hợp này anh dùng Delete Object thì lại được nhưng tốc độ sẽ không bằng TableDef.Delete". Nói chung là cũng chưa biết chính xác nguyên nhân gây lỗi này. 021
  • RE: [Phần 2]Demo Link Table nhiều File khác nhau (Hàm ngắn gọn)

    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ó.

    007 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á.

    Vâng, Vậy code em và anh như nhau rồi: nó đúng với code xóa table trong hàm Linktable rồi; còn code xóa vừa post trên thì sẽ xóa tất cả, không quan tâm nó kết nối đến cái file nào!
    Anh thử đưa hàm Link table của em vào ứng dụng Test xem?
  • RE: [Phần 2]Demo Link Table nhiều File khác nhau (Hàm ngắn gọn)

    dotrung > 25-03-21, 03:20 PM

    Không biết ứng dụng sài được trong AirLiveDrive không nhỉ? mọi người đã text tốc độ link chưa?

    Nhờ anh Dân cho dotrung xin file nghiên cứu nhé, xin cảm ơn !
    Email : trungpkv@gmail.com
  • RE: [Phần 2]Demo Link Table nhiều File khác nhau (Hàm ngắn gọn)

    mrtoanbin > 29-03-21, 08:34 PM

    em xin ứng dụng nghiên cứu ạ: nguyentrungtoan0288@gmail.com
  • RE: [Phần 2]Demo Link Table nhiều File khác nhau (Hàm ngắn gọn)

    HTQuang > 02-04-21, 10:22 AM

    Cho em xin  : tkonline5555@gmail.com
    Em cảm ơn nhiều
  • RE: [Phần 2]Demo Link Table nhiều File khác nhau (Hàm ngắn gọn)

    maidinhdan > 07-05-21, 03:43 PM

    Đã gửi 3 mail trên