• Mở kết nối lại link table không cần activex Control
  • 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 DatabasecDB As Database
        Dim i 
    As IntegerAs Integer
        Set MyDB 
    CurrentDb
        Set cDB 
    DBEngine.Workspaces(0).OpenDatabase(LinkFile)
        Dim a As StringAs String
        Dim aa 
    As Integerbb As Integer
        aa 
    0
        bb 
    0
        
    For 0 To MyDB.TableDefs.Count 1
            
    If Left(MyDB.TableDefs(i).Name4) <> "MSys" Then
                a 
    MyDB.TableDefs(i).Name
                aa 
    aa 1
                            
    For 0 To cDB.TableDefs.Count 1
                                
    If Left(cDB.TableDefs(x).Name4) <> "MSys" Then
                                b 
    cDB.TableDefs(x).Name
                                
    If b Then bb bb 1
                                End 
    If
                            Next x
            End 
    If
        Next i
        
    If aa bb Then
           
    For 0 To MyDB.TableDefs.Count 1
            
    If Left(MyDB.TableDefs(i).Name4) <> "MSys" Then
                a 
    MyDB.TableDefs(i).Name
                TaoLinkTable LinkFile
    ""aa
            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: " bbvbInformation"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 DatabasecDB As Database
        Dim i 
    As IntegerAs Integer
        Set MyDB 
    CurrentDb
        Set cDB 
    DBEngine.Workspaces(0).OpenDatabase(LinkFile)
        Dim a As StringAs String
        Dim aa 
    As Integerbb As Integer
        aa 
    0
        bb 
    0
        
    For 0 To MyDB.TableDefs.Count 1
            
    If Left(MyDB.TableDefs(i).Name4) <> "MSys" Then
                a 
    MyDB.TableDefs(i).Name
                aa 
    aa 1
                            
    For 0 To cDB.TableDefs.Count 1
                                
    If Left(cDB.TableDefs(x).Name4) <> "MSys" Then
                                b 
    cDB.TableDefs(x).Name
                                
    If b Then bb bb 1
                                End 
    If
                            Next x
            End 
    If
        Next i
        
    If aa bb Then
           
    For 0 To MyDB.TableDefs.Count 1
            
    If Left(MyDB.TableDefs(i).Name4) <> "MSys" Then
                a 
    MyDB.TableDefs(i).Name
                TaoLinkTable LinkFile
    ""aa
            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: " bbvbInformation"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
    Mã PHP:
    If aa <= bb Then 
    [/quote]

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