-
Tư vấn import data(đuôi csv) vào file access nguồn
subasatran > 17-07-17, 10:41 PM
Xin chào A/C/E diễn đàn Thuthuataccess.
Do vừa mới tập tành đến với access nên rất mong mọi người hướng dẫn trong việc áp dụng access trong công việc.
Mình có công việc được mô tả như bên dưới, rất mong mọi người hướng dẫn.
Vào mỗi cuối tháng, hệ thống công ty sẽ export ra khoảng 10 file data thô ở dạng *.csv theo tên được đặt như yyyymmdd_XXXX.csv(XXXX là tên file).
Nhiệm vụ của mình là xử lý trên 10 file data thô này.
Do như cầu mình muốn đưa 10 file này vào access để xử lý nhưng việc import thủ công rất mất thời gian nên mình đang tìm hiểu để import tự động bằng code VBA.
Thêm nữa, data này có nhiều người xài nên mình phải để ở ổ đĩa chung.
Và mình làm như bên dưới.
Một file access chứa data nguồn được import tự động từ 10 file data thô csv được share chung trên ở đĩa chung.
Các máy client được kết nối với data nguồn để xử lý dữ liệu.
+ Với file data nguồn, mình muốn viết code để có thể tự động đến đường dẫn mặc định tìm file import những file data cần thiêts và append vào các table có sẵn trong file data nguồn bằng một button trên form.
+ Với các máy client, mình muốn viết code để có thể kết nối và truy vấn đến data nguồn khi data nguồn được cập nhật.
Hiện tại,ý tưởng mình đang là như thế nên mong mọi người tư vấn.
Với cách trên có khả thi không ? và làm như trên cần chú ý những vấn đề gì ?
Nếu có thể, A/C/E cho em xin một vài link hướng dẫn việc import tự động bằng VBA. Cảm ơn mọi người. -
RE: Tư vấn import data(đuôi csv) vào file access nguồn
lehongduc > 18-07-17, 08:07 AM
Chào Bạn,
File CSV là file text, có phần phân loại trong tên file là CSV (Bạn gọi là đuôi CSV đó), lưu trữ danh sách theo dạng hàng / cột, có đặc điểm định dạng sau:
+ Nếu có tiêu đề cột thì dòng đầu tiên là tiêu đề các cột
+ với phân tách cột là dấu phẩy (cho tiêu đều cột và nội dung các dòng bên dưới)
Trong Access, nếu bạn muốn dùng VBA để import file CSV này ta dùng method TransferText theo cú pháp sau:
(xin tham khảo link nguồn: https://msdn.microsoft.com/VBA/Access-VB...hod-access)Mã:expression. TransferText ( TransferType, SpecificationName, TableName, FileName, HasFieldNames, HTMLTableName, CodePage )
Thí dụ: để import file tbldaanhsach.csv lưu trong folder "C:\TEMP" vào database thành bảng tblDanhsach tôi dùng câu lệnh như sau:
Trong câu lệnh trên, số 65001 chính là CodePage của Unicode UTF-8 (vì danh sách này là tiếng Việt Unicode có dấu)Mã:docmd.TransferText acImportDelim ,,"tblDanhsach","C:\TEMP\tbldanhsach.csv",true,,65001
-
RE: Tư vấn import data(đuôi csv) vào file access nguồn
subasatran > 18-07-17, 06:54 PM
(18-07-17, 08:07 AM)lehongduc Đã viết: Chào Bạn,
Rất cảm ơn lehongduc.
File CSV là file text, có phần phân loại trong tên file là CSV (Bạn gọi là đuôi CSV đó), lưu trữ danh sách theo dạng hàng / cột, có đặc điểm định dạng sau:
+ Nếu có tiêu đề cột thì dòng đầu tiên là tiêu đề các cột
+ với phân tách cột là dấu phẩy (cho tiêu đều cột và nội dung các dòng bên dưới)
Trong Access, nếu bạn muốn dùng VBA để import file CSV này ta dùng method TransferText theo cú pháp sau:
(xin tham khảo link nguồn: https://msdn.microsoft.com/VBA/Access-VB...hod-access)Mã:expression. TransferText ( TransferType, SpecificationName, TableName, FileName, HasFieldNames, HTMLTableName, CodePage )
Thí dụ: để import file tbldaanhsach.csv lưu trong folder "C:\TEMP" vào database thành bảng tblDanhsach tôi dùng câu lệnh như sau:
Trong câu lệnh trên, số 65001 chính là CodePage của Unicode UTF-8 (vì danh sách này là tiếng Việt Unicode có dấu)Mã:docmd.TransferText acImportDelim ,,"tblDanhsach","C:\TEMP\tbldanhsach.csv",true,,65001
Nhưng mình có làm đoạn code như bên dưới nhưng khi click vào button thì nó không chạy lệnh. không biết bị lỗi gì ?
Mã PHP:Private Sub Command10_Click()
DoCmd.TransferText acImportDelim, , "Table_Report", "D:\DATA\20170630_Production.csv", True, , 65001
End Sub -
RE: Tư vấn import data(đuôi csv) vào file access nguồn
duynamvnn1208 > 29-07-17, 02:20 PM
Bạn có thể sử dụng Code này:
DoCmd.TransferText acLinkDelim, , "Table_Report","D:\DATA\20170630_Production.csv", True
Để linh hoạt hơn trong việc chọn File bạn nên tạo ra một Text Box và 1 Bottom, chức năng của Bottom là mở File dialog và ghi đường link của file dialog vào Text box, sau đó ở đường dẫn D:**** ở Code trên bạn chỉ cần thay giá trị của Text box vào là Ok rồi. Có thể sử dụng để mở nhiều file bạn muốn rồi!
Một lưu ý nữa là trước khi ghi Code trên thì bạn nhớ xóa file cũ đi đã nhé.
Code bottom mình để bạn tham khảo
Mã:Private Sub example_Click()
Dim dialog As Office.FileDialog
Set dialog = Application.FileDialog(msoFileDialogFilePicker)
With dialog
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "CSVFiles", "*.csv*"
If .Show = True Then
Me.textBoxName = .SelectedItems(1)
End If
End With
End Sub -
RE: Tư vấn import data(đuôi csv) vào file access nguồn
subasatran > 01-09-17, 03:20 PM
(29-07-17, 02:20 PM)duynamvnn1208 Đã viết: Bạn có thể sử dụng Code này:
Bạn có thể cho mình một ví dụ được không ?
DoCmd.TransferText acLinkDelim, , "Table_Report","D:\DATA\20170630_Production.csv", True
Để linh hoạt hơn trong việc chọn File bạn nên tạo ra một Text Box và 1 Bottom, chức năng của Bottom là mở File dialog và ghi đường link của file dialog vào Text box, sau đó ở đường dẫn D:**** ở Code trên bạn chỉ cần thay giá trị của Text box vào là Ok rồi. Có thể sử dụng để mở nhiều file bạn muốn rồi!
Một lưu ý nữa là trước khi ghi Code trên thì bạn nhớ xóa file cũ đi đã nhé.
Code bottom mình để bạn tham khảo
Mã:Private Sub example_Click()
Dim dialog As Office.FileDialog
Set dialog = Application.FileDialog(msoFileDialogFilePicker)
With dialog
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "CSVFiles", "*.csv*"
If .Show = True Then
Me.textBoxName = .SelectedItems(1)
End If
End With
End Sub
Do mình mới làm quen access nên conment của bạn mình không hiểu và làm như vậy được