Đánh giá chủ đề:
  • 5 Votes - 2.6 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Tùy chọn liên kết đến file Data
#1
Mình có một vấn đề như thế này nhé :
Hiện tại mình đã viết xong một chương trình kế toán phục vụ cho công việc của mình. Có một điều mình muốn áp dụng cho nhiều doanh nghiệp, mỗi doanh nghiệp một file .mdb thấy không hay lắm. Bây giờ mình muốn : trong thư mục D:\KeToan có file ChuongTrinh.mdb (Là chương trình chính), mỗi một doanh nghiệp dữ liệu chứa riêng một file mdb khác ví dụ như Data01, Data02, Data03... (Chỉ có Table thôi). Mình muốn các bạn giúp mình thiết kế một form (trước khi giao diện của chương trình hiện lên) form này hiện lên danh sách các Data có trong thư mục cùng với ChuongTrinh.mdb để cho mình chọn Data… khi đó chương trình sẽ tự liên kết đến Data mà mình đã chọn. Mình trình bày như vậy các bạn có hiểu không ? Mình rất cần sự giúp đỡ. Cám ơn các bạn nhiều, mong được hồi âm !
Tên : Đỗ Quang Lãm
Email : dqlambli@yahoo.com.vn
Chữ ký của DoquangLam Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Reply
Những người đã cảm ơn
#2
Để làm được như bạn, đầu tiên bạn phải làm được những việc sau:
1/ Liệt kê tên những table nào cần liên kết.
2/Lấy về đường dẫn file Data cũa bạn
3/ Gọi 1 đoạn code cho phép bạn xóa table đang link, và link lại tới file mới!

Bước 1: bạn tự viết ra giấy nhé
Bước 2:
Để chọn được file, bạn phải khai báo bộ thư viện của Office bằng cách vào cửa sổ VBA, Menu Tool--> references, chọn Microsoft Office 11.0 library. (chọn 10.0 với AccessXP).
[Hình: OfficeLib.JPG]

Tạo tạo 1 module và copy 2 đoạn code sau vào:

Code 1 dùng gọi hộp chọn file:
Mã PHP:
Function getFile(Tit As StringformatName As StringformatType As String)
Dim dlgOpen As FileDialog
Set dlgOpen 
Application.FileDialog(msoFileDialogOpen)
With dlgOpen
    
.Title Tit
    
.Filters.Clear
    
.Filters.Add formatNameformatType
    
.AllowMultiSelect False
    result 
= .Show
    
