PDA

View Full Version : copy dữ liệu từ file access này sang file khác



luckyluke2828
28-07-09, 04:18 PM
Trước khi hỏi mình nói thế này: kiến thức Access của mình là tự học và trình độ có lẽ chỉ đủ để "nghịch" phần mềm của người khác thôi chứ chưa lập trình được.
Công ty mình quản lý 1 cơ sở dữ liệu bằng Access (bởi thế mình mới phải biết về nó). Trước đây, cơ sở dữ liệu này tập hợp dử liệu trong toàn quốc của Cty. Nhưng sau 1 lần thay đổi tổ chức, cơ sở dữ liệu bị tách thành 2 (một file của miền nam, 1 của miền bắc). Kết cấu giao diện gần như giống nhau (chắc ở miền bắc cũng có người "nghịch" Access như mình nên thay đổi chút ít mà không đáng kể, mình khắc phục được).
Giờ 2 miền nam bắc lại nhập vô, Mình phải nhập lại dữ liệu trong file miền bắc đó vào miền nam để thống nhất dữ liệu. Kiểu nhập liệu mà mình đang dùng là copy and paste (thủ công từng dữ liệu một ấy), mình cảm thấy chịu không nỗi nữa, vì nhiều quá mà cứ copy, paste hoài thì nhàm.
Vậy nên mình xin hỏi các bạn: nếu có 2 file của cùng một chương trình ứng dụng Access nhưng dữ liệu bên trong khác nhau (không phải khác tất cả), thì có cách nào copy dữ liệu từ file này sang file kia nhanh nhất không? Cảm ơn rất nhiều.

Hai Lúa Miền Tây
28-07-09, 04:38 PM
Có nhiều cách để nhập dữ liệu vào bảng từ 1 bảng của file khác, với điều kiện là các file này phải có cấu trúc phải giống nhau.
Nếu có thể bạn đưa ví dụ 2 bảng đó lên đây xem thử nhé.
Thân

luckyluke2828
29-07-09, 03:54 AM
cấu trúc của chúng giống nhau vì cùng một file. Mong các bạn giải đáp thắc mắc này giùm mình. Vì đây là tài liệu công ty, thật sự không tiện nếu mình đem lên diễn đàn, các bạn thông cảm

Hai Lúa Miền Tây
29-07-09, 07:25 AM
cấu trúc của chúng giống nhau vì cùng một file. Mong các bạn giải đáp thắc mắc này giùm mình. Vì đây là tài liệu công ty, thật sự không tiện nếu mình đem lên diễn đàn, các bạn thông cảm
Không phải bắt buộc bạn đưa tài tiệu lên, nhưng ít nhất bạn cũng nên đưa dữ liệu giả lập, ở đây tôi nói "giả lập" có nghĩa là không phải dử liệu thật,
Nó thì nhiều và rất dể để nói, chi bằng bạn đưa ví dụ cụ thể để còn dể cho bạn và dể cho người giúp.
Thân

ptm0412
29-07-09, 08:08 AM
Đoạn code sau bỏ vào module của file db1.mdb sẽ append dữ liệu từ db1.mdb sang db2.mdb trong thư mục D:\MyPham\Access
Tuy nhiên có 1 lỗi là chưa loại trừ các system tables (là các table ẩn do Access tạo ra), các tables này đáng lẽ phải loại ra. Code vẫn hoạt động cho các table khác.

Ngoài ra:

- Phải chắc chắn rằng đã sao lưu file
- Phải chắc chắn là tất cả table cùng tên và cùng cấu trúc
- Phải chắc chắn rằng những trường ID (Key) của tất cả các tables cả 2 file dữ liệu không có dữ liệu trùng

Những điều trên là rất cơ bản của CSDL

Nhờ mọi người hỗ trợ loại giúp các system tables.


Sub Appendtable()
Dim Tbls As AllTables
Set Tbls = CurrentData.AllTables
For Each tbl In Tbls
DoCmd.RunSQL "INSERT INTO " & tbl.Name & " IN 'D:\MyPham\Access\db2.mdb'" & Chr(10) _
& "SELECT " & tbl.Name & ".*" & Chr(10) & _
"FROM " & tbl.Name & "; "
Next
End Sub

Có 1 vấn đề là tôi không dám ignore lỗi bằng câu:
On Error Resume Next
Lý do:
- Lỗi dữ liệu trùng của trường khoá, các dòng dữ liệu trùng bị bỏ qua, không biết bị bỏ qua dòng nào.
Thậm chí nếu biết cũng không phải đơn giản.
Thí dụ trường mã KH, nếu miền Bắc và miền Nam có cùng KH và đặt cùng mã, không chỉ đơn giản là sửa mã cho khác trên 1 table, mà phải sửa mọi record liên quan trong tất cả các table liên quan (chắc chắn là có relation), và nhiều thứ khác.
Thí dụ khác là nếu trường ID là AutoNumber, thì chắc chắn là sẽ có trùng ID của mb1 và mb2

- Lỗi cấu trúc không đồng bộ, nguyên table bị bỏ qua, không biết bị bỏ qua table nào

Phải bẫy lỗi nghiêm chỉnh mới được.

cadafi
29-07-09, 10:03 AM
....... Nhờ mọi người hỗ trợ loại giúp các system tables.

Trong Access 2003 (Access 2007 em chưa kiểm chứng) những Table/Form/Query mà phần Tên (Name) bắt đầu bằng "Msys" thì được mặc định là System Object của Access.

Mọi người xem đoạn video này sẽ rõ
http://www.bluemoosetech.com/videos/tutorial-video.php?VID=vid7

ptm0412
29-07-09, 10:38 AM
Nếu vậy thì thêm điều kiện vào:


Sub Appendtable()
Dim Tbls As AllTables
Set Tbls = CurrentData.AllTables
For Each tbl In Tbls
If Left(tbl.Name, 4) <> "Msys" Then _
DoCmd.RunSQL "INSERT INTO " & tbl.Name & " IN 'D:\MyPham\Access\db2.mdb'" & Chr(10) _
& "SELECT " & tbl.Name & ".*" & Chr(10) & _
"FROM " & tbl.Name & "; "
Next
End Sub

PVT
29-10-09, 11:18 AM
Thân gửi các anh chị em trong GPE,

Mình có 2 file Access chứa dữ liệu khác nhau, muốn gộp 2 database vào 1 cho gọn & thống nhất.

Mình chưa dùng Ms Access nhiều, không thành thạo lắm, mong ACE chỉ giáo.

Rất cám ơn.
Thang

Hai Lúa Miền Tây
30-10-09, 08:34 AM
Thân gửi các anh chị em trong GPE,

Mình có 2 file Access chứa dữ liệu khác nhau, muốn gộp 2 database vào 1 cho gọn & thống nhất.

Mình chưa dùng Ms Access nhiều, không thành thạo lắm, mong ACE chỉ giáo.

Rất cám ơn.
Thang
Cho mình hỏi thêm là bạn muốn gộp như thế nào, vào chung 1 bảng hay là riêng bảng, nếu chung bảng thì dữ liệu phải đồng nhất về cấu trúc đấy nhé.
Bạn gửi 2 file đó lên xem thử nhé.

huetran972
12-01-10, 07:41 AM
Em muốn tổng hợp 2 csdl vào thành 1 csdl thì phải làm thế nào. 2 csdl này đã đồng nhất về cấu trúc. Ai bết chỉ giúp em với.

thuydung471985
27-04-10, 10:06 AM
Mình đã đọc tài liệu này nhưng vẫn chưa rõ là làm thế nào để add thêm vào .
Trường hợp của mình là : Cấu trung giống y nhau , nhưng muốn add thêm một số bản ghi từ file này sang file khác

thdanh
04-10-11, 04:29 PM
mình nhờ các bạn giúp mình cái này với. số là mình có 2 file access 1 file chứa dữ liệu và 1 file chứa form để nhập dữ số liệu vào file access chứa dữ liệu đó. Mong các bạn giúp đỡ minh với. Cảm ơn rất nhiều!