Tải dữ liệu từ Excel sang DBF

Liên hệ QC

vanlinh_2904

Thành viên hoạt động
Tham gia
20/10/12
Bài viết
105
Được thích
3
Em có file dữ liệu excel có đầy đủ các trường ở file DBF. Nhờ các anh chị giúp em viết VBA để tải dữ liệu từ file excel sang file DBF nằm ở ổ D:\dmkh.DBF, với điều kiện chỉ lấy những dòng trong file excel mà cột trường dữ liệu " Mã số thuế " không trùng với trường dữ liệu " Mã số thuế " trong file dmkh.DBF đã có.
 

File đính kèm

  • DMKH.xls
    29 KB · Đọc: 5
  • dmkh.DBF.rar
    805 bytes · Đọc: 11
Em có file dữ liệu excel có đầy đủ các trường ở file DBF. Nhờ các anh chị giúp em viết VBA để tải dữ liệu từ file excel sang file DBF nằm ở ổ D:\dmkh.DBF, với điều kiện chỉ lấy những dòng trong file excel mà cột trường dữ liệu " Mã số thuế " không trùng với trường dữ liệu " Mã số thuế " trong file dmkh.DBF đã có.
Lúc trước tôi có làm cái file xử lý file DBF nhưng bỏ dỡ vì làm biếng quá, để tôi tìm lại và thêm code xử lý tính năng này cho bạn. Các tính năng khác thì từ từ, có thời gian sẽ bổ sung sau.
 
Upvote 0
Em có file dữ liệu excel có đầy đủ các trường ở file DBF. Nhờ các anh chị giúp em viết VBA để tải dữ liệu từ file excel sang file DBF nằm ở ổ D:\dmkh.DBF, với điều kiện chỉ lấy những dòng trong file excel mà cột trường dữ liệu " Mã số thuế " không trùng với trường dữ liệu " Mã số thuế " trong file dmkh.DBF đã có.
File Excel của bạn có tên trường khác với tên trường trong file DBF nhé. Buộc phải dùng đúng tên trường trong DBF thì mới xử lý dễ dàng được. Làm việc với CSDL phải tuân thủ qui tắc của nó, không ai bỏ thời gian đi code cho việc chuyển đổi tên trường là tiếng Việt có dấu sang tương đương với tên trường nào đó trong file DBF.
CleanShot 2022-07-06 at 11.23.42@2x.jpg CleanShot 2022-07-06 at 11.19.52@2x.jpg

Về việc lấy lấy trường [MA_SO_THUE] không trùng, thì bên cạnh đó cũng phải đảm bảo trường [MA_KH] là không trùng (trong file Excel) để khi thêm vào table DBF, nó không nhảy đổng lên báo trùng khóa chính nếu [MA_KH] là khóa chính.(Sẽ có trường hợp 1 MA_KH cũ nhưng thay đổi mã số thuế --> Trùng [MA_KH] nhưng khác [MA_SO_THUE]).
 
Upvote 0
File Excel của bạn có tên trường khác với tên trường trong file DBF nhé. Buộc phải dùng đúng tên trường trong DBF thì mới xử lý dễ dàng được. Làm việc với CSDL phải tuân thủ qui tắc của nó, không ai bỏ thời gian đi code cho việc chuyển đổi tên trường là tiếng Việt có dấu sang tương đương với tên trường nào đó trong file DBF.
View attachment 278434 View attachment 278435

Về việc lấy lấy trường [MA_SO_THUE] không trùng, thì bên cạnh đó cũng phải đảm bảo trường [MA_KH] là không trùng (trong file Excel) để khi thêm vào table DBF, nó không nhảy đổng lên báo trùng khóa chính nếu [MA_KH] là khóa chính.(Sẽ có trường hợp 1 MA_KH cũ nhưng thay đổi mã số thuế --> Trùng [MA_KH] nhưng khác [MA_SO_THUE]).
Mình có gửi lại file excel theo sửa lại tên trường đúng với DBF. còn theo đúng như bạn nói trường [MA_KH] không trùng và là khóa chính, còn [MA_SO_THUE] trùng thì cảnh báo giúp giúp mình. cảm ơn bạn nhiều ạ.
 

File đính kèm

  • DMKH.xls
    29.5 KB · Đọc: 2
Upvote 0
Lúc trước tôi có làm cái file xử lý file DBF nhưng bỏ dỡ vì làm biếng quá, ...
Tôi thì mang tật lười viết code VBA.
Ba cái mớ này tôi mở file Access ra import thẳng vào một table tạm nào đó. Sau đấy chuyển qua mấy table(s) cần thiết.
 
Upvote 0
Tôi thì mang tật lười viết code VBA.
Ba cái mớ này tôi mở file Access ra import thẳng vào một table tạm nào đó. Sau đấy chuyển qua mấy table(s) cần thiết.
Đúng rồi anh. Foxpro cũng là CSDL nên dùng Linked Table của Access xử lý là phù hợp và nhanh gọn. Chỉ có mỗi vấn đề là do Foxpro DBF chỉ có 32 bit Driver nên chỉ dùng được cho Office 32 bit, khi chuyển sang Office 64 bit là nó không kết nối được. Do đó giải pháp là dùng thủ thuật kết nối thông qua COM Server (viết bằng VB6) để chạy trong một tiến trình riêng biệt (out-process service) rồi truyền kết quả vào Excel/Access 64bit. Đánh đổi lại là tốc độ và tài nguyên để chạy thêm một serice khác nhưng không đáng kể.
 
Upvote 1
Em có file dữ liệu excel có đầy đủ các trường ở file DBF. Nhờ các anh chị giúp em viết VBA để tải dữ liệu từ file excel sang file DBF nằm ở ổ D:\dmkh.DBF, với điều kiện chỉ lấy những dòng trong file excel mà cột trường dữ liệu " Mã số thuế " không trùng với trường dữ liệu " Mã số thuế " trong file dmkh.DBF đã có.
Tôi đã đưa cái yêu cầu xử lý file DBF vào cái tool đọc file DBF chung chung của tôi. Vì thiết kế chung chung nên khi có nhu cầu xử lý riêng biệt, đặc thù của từng Table thì không đưa vô được nhé. Khi đó bạn nên thiết kế một ứng dụng riêng phục vụ cho cái Foxpro database của bạn thì hợp lý hơn.
Nói chung file demo này rất nhẹ với cái COM Exe chừng 50kb + thư viện DLL mặc định của Foxpro + thư viện COM control của Microsoft (để dùng Listview).

Một số lưu ý đối với file demo này:
- File chỉ mới thiết kế với một số tính năng cơ bản nên không đáp ứng hết yêu cầu và có thể còn lỗi phát sinh.
- Vì tôi lưu nó thành Add in với các kết nối tự động nên không được sửa tên, xóa các file/ folder của nó.
- Copy toàn bộ Folder chứa Add in (ConnectDBF) vào đường dẫn: "C:\Program Files\". Do khả năng có hạn nên không tùy biến cao được.
- Chạy file [InstallAddin.vbs] với quyền Admin (Run as Administrator) -> Xong.
- Muốn gỡ Add in thì chạy file [UninstallAddin.vbs]
- File sẽ không phát triển thêm gì nhé :D .

CleanShot 2022-07-15 at 15.24.54@2x.jpg


Link file: http://www.mediafire.com/file/psxux37r9ufexqx/ConnectDBF.zip
(Có đính kèm file bên dưới)

Xem video hướng dẫn:

 

File đính kèm

  • ConnectDBF.zip
    1.5 MB · Đọc: 6
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom