-
[Hàm] Lấy dữ liệu giữa 2 file Access có cùng cấu trúc table
trungminh > 03-10-16, 10:05 AM
Mình muốn append dữ liệu giữa 2 mdb có cùng cấu trúc thì viết code như thế nào. (nhiều người vào nhiều máy bây giờ muốn nối số liệu thành 1 table) muốn nối từ file đích vào file nguồn nhé
Xin mọi người giúp với
(ví dụ a.mdb có table b1, b.mdb cũng có table b1 mình muốn appen a.mdb table b1 vào b1 của b.mdb) -
RE: Xin giúp về code appen từ 2 file access
ongke0711 > 03-10-16, 03:40 PM
CSDL này của bạn là đã có sẳn cần xử lý hay dự định thiết kế như vậy? Nếu là dự định thì nên chọn giải pháp khác (Linked table) cho khỏi mất công nối ghép. -
RE: Xin giúp về code appen từ 2 file access
trungminh > 03-10-16, 03:48 PM
(03-10-16, 03:40 PM)ongke0711 Đã viết: CSDL này của bạn là đã có sẳn cần xử lý hay dự định thiết kế như vậy? Nếu là dự định thì nên chọn giải pháp khác (Linked table) cho khỏi mất công nối ghép.
(CSDL đã có sẵn vì nhiều máy làm) mình học được appen vào file đích được thôi bây giờ mình muốn appen từ file đích vào file nguồn (file nguồn là file đang mở). bạn có demo cả 2 loại cho mình xin với nhé -
RE: Xin giúp về code appen từ 2 file access
maidinhdan > 03-10-16, 04:10 PM
(03-10-16, 10:05 AM)trungminh Đã viết: Mình muốn append dữ liệu giữa 2 mdb có cùng cấu trúc thì viết code như thế nào. (nhiều người vào nhiều máy bây giờ muốn nối số liệu thành 1 table) muốn nối từ file đích vào file nguồn nhé
Xin mọi người giúp với
(ví dụ a.mdb có table b1, b.mdb cũng có table b1 mình muốn appen a.mdb table b1 vào b1 của b.mdb)
Bạn rất may mắn là tôi đang viết ứng dụng liên quan đến chủ đề này,
Tôi xin tặng bạn 1 hàm để bạn dùng.
Bước 1. Tạo Modules mới và chép hàm này vào, lưu với tên gì tùy bạn.
Mã PHP:Option Compare Database
'Khai bao
Public Ws As DAO.Workspace
Public db As DAO.Database
Public rst As DAO.Recordset
Public rstt As DAO.Recordset
'---------------------------------------------------------------------------------------
' Procedure/ Ten thu tuc : Ketnoi1
' Author/ Nguoi khoi tao : maidinhdan@gmail.com
' Tao tren may tinh User : DANAspireV5
' Date/ Ngay tao : 9/29/2016-22:54
' Purpose/Mo ta : Ket noi bang DAO, Ket noi theo kieu sao chep tu file nguon sang file dich - Sao chep toan bo
' Da Test voi Data 500Mb ( ung voi 1 trieu record) toc do truy xuat khoang 3phut, nen thuc te ap dung Ketnoi2 se hay hon tốc độ kết nối khoảng 5s với nhiều User truy cầp cùng 1 lúc
'---------------------------------------------------------------------------------------
Public Function Ketnoi1(TenTable As String, Duongdanfile As String)
Set Ws = DBEngine.Workspaces(0)
'Mo ket noi Data co Pass
Set db = Ws.OpenDatabase(Duongdanfile)
Set rst = db.OpenRecordset(TenTable, dbOpenDynaset)
Set rstt = CurrentDb.OpenRecordset(TenTable, dbOpenDynaset)
rst.MoveFirst
Do Until rst.EOF
' Cap nhap vao table tam
rstt.AddNew
' Duyet tu cot
For i = 0 To rst.Fields.Count - 1
rstt.Fields(i) = rst.Fields(i)
Next
rstt.Update
rst.MoveNext
Loop
rst.Close
Set db = Nothing
End Function
Ghi chú: Nếu file nguồn có pass thì thay cả cái cái dòng đó bằng: ( giả sử pass là 123)
Mã PHP:Set db = Ws.OpenDatabase(Duongdanfile, False, False, "MS Access;PWD=123")
Bước 2: Gọi hạm để sử dụng.
Tạo 1 nút Click và gọi nó ra
Cú pháp gọi:Mã PHP:Ketnoi1 "TênTable","D:\a.mdb"
+ Duongdanfile là file Nguồn nhé: "D:\a.mdb"
+ Nhớ là TênTable cả hai file phải giống nhau, kể cả cấu trúc các cột cũng phải giống:
Thân mến! -
RE: Xin giúp về code appen từ 2 file access
trungminh > 03-10-16, 07:23 PM
(03-10-16, 04:10 PM)maidinhdan Đã viết:
(03-10-16, 10:05 AM)trungminh Đã viết: Mình muốn append dữ liệu giữa 2 mdb có cùng cấu trúc thì viết code như thế nào. (nhiều người vào nhiều máy bây giờ muốn nối số liệu thành 1 table) muốn nối từ file đích vào file nguồn nhé
Xin mọi người giúp với
(ví dụ a.mdb có table b1, b.mdb cũng có table b1 mình muốn appen a.mdb table b1 vào b1 của b.mdb)
Bạn rất may mắn là tôi đang viết ứng dụng liên quan đến chủ đề này,
Tôi xin tặng bạn 1 hàm để bạn dùng.
Bước 1. Tạo Modules mới và chép hàm này vào, lưu với tên gì tùy bạn.
Mã PHP:Option Compare Database
'Khai bao
Public Ws As DAO.Workspace
Public db As DAO.Database
Public rst As DAO.Recordset
Public rstt As DAO.Recordset
'---------------------------------------------------------------------------------------
' Procedure/ Ten thu tuc : Ketnoi1
' Author/ Nguoi khoi tao : maidinhdan@gmail.com
' Tao tren may tinh User : DANAspireV5
' Date/ Ngay tao : 9/29/2016-22:54
' Purpose/Mo ta : Ket noi bang DAO, Ket noi theo kieu sao chep tu file nguon sang file dich - Sao chep toan bo
' Da Test voi Data 500Mb ( ung voi 1 trieu record) toc do truy xuat khoang 3phut, nen thuc te ap dung Ketnoi2 se hay hon tốc độ kết nối khoảng 5s với nhiều User truy cầp cùng 1 lúc
'---------------------------------------------------------------------------------------
Public Function Ketnoi1(TenTable As String, Duongdanfile As String)
Set Ws = DBEngine.Workspaces(0)
'Mo ket noi Data co Pass
Set db = Ws.OpenDatabase(Duongdanfile)
Set rst = db.OpenRecordset(TenTable, dbOpenDynaset)
Set rstt = CurrentDb.OpenRecordset(TenTable, dbOpenDynaset)
rst.MoveFirst
Do Until rst.EOF
' Cap nhap vao table tam
rstt.AddNew
' Duyet tu cot
For i = 0 To rst.Fields.Count - 1
rstt.Fields(i) = rst.Fields(i)
Next
rstt.Update
rst.MoveNext
Loop
rst.Close
Set db = Nothing
End Function
Ghi chú: Nếu file nguồn có pass thì thay cả cái cái dòng đó bằng: ( giả sử pass là 123)
Mã PHP:Set db = Ws.OpenDatabase(Duongdanfile, False, False, "MS Access;PWD=123")
Bước 2: Gọi hạm để sử dụng.
Tạo 1 nút Click và gọi nó ra
Cú pháp gọi:Mã PHP:Ketnoi1 "TênTable","D:\a.mdb"
+ Duongdanfile là file Nguồn nhé: "D:\a.mdb"
+ Nhớ là TênTable cả hai file phải giống nhau, kể cả cấu trúc các cột cũng phải giống:
Thân mến!
Bạn ơi đường dẫn file nguồn mình muốn nó không mặc định mà linh hoạt hơn thì làm thế nào
mình đưa file bạn sửa cho mình đường dẫn theo textbox
Link: http://www.mediafire.com/file/4y0j4drmmu...UPDATE.rar -
RE: Xin giúp về code appen từ 2 file access
maidinhdan > 03-10-16, 08:38 PM
(03-10-16, 07:23 PM)trungminh Đã viết:
(03-10-16, 04:10 PM)maidinhdan Đã viết: Bước 2: Gọi hạm để sử dụng.
Tạo 1 nút Click và gọi nó ra
Cú pháp gọi:Mã PHP:Ketnoi1 "TênTable","D:\a.mdb"
+ Duongdanfile là file Nguồn nhé: "D:\a.mdb"
+ Nhớ là TênTable cả hai file phải giống nhau, kể cả cấu trúc các cột cũng phải giống:
Thân mến!
Bạn ơi đường dẫn file nguồn mình muốn nó không mặc định mà linh hoạt hơn thì làm thế nào
mình đưa file bạn sửa cho mình đường dẫn theo textbox
Link: http://www.mediafire.com/file/4y0j4drmmu...UPDATE.rar
Bạn hỏi như vậy là bạn không rõ cách hoạt động của code này rồi, Code này chính là code linh động đó sư huynh.
Theo bài bạn thì sửa lại thành:Mã PHP:Ketnoi1 "b1", Me.Text11
Chỉ có vậy:
Nói túm lại hàm này phát biểu gồm 2 phần:
Mã PHP:= Ketnoi1("Tên table cần import", "Tên đường dẫn file cần import vào")
Hy vọng bấy nhiu bạn sẽ hiểu cách dùng nó. -
RE: Xin giúp về code appen từ 2 file access
trungminh > 03-10-16, 10:13 PM
(03-10-16, 08:38 PM)maidinhdan Đã viết:
(03-10-16, 07:23 PM)trungminh Đã viết:
(03-10-16, 04:10 PM)maidinhdan Đã viết: Bước 2: Gọi hạm để sử dụng.
Tạo 1 nút Click và gọi nó ra
Cú pháp gọi:Mã PHP:Ketnoi1 "TênTable","D:\a.mdb"
+ Duongdanfile là file Nguồn nhé: "D:\a.mdb"
+ Nhớ là TênTable cả hai file phải giống nhau, kể cả cấu trúc các cột cũng phải giống:
Thân mến!
Bạn ơi đường dẫn file nguồn mình muốn nó không mặc định mà linh hoạt hơn thì làm thế nào
mình đưa file bạn sửa cho mình đường dẫn theo textbox
Link: http://www.mediafire.com/file/4y0j4drmmu...UPDATE.rar
Bạn hỏi như vậy là bạn không rõ cách hoạt động của code này rồi, Code này chính là code linh động đó sư huynh.
Theo bài bạn thì sửa lại thành:Mã PHP:Ketnoi1 "b1", Me.Text11
Chỉ có vậy:
Nói túm lại hàm này phát biểu gồm 2 phần:
Mã PHP:= Ketnoi1("Tên table cần import", "Tên đường dẫn file cần import vào")
Hy vọng bấy nhiu bạn sẽ hiểu cách dùng nó.
Mình cũng mới bắt đầu học và làm phần mềm nhỏ để giảm bớt phải tính toán báo cáo thôi cảm ơn nhiều -
RE: Xin giúp về code appen từ 2 file access
jeck09nt > 04-10-16, 12:19 PM
Gửi Maidinhdan,
Nếu theo bản Demo của bạn Trungminh thì khi click chuột bao nhiêu lần thì sẽ import mấy nhiêu dữ liệu.
Giờ mình muốn :
- Nếu bảng đích rỗng thì import tất cả dữ liệu từ bảng nguồn
- Nếu bảng đích đã có dữ liệu thì chỉ import thêm những dữ liệu nào có "ngày khám" là khác nhau hoặc import theo các lựa chọn theo các trường của bảng "B1" của file đích.
Nhờ Maidinhdan hướng dẫn giúp !
Xin cám ơn. -
RE: Xin giúp về code appen từ 2 file access
maidinhdan > 04-10-16, 09:26 PM
(04-10-16, 12:19 PM)jeck09nt Đã viết: Gửi Maidinhdan,
Nếu theo bản Demo của bạn Trungminh thì khi click chuột bao nhiêu lần thì sẽ import mấy nhiêu dữ liệu.
Giờ mình muốn :
- Nếu bảng đích rỗng thì import tất cả dữ liệu từ bảng nguồn
- Nếu bảng đích đã có dữ liệu thì chỉ import thêm những dữ liệu nào có "ngày khám" là khác nhau hoặc import theo các lựa chọn theo các trường của bảng "B1" của file đích.
Nhờ Maidinhdan hướng dẫn giúp !
Xin cám ơn.
Trả lời:
Bạn chú ý 2 dòng này:
Mã PHP:Set rst = db.OpenRecordset(TenTable, dbOpenDynaset)
Set rstt = CurrentDb.OpenRecordset(TenTable, dbOpenDynaset)
Trong đó:
+ rst: là bảng Nguồn
+ rstt: là bảng đích
Vậy thì, để giải quyết thắc mắc trên ta cần thay chỗ TenTable bằng 1 đoạn code SQL của query
Câu 1. Nếu bản đích rỗng, tức là ta sẽ đếm xem rstt có dữ liệu không. Câu này quá dễ bạn có thể tự làm bằng hàm if endif ngay ở click.
Câu 2. Câu hỏi này tôi hiểu ý bạn muốn đạt được là gì ( Đó là bạn chỉ muốn import dữ liệu bản nguồn có mà bản đích chưa có phải không) nhưng cách bạn hỏi như vậy nó không rõ ràng nên tôi sẽ trả lời 2 hướng ( Lý do: Nếu lấy cột ngày khám để so sánh import nó sẽ import tầm bậy vì 1 ngày sẽ có nhiều đối tượng đến khám, ở đây ta nên chọn cột nào chưa khóa chính để So sánh thì hàm ta viết sẽ dể và gọn gàng hơn.)
Ta sẽ làm như sau: Lấy cột STT là khóa chính để so sánh nhé
Bước 1: Tao thêm table B2, y chang như thằng B1 trong file Đích ( và B2 này là file chính dùng cho chương trình, còn B1 là file Tạm)
Bước 2: Tạo query Append có tên qrB2, chèn code này vào
Mã PHP:INSERT INTO B2 ( STT, NGAYKHAM, HOVATEN, TUOI, GIOI, NGHENGHIEP )
SELECT B1.STT, B1.NGAYKHAM, B1.HOVATEN, B1.TUOI, B1.GIOI, B1.NGHENGHIEP
FROM B1
WHERE (((B1.STT) Not In (Select STT from B2)));
Bước 3: Bổ sung vào đoạn cuối cùng của Hàm Kết nối 1, đoạn code sau
Mã PHP:DoCmd.SetWarnings False
DoCmd.OpenQuery "qrB2"
Dim sql As String
sql = "DELETE * from " & TenTable
DoCmd.RunSQL sql
DoCmd.SetWarnings True
Như vậy thì Code Ketnoi1 đầy đủ là:
Mã PHP:Public Function Ketnoi1(TenTable As String, Duongdanfile As String)
Set Ws = DBEngine.Workspaces(0)
'Mo ket noi Data co Pass
Set db = Ws.OpenDatabase(Duongdanfile)
Set rst = db.OpenRecordset(TenTable, dbOpenDynaset)
Set rstt = CurrentDb.OpenRecordset(TenTable, dbOpenDynaset)
rst.MoveFirst
Do Until rst.EOF
' Cap nhap vao table tam
rstt.AddNew
' Duyet tu cot
For i = 0 To rst.Fields.Count - 1
rstt.Fields(i) = rst.Fields(i)
Next
rstt.Update
rst.MoveNext
Loop
rst.Close
Set db = Nothing
DoCmd.SetWarnings False
DoCmd.OpenQuery "qrB2"
Dim sql As String
sql = "DELETE * from " & TenTable
DoCmd.RunSQL sql
DoCmd.SetWarnings True
End Function
Để tiện cho bạn Test mình Post Demo đã sửa theo yêu cầu của bạn đây.
Ghi chú:
+ Đáp án này nó giải quyết luôn chuyện bạn nhấn 100 lần thì cũng như 1 lần.
Bạn nhấn thử sau đó lên bản nguồn thêm 1 recode hay 100 cái mới thì nó chỉ thêm vào những cái nào mới thôi
+ Table B1 trong bảng Đích là table tạm nơi không bao giờ có dữ liệu trong đó, nhưng xóa sẽ lỗi
+ Thật ra tôi không muốn tạo thêm nó vì viết quá nhiều code thì đôi khi bạn không hiểu và không thể áp dụng vào bài khác thêm nửa.
* Mình thì không thích hỏi lắc nhắc cho 1 vấn đề, Bạn cứ nghiên cứu rồi hỏi 1 lượt 100 câu cũng được. Làm phần mềm là phải đoán trước được các biến cố sẽ xảy ra trong tương lai. Vì vậy bạn nên tập làm quen như vậy sẽ rất tốt.
Thân mến! -
RE: Xin giúp về code appen từ 2 file access
Minh Tiên > 05-10-16, 11:11 AM
Chào Dân !
Tiên đang Import dữ liệu bằng cách dùng SQL ( theo bài viết của pausteigel thì phải) như sau:
1. Tạo link table từ CSQL đích vào CSDL hiện tại - Nguồn.
2. Dùng code CurrentDb.Execute "INSERT INTO tableDich(Field1, Field2,...) SELECT Field1, Field2, ... FROM tableNguon;"
3. Xóa link table.
Tiên đã test thử với table hơn 200.000 record tốc độ chỉ 10 giây (Theo code của Dân mất 26 giây ).
'- ưu điểm của SQL là:
+ Nhanh;
+ Cấu trúc table nguồn và đích ko cần giống nhau ( Chỉ cần các Field có cùng kiểu dữ liệu ).
- Nhượt:
+ Code hơi dài (Code Link, Xóa Link, SQL)
Dân cùng các Pro test lại thử có đúng ko nhé !
Thân./.