-
[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.txtlinkfile1, Me.txtpass 'File co Pass
Ham_TaoLinkAllTable Me.txtlinkfile2 ' File khong Pass, chi 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:
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.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
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à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 -
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 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
* 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ó.
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. -
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ó.
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