maidinhdan > 08-05-17, 04:52 PM
(08-05-17, 01:33 PM)ongke0711 Đã viết: - 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
ledangvan > 08-05-17, 10:53 PM
maidinhdan > 09-05-17, 12:47 AM
(08-05-17, 10:53 PM)ledangvan Đã viết: Cảm ơn Dân, cảm ơn Ongke từ 2 hướng dẫn của 2 bạn anh đã tạo ra một cái mở và link lại dữ liệu http://www.mediafire.com/file/s4uwih26j9...Ketnoi.rar
Tuy nhiên vẫn chưa ưng ý lắm :
- Anh muốn ở phần Taolinktable ... nó chọn tất cả các link table mà trước nó đã nối thay vì đánh từng bảng để nó kết nối.
- Khi kết nối một dữ liệu không chứa các bảng như dữ liệu mà nó cần link thì nó báo là dữ liệu không đúng ...
ledangvan > 11-05-17, 12:18 PM
maidinhdan > 12-05-17, 12:01 AM
(11-05-17, 12:18 PM)ledangvan Đã viết: - Khi kết nối một dữ liệu không chứa các bảng: thì anh mở frmLogin phần Form_Load(): Nghiên cứu đoạn code đó và chế biến lại sẽ y như ý anh muốn gồm:
+ Nó chỉ link theo đường dẫn file anh đã chọn
+ Sẽ chế ra 1 hàm so sánh table hiện tại và table ở link file anh chọn: Trùng thì cho link, không trùng thì Ngắt và báo chọn sai file
Dân ơi , anh sửa lại thì kết nối được rồi, nhưng chỉ với những File con có đúng các bảng, còn nếu không đúng thì nó báo lỗi và xóa luôn đường link
Anh muốn em chỉnh giúp anh : Khi kết nối với File không có chứa các bảng như File qui định (Không có các table đủ theo link) thì báo : Dữ liệu không đủ bảng -> Thoát luôn
File anh đã chỉnh sửa nhưng chưa được như ý muốn :
http://www.mediafire.com/file/s4uwih26j9...Ketnoi.rar
'---------------------------------------------------------------------------------------
' Procedure : TaoLinkTable
' Author : HenDan
' Date : 5/6/2017
' Purpose :
'---------------------------------------------------------------------------------------
' Khi nao hieu het code nay thi dung them may cho em chu thich Mau xanh la cay
Function TaoLinkTable(DuongdanFile As String, MatkhauFile As String, TenTablecanLink As String, DatTenLinkTable As String)
On Error GoTo Loi
Dim tdf As TableDef
Dim TestLinkTable As Boolean
Dim MyDB As Database
' ' Kiem tra xem bang co ton tai khong?
If KiemtraTableTontai(DatTenLinkTable) Then
CurrentDb.TableDefs.Delete DatTenLinkTable
End If
Set MyDB = CurrentDb
Set tdf = MyDB.CreateTableDef(DatTenLinkTable)
With tdf
.Connect = ";DATABASE=" & DuongdanFile
.SourceTableName = TenTablecanLink
End With
MyDB.TableDefs.Append tdf
CreateAttachedExit:
TaoLinkTable = TestLinkTable
Exit Function
Loi:
If Err = 3110 Then
Resume CreateAttachedExit
Else
If Err = 3011 Then
Resume Next
End If
End If
End Function
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
'---------------------------------------------------------------------------------------
' Procedure : TestLink
' Author : HenDan
' Date : 5/11/2017
' Purpose : Dùng de Link lai table da tung Link truoc do
'---------------------------------------------------------------------------------------
Function TestLink(LinkFile As String)
Dim MyDB As Database, cDB As Database
Dim i As Integer, x As Integer
Set MyDB = CurrentDb
Set cDB = DBEngine.Workspaces(0).OpenDatabase(LinkFile)
Dim a As String, b As String
Dim aa As Integer, bb As Integer
aa = 0
bb = 0
For i = 0 To MyDB.TableDefs.Count - 1
If Left(MyDB.TableDefs(i).Name, 4) <> "MSys" Then
a = MyDB.TableDefs(i).Name
aa = aa + 1
For x = 0 To cDB.TableDefs.Count - 1
If Left(cDB.TableDefs(x).Name, 4) <> "MSys" Then
b = cDB.TableDefs(x).Name
If a = b Then bb = bb + 1
End If
Next x
End If
Next i
If aa = bb Then
For i = 0 To MyDB.TableDefs.Count - 1
If Left(MyDB.TableDefs(i).Name, 4) <> "MSys" Then
a = MyDB.TableDefs(i).Name
TaoLinkTable LinkFile, "", a, a
End If
Next i
MsgBox "Lien ket du lieu lai thanh cong", vbInformation, "Thong bao"
Else
MsgBox "Lien ket that bai." & vbCrLf & "Ly do, So luong table khong trung khop." & vbCrLf & "Table he thong co: " & aa & " ; trong khi Table trong link ban chon la: " & bb, vbInformation, "Thong bao"
End If
Set MyDB = Nothing
Set cDB = Nothing
End Function
Public Function ChonFile() As String
Dim dlgopen As Object
Dim strFolder As String
Set dlgopen = Application.FileDialog(3)
strFolder = "Ban chua chon file nao ca!"
With dlgopen
If .Show = -1 Then
strFolder = .SelectedItems(1)
ChonFile = strFolder
End If
End With
End Function
Private Sub cmdChon_Click()
Me.txtDuongdanfile = ChonFile
End Sub
Private Sub cmdLinktable_Click()
TestLink (Me.txtDuongdanfile)
End Sub
ledangvan > 12-05-17, 09:20 AM
(12-05-17, 12:01 AM)maidinhdan Đã viết:(11-05-17, 12:18 PM)ledangvan Đã viết: - Khi kết nối một dữ liệu không chứa các bảng: thì anh mở frmLogin phần Form_Load(): Nghiên cứu đoạn code đó và chế biến lại sẽ y như ý anh muốn gồm:
+ Nó chỉ link theo đường dẫn file anh đã chọn
+ Sẽ chế ra 1 hàm so sánh table hiện tại và table ở link file anh chọn: Trùng thì cho link, không trùng thì Ngắt và báo chọn sai file
Dân ơi , anh sửa lại thì kết nối được rồi, nhưng chỉ với những File con có đúng các bảng, còn nếu không đúng thì nó báo lỗi và xóa luôn đường link
Anh muốn em chỉnh giúp anh : Khi kết nối với File không có chứa các bảng như File qui định (Không có các table đủ theo link) thì báo : Dữ liệu không đủ bảng -> Thoát luôn
File anh đã chỉnh sửa nhưng chưa được như ý muốn :
http://www.mediafire.com/file/s4uwih26j9...Ketnoi.rar
Đầu tiên cho phép em xả stress chút xíu trước khi tăng anh code em viết y chang anh hỏi.
1. Anh ledangvan thân mến! Anh gửi cho em sửa bài mà anh để code và form nhiều quá, không chú thích, bắt em phải rà một đống code. Đây là điều rất khó chịu khi phải ngồi sửa bài cho anh hoặc bất kỳ ai khác. Nếu để như anh thì ít nhất cũng nói rõ đang áp dụng cái form nào?, cái hàm nào? cái này anh quăng hết lên đây để hỏi chung chung.
Khi nhìn thấy anh biết em làm gì không?
Vâng, em xóa hết tất cả form, modules, chỉ chừa lại duy nhất table.
Cái này, mong anh rút kinh nghiệm sau này khi hỏi nhé anh.
2. Và đây xin gửi code + Demo : Tổng cộng triển khai 4 hàm như sau:
1. Hàm TaoLinktable
Mã PHP:'---------------------------------------------------------------------------------------
' Procedure : TaoLinkTable
' Author : HenDan
' Date : 5/6/2017
' Purpose :
'---------------------------------------------------------------------------------------
' Khi nao hieu het code nay thi dung them may cho em chu thich Mau xanh la cay
Function TaoLinkTable(DuongdanFile As String, MatkhauFile As String, TenTablecanLink As String, DatTenLinkTable As String)
On Error GoTo Loi
Dim tdf As TableDef
Dim TestLinkTable As Boolean
Dim MyDB As Database
' ' Kiem tra xem bang co ton tai khong?
If KiemtraTableTontai(DatTenLinkTable) Then
CurrentDb.TableDefs.Delete DatTenLinkTable
End If
Set MyDB = CurrentDb
Set tdf = MyDB.CreateTableDef(DatTenLinkTable)
With tdf
.Connect = ";DATABASE=" & DuongdanFile
.SourceTableName = TenTablecanLink
End With
MyDB.TableDefs.Append tdf
CreateAttachedExit:
TaoLinkTable = TestLinkTable
Exit Function
Loi:
If Err = 3110 Then
Resume CreateAttachedExit
Else
If Err = 3011 Then
Resume Next
End If
End If
End Function
2. Hàm Kiểm tra table có tồn tại không
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
3. Hàm Test LinkTable: tác dụng Dùng de Link lai table da tung Link truoc do, nếu số lượng table nguồn và đích giống nhau thì gọi hàm TaoLinktable, không giống thì thống báo
Mã PHP:'---------------------------------------------------------------------------------------
' Procedure : TestLink
' Author : HenDan
' Date : 5/11/2017
' Purpose : Dùng de Link lai table da tung Link truoc do
'---------------------------------------------------------------------------------------
Function TestLink(LinkFile As String)
Dim MyDB As Database, cDB As Database
Dim i As Integer, x As Integer
Set MyDB = CurrentDb
Set cDB = DBEngine.Workspaces(0).OpenDatabase(LinkFile)
Dim a As String, b As String
Dim aa As Integer, bb As Integer
aa = 0
bb = 0
For i = 0 To MyDB.TableDefs.Count - 1
If Left(MyDB.TableDefs(i).Name, 4) <> "MSys" Then
a = MyDB.TableDefs(i).Name
aa = aa + 1
For x = 0 To cDB.TableDefs.Count - 1
If Left(cDB.TableDefs(x).Name, 4) <> "MSys" Then
b = cDB.TableDefs(x).Name
If a = b Then bb = bb + 1
End If
Next x
End If
Next i
If aa = bb Then
For i = 0 To MyDB.TableDefs.Count - 1
If Left(MyDB.TableDefs(i).Name, 4) <> "MSys" Then
a = MyDB.TableDefs(i).Name
TaoLinkTable LinkFile, "", a, a
End If
Next i
MsgBox "Lien ket du lieu lai thanh cong", vbInformation, "Thong bao"
Else
MsgBox "Lien ket that bai." & vbCrLf & "Ly do, So luong table khong trung khop." & vbCrLf & "Table he thong co: " & aa & " ; trong khi Table trong link ban chon la: " & bb, vbInformation, "Thong bao"
End If
Set MyDB = Nothing
Set cDB = Nothing
End Function
4. Hàm Chọn file đưa link vào textbox
'---------------------------------------------------------------------------------------
' Procedure : ChonFile
' Author : HenDan
' Date : 5/11/2017
' Purpose :
'---------------------------------------------------------------------------------------
Mã PHP:Public Function ChonFile() As String
Dim dlgopen As Object
Dim strFolder As String
Set dlgopen = Application.FileDialog(3)
strFolder = "Ban chua chon file nao ca!"
With dlgopen
If .Show = -1 Then
strFolder = .SelectedItems(1)
ChonFile = strFolder
End If
End With
End Function
và code trong 1 form duy nhất là
Mã PHP:Private Sub cmdChon_Click()
Me.txtDuongdanfile = ChonFile
End Sub
Private Sub cmdLinktable_Click()
TestLink (Me.txtDuongdanfile)
End Sub
ledangvan > 12-05-17, 02:51 PM
maidinhdan > 12-05-17, 06:41 PM
(12-05-17, 02:51 PM)ledangvan Đã viết: Dân ơi anh nhờ em, trong File (chính-mẹ) theo ví dụ của anh là gồm có 2 đường link table đến File con Dtb2_Be1 -> Nếu
+ File (chính) có đủ 2 đường link trên so với File Dtb2_be1 thì nó nối được
+ File (Chính) có 2 đường link giống như Dtb2_be1 nhưng thêm vài bảng (không link) nữa thì nó báo lỗi không nối.
Anh muốn khi so sánh nó chỉ so sánh các bảng link chứ không so sách bảng Link + không link
Ví dụ : Bảng chính của anh là Dtb2 có chứa các bảng link là A và B + 2 bảng không link là D, E
Khi kết nối anh chỉ muốn nó kiểm tra là dữ liệu liên kết có chứa bảng link A và B hay không thôi chứ không cần bảng D và E
http://www.mediafire.com/file/1hfpfo4xbd...angvan.rar
If aa = bb Then
If aa <= bb Then
ledangvan > 12-05-17, 08:11 PM
If aa = bb Then
If aa <= bb Then
ongke0711 > 12-05-17, 10:07 PM
(12-05-17, 08:11 PM)ledangvan Đã viết: Hì, khôngđược Dân à, nó báo là số bảng trong hệ thống là 4 trong File link là 2 -> Lỗi
Anh chỉ muốn nó kết nối lại thôi chứ không muốn nó xóa bảng ở trong File gốc.
Anh làm một phần mềm bao gồm : Phần chạy và phần dữ liệu
Phần chạy bao gồm các bảng : Bảng không link và bảng link từ bảng dữ liệu
Nếu xử lý như Em hướng dẫn nó sẽ xóa tất cả các File trên phần chạy rồi tạo lại Link -> Như vậy một số bảng cần cho phần chạy nó xóa luôn ...