-
RE: Mở kết nối lại link table không cần activex Control
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
Em cảm ơn anh Bảo, cái này cũng hơi thiếu sót, nghĩ là với trình độ của anh ledangvan thì nhìn vào là biết thêm chỉnh sửa hàm này.
Không biết bài của anh Bảo(ongke) hướng dẫn như vậy anh làm được không? hay cần Demo file nửa thì em bổ sung vào. -
RE: Mở kết nối lại link table không cần activex Control
ledangvan > 08-05-17, 10:53 PM
Em cảm ơn anh Bảo, cái này cũng hơi thiếu sót, nghĩ là với trình độ của anh ledangvan thì nhìn vào là biết thêm chỉnh sửa hàm này.
Không biết bài của anh Bảo(ongke) hướng dẫn như vậy anh làm được không? hay cần Demo file nửa thì em bổ sung vào.
[/quote]
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 ... -
RE: Mở kết nối lại link table không cần activex Control
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 ...
Nếu chỉ là 2 ý này thì Code đều có trong file Văn bản điện từ 1.5.6 mà em đã gửi cho anh tham khảo.
- Modules: modLinkTable ( Lưu ý: Code này chỉ link các table mà trước đó đã link bằng tay)
- 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
Thân mến! -
RE: Mở kết nối lại link table không cần activex Control
ledangvan > 11-05-17, 12:18 PM
- 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 -
RE: Mở kết nối lại link table không cần activex Control
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
Đầ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 -
RE: Mở kết nối lại link table không cần activex Control
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
Cảm ơn Dân rất nhiều, không phải là anh không biết khi sửa bài phức tạp hơn là làm lại mới, anh là dân kế toán mà, nhiều khi làm lại tác phẩm kế toán của những người trước để lại còn đau đầu hơn là nhập lại toàn bộ.
Anh cũng nói rồi, anh là dân không chuyên nên chỉ là ghép nối các đoạn code của em và của Ongke trên cơ sở hiểu biết của anh nên cứ copy các đoạn code vào Form rồi thử.
Một lần nữa cảm ơn Dân, cảm ơn Ongke và các bạn đã giúp. -
RE: Mở kết nối lại link table không cần activex Control
ledangvan > 12-05-17, 02:51 PM
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 -
RE: Mở kết nối lại link table không cần activex Control
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
Xây dựng kịch bản gì mà lắc nhắc thế nè anh
Sửa hàm TestLinktable đoạn
Mã PHP:If aa = bb Then
Sửa thành
Mã PHP:If aa <= bb Then
-
RE: Mở kết nối lại link table không cần activex Control
ledangvan > 12-05-17, 08:11 PM
Xây dựng kịch bản gì mà lắc nhắc thế nè anh
Sửa hàm TestLinktable đoạn
Mã PHP:If aa = bb Then
Sửa thành
[/quote]Mã PHP:If aa <= bb Then
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 ... -
RE: Mở kết nối lại link table không cần activex Control
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 ...
Để không xóa table thì anh sửa chút xíu trong đoạn code của Function TaoLinkTable(). Chỉ xóa những table nào là Linked table thôi (tabledefs.Connect >0).
---------------------
...
If KiemtraTableTontai(DatTenLinkTable) Then
If Len(CurrentDb.TableDefs(DatTenLinkTable).Connect) > 0 Then
CurrentDb.TableDefs.Delete DatTenLinkTable
End If
End If
...