If (result <> 0Then
getFile 
Trim(dlgOpen.SelectedItems.Item(1))
End If
End With

End 
Function 




Code 2: Dùng Relink table lại
Mã PHP:
Sub LinkTable(As Stringpath As String)
' kiêÒm tra table, nêìu coì rôÌi thiÌ xoìa ði
On Error GoTo Err

DoCmd.DeleteObject acTable, T
Err:
'
link lai tablelink moi
DoCmd
.TransferDatabase acLink"Microsoft Access"pathacTableTT
End Sub 

Xong phần chuẩn bị code, giờ bạn tạo 1 Form, trên form vẽ 1 textbox tên là txtPath, 1 nút nhấn tên là cmdOpen, 1 nút nhấn tên là cmdreLink

Sự kiệnc click của cmdOpen nhập như sau:
Mã PHP:
Private Sub cmdOpen_Click()
txtPath.Value getFile("Select Data File""data file""*.mdb")
End Sub 

Sự kiện click của cmdOpen, nhập vào như sau:
Mã PHP:
Private Sub cmdreLink_Click()
LinkTable "tblKhachhang"txtPath
LinkTable 
"tblTiendien"txtPath
LinkTable 
"tblTienNuoc"txtPath
 
'Sửa tên các table tương ứng thành của bạn
msgbox " Đã nhập thành công dữ liệu  file " & txtpath
End Sub 
[Hình: chonfiledata.png]

Demo Download:
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#3
Noname ơi, Trong Table mình có hàng trăm table cũng phải liệt kê để liên kết hả. Có cách nào cho tự động copy Table từ chương trình gốc ra không.
Noname ơn, trong Table mình có hàng trăm table thì cũng phải liệt kê hết hả, có cách nào cho tự copy từ mdb gốc ra thành data mới không (Chỉ copy table thôi. Rất cám ơn.
Chữ ký của DoquangLam Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Reply
Những người đã cảm ơn
#4
hàng trăm thì có hề gì, Copy dòng lệnh rồi paster thôi mà!
Thực ra cho scan toàn bộ các table trong hệ thống cũng được cũng được, nhưng nhiều khi nó nhầm với các table tạm của bạn, đồng thời nhầm các table của hệ thống nên file của bạn sẽ lỗi, sau này bạn sẽ không phát triển được chương trình.
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#5
Cám ơn noname nhiều để mình thực hành nhé. Có gì vướng mắc mong bạn giúp đỡ nhé
Chữ ký của DoquangLam Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Reply
Những người đã cảm ơn
#6
Hoan nghênh bạn ghé thăm diễn đàn! happy
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn thucgia
#7
(29-08-10, 05:08 PM)DoquangLam Đã viết: Noname ơi, Trong Table mình có hàng trăm table cũng phải liệt kê để liên kết hả. Có cách nào cho tự động copy Table từ chương trình gốc ra không.
Chọn File thì bạn làm như Noname. Còn tự động liên kết các table thì bạn có thể làm như thế này xem sao:
1. Tạo 1 table trong Chuongtrinh để chứa tên các table trong DATA mà bạn muốn liên kết. Có 2 cách: (chẳng hạn table đó có tên tblFileMDB
- Cách 1: bạn gõ tên từng table vào,
- Cách 2 tự động lấy từ file DATA. Nhưng như Noname nói: có thể nhầm với các Table của hệ thống; tuy nhiên vẫn có cách: bạn đặt tên table có một số ký tự giống nhau chẳng hạn tbl và khi lấy danh sách table thì xóa các table không có ký tự tbl đi
2. Tiến hành link table: Thực hiện theo các bước sau:
- Nếu table đó đã được link và cùng đường dẫn như txtPath không link nữa.
- Nếu table đó đã được link nhưng khác đường dẫn với txtPath, xóa link và link lại.
- Nếu tabl đó chưa được link, tiến hành link table.
Bạn tham khảo mấy đoạn code dưới đây nhé (mình có một chương trình đang dùng, nhưng bạn thông cảm không post lên được vì đã có đủ dữ liệu và có thông tin không cung cấp được, nếu xóa đi tạo DEMO thì mất nhiều thời gian quá)
* Tự động lấy table cần link từ file Data:
Mã:
Function TableLinkUpdate()
    Dim rsfilemdb As Recordset
    Dim dbdata As Database
    Dim datatbl As TableDef
    CurrentDb.Execute "Delete * from tblFileMDB"
    Set rsfilemdb = CurrentDb.OpenRecordset("tblFileMDB", dbOpenDynaset)
    Set dbdata = OpenDatabase(Getthumuc() & "\datasys\data.mdb")
    For Each datatbl In dbdata.TableDefs
        rsfilemdb.AddNew
        rsfilemdb!tableName = datatbl.Name
        rsfilemdb.Update
    Next datatbl
    Set dbdata = Nothing
    
        rsfilemdb.MoveLast
        rsfilemdb.MoveFirst
        Do Until rsfilemdb.EOF
            If InStr(1, rsfilemdb!tableName, "MSys") > 0 Then
                rsfilemdb.Delete
            End If
        rsfilemdb.MoveNext
        Loop
    
    Set rsfilemdb = Nothing
End Function
* Link lại các table:
Mã:
Sub RefreshLinkTable()
    Dim rstbl As Recordset
    Set rstbl = CurrentDb.OpenRecordset("tblFileMDB", dbOpenDynaset)
    rstbl.MoveLast
    rstbl.MoveFirst
    Do Until rstbl.EOF
        ' KiÓm tra xem ®· cã link. NÕu kh«ng cã, tiÕn hµnh link.
           If KiemtratblCurrent(rstbl!tableName) = False Then
                DoCmd.TransferDatabase acLink, "Microsoft Access", Application.CurrentProject.Path & "\data.mdb", acTable, rstbl!tableName, rstbl!tableName
            Else
        ' KiÓm tra xem Link cã ®óng ®­êng dÉn. NÕu kh«ng ®óng, link l¹i
                If getLinked(rstbl!tableName) <> Application.CurrentProject.Path & "\data.mdb" Then
                    DoCmd.DeleteObject acTable, rstbl!tableName
                    DoCmd.TransferDatabase acLink, "Microsoft Access", Application.CurrentProject.Path & "\data.mdb", acTable, rstbl!tableName, rstbl!tableName
                End If
            End If
    rstbl.MoveNext
    Loop
    rstbl.Close
    Set rstbl = Nothing
End Sub
* Code lấy đường dẫn của table đã được link:
Mã:
Function getLinked(tbl As String) As String
      getLinked = Mid(CurrentDb.TableDefs(tbl).Connect, 11)
End Function

* Code để kiểm tra xem table có hay không
Mã:
Function KiemtratblCurrent(tblName As String) As Boolean
    Dim table As TableDef
    For Each table In CurrentDb.TableDefs
    If table.Name = tblName Then
        KiemtratblCurrent = True
        Exit Function
    End If
    Next table
    KiemtratblCurrent = False
End Function

Chúc thành công

Noname có xin đoạn code lấy tất cả tên các file *.mdb trong một folder đưa vào combobox nhé.
Chữ ký của haquocquan Guest, you are welcome!
ღღღღღTài sản của haquocquan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname
#8
Trước hết mình xin cám ơn Noname đã giúp mình thực hiện được ước mơ. Tiện đây mình rất mong bạn giúp mình thêm 2 việc nữa nhé. Nếu được mình cám ơn bạn rất nhiều !

- Một là : Mình muốn bạn sửa đoạn Code mà bạn đã giúp mình liên kết đến file Data01, Data02… (Có đặt mật khẩu). Mật khẩu mình đặt là : admin
- Hai là : Trên màn hình nhập liệu của mình có các Command Button như Thêm, Sửa, Xoá, Kết thúc… Mình muốn bạn giúp mình viết Code để gắn các phím vào từng nút trên. Ví dụ như khi bấn F5 thì nút Thêm được thi hành, F6-Sửa, F7-Xoá ….

Mình gửi kèm theo 3 file để các bạn giúp mình nhé.
Cám ơn tất cả các anh, chị, em trên diễn đàn
Chữ ký của DoquangLam Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Reply
Những người đã cảm ơn
#9
Mình chỉ có thể giúp bạn từng thủ thuật riêng lẻ, còn những thứ còn lại bạn phải tự mày mò thôi!
Trong list các thủ thuật, những yêu cầu cảu bạn đều có cả rồi đấy!
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn thucgia
#10
Trước hết mình xin cám ơn Noname đã giúp mình thực hiện được ước mơ. Tiện đây mình rất mong bạn giúp mình thêm 2 việc nữa nhé. Nếu được mình cám ơn bạn rất nhiều !

- Một là : Mình muốn bạn sửa đoạn Code mà bạn đã giúp mình liên kết đến file Data01, Data02… (Có đặt mật khẩu). Mật khẩu mình đặt là : admin
- Hai là : Trên màn hình nhập liệu của mình có các Command Button như Thêm, Sửa, Xoá, Kết thúc… Mình muốn bạn giúp mình viết Code để gắn các phím vào từng nút trên. Ví dụ như khi bấn F5 thì nút Thêm được thi hành, F6-Sửa, F7-Xoá ….

Mình gửi kèm theo 3 file để các bạn giúp mình nhé.
Cám ơn tất cả các anh, chị, em trên diễn đàn


File đính kèm
.rar   KTACC48.rar (Kích cỡ: 391.67 KB / Tải về: 193)
Chữ ký của DoquangLam Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
Question [Help] Link tất các table trong một file.mdb bằng VBA MinhnHang 6 147 29-11-16, 05:18 PM
Bài mới nhất: MinhnHang
  [Hỏi] Xuất giá trị từ các Text Box ra file TXT k3nzyyb 10 537 29-06-16, 03:47 PM
Bài mới nhất: quyvt1993
  [Thủ Thuật] Liên kết dữ liệu giữa subform và mainform tvn_hut 10 798 21-05-16, 11:08 PM
Bài mới nhất: tvn_hut
  [Hỏi] Edit, Delete Record đang chọn iatod 0 186 20-02-16, 03:38 PM
Bài mới nhất: iatod
Sad [Help] Không chọn được DAO 3.6 Object conmeocon 3 754 03-07-15, 02:31 PM
Bài mới nhất: paulsteigel

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