Lỗi khi lấy dữ liệu từ file CSV bằng ADO

Liên hệ QC

MinhKhai

Giải pháp Ếc-xào
Tham gia
16/4/08
Bài viết
934
Được thích
571
Chào các anh chị
Em tham khảo được đoạn code để lấy dữ liệu từ file CSV.
Ở file mẫu thì chạy tốt nhưng khi em đưa vào file của em thì báo lỗi như hình dưới. Sau vài ngày đánh vật với nó em mới nhận ra rằng tên file CSV có dấu chấm nên code báo lỗi, thay dấu chấm bằng dấu gạch ngang thì code chạy bình thường.
Vấn đề là file CSV em cần lấy dữ liệu được kết xuất từ phần mềm khác nên không thể thay đổi định dạng tên file.
Vậy nhờ các anh chị cho cách xử lý với lỗi trên để có thể dùng với tên file có dấu chấm.
Xin cảm ơn các anh chị

1597941890286.png
 

File đính kèm

  • Test.rar
    46 KB · Đọc: 19
Nếu tải file về xem rồi thì cũng nên cho biết tình hình như nào chứ chủ thớt.

Hoặc nếu chúng ta "hết mến" nhau rồi thì cũng nên nói một nhời để lần sau mình không động tới bài nào nữa.
 
Nếu tải file về xem rồi thì cũng nên cho biết tình hình như nào chứ chủ thớt.

Hoặc nếu chúng ta "hết mến" nhau rồi thì cũng nên nói một nhời để lần sau mình không động tới bài nào nữa.
Hi @befaint, cảm ơn bạn đã giúp mình rất nhiều bài khoai từ rất lâu rồi. Ở bài đầu tiên bạn còn chú thích từng dòng code cho mình. Mình vẫn thường vào Google Sites của bạn để xem kiến thức về VBA 1 cách hệ thống. Chỉ tiếc là bản thân mình như các cụ nói "Không thầy đố mày hiểu đấy" :p
Quay lại bài trên, quả thực lúc này mình mới vào xem và tải file về.
Sau khi xem code mẫu và chỉnh sửa cho phù hợp thực tế (file .csv thực tế được chia sẻ trên ổ mạng), gặp khá nhiều lỗi phát sinh do việc sửa đổi không đồng bộ, cuối cùng thì Code của bạn đã chạy tốt với tình huống thực tế của mình. Một lần nữa cảm ơn bạn rất nhiều

Tiện đây cho mình hỏi thêm

* Để dữ liệu được nhập vào file đích được sắp xếp theo cột thứ 6 (theo thứ tự tăng dần), mình có thêm đoạn ORDER BY F6. Tuy nhiên kết quả không được như mong muốn.
- Nếu để HDR=No thì dữ liệu từ file nguồn vẫn được tải về và có sắp xếp, tuy nhiên lúc này dòng header của file nguồn cũng được copy vào và bị đẩy xuống dưới làm data
- Nếu đổi HDR=YES thì xuất hiện lỗi như hình bên.

Rất mong bạn chỉ cách để xử lý việc có sắp xếp mà loại trừ dòng header của file nguồn ra


1598215857759.png



1598216269198.png
 
Thử vầy xem:

PHP:
"Select * From [" & short_name_csv & "] As T1 Order by T1.f6"
 
Thử thêm giải pháp dùng Power Query xem sao anh @MinhKhai (chắc sẽ không có j nuối tiếc)
 

Dịch để hiểu lỗi gì:


The Microsoft Access database engine could not find the object
'2020.08.20_Delivered.csv'. Make sure the object exists and that you
spell its name and the path name correctly. If
'2020.08.20_Delivered.csv' is not a local object, check your network
connection or contact the server administrator.


Công cụ cơ sở dữ liệu Microsoft Access không thể tìm thấy đối tượng
'2020.08.20_Delivered.csv'. Đảm bảo rằng đối tượng tồn tại và bạn
đánh vần tên của nó và tên đường dẫn một cách chính xác. Nếu
'2020.08.20_Delivered.csv' không phải là một đối tượng cục bộ, hãy kiểm tra mạng của bạn
kết nối hoặc liên hệ với quản trị viên máy chủ.
Bài đã được tự động gộp:

1598215857759.png
Dịch: Không có giá trị nào cho một hoặc nhiều tham số bắt buộc.

Sub GetData_CSV dư đoạn CreateObject và ShortName
dùng dấu '' để thay thế

Sử dụng F trong Query thì HDR=No
 
Lần chỉnh sửa cuối:
Thử thêm giải pháp dùng Power Query xem sao anh @MinhKhai (chắc sẽ không có j nuối tiếc)
Cảm ơn Mister Cá Ngừ. Mình đang muốn nó chạy tự động hàng ngày, mà Power Query không đáp ứng được. Power Query vẫn cần phải có bấm bấm chọn chọn.
Gần đây em có dùng Power BI không, anh xem nhiều clip trên Youtube mà giờ vẫn chưa hiểu dùng làm gì (BI Desktop, BI Mobile). Khi nào thằng Power Covid giảm thì gặp gỡ tí nhể
Bài đã được tự động gộp:

Bạn gửi file sau khi chỉnh lên nhé.
Đây bạn ơi
Minh xin nói rõ thêm:
Code ban đầu bạn hỗ trợ đã chạy, chỉ là mình suốt sắp xếp, khi sắp xếp, dòng đầu tiên của file nguồn bị copy vào và đẩy xuống xuống làm dòng dữ liệu. Mình muốn khi copy vào không có 1 dòng đầu tiên của file nguồn.
Cảm ơn bạn
 

File đính kèm

  • GPE.rar
    63.1 KB · Đọc: 9
Lần chỉnh sửa cuối:
dòng đầu tiên của file nguồn
File csv bạn gửi thì dòng đầu là dữ liệu như các dòng khác, không phải Title /Header.

1598861359865.png

Tạm thời có một cách đơn giản: Bạn record macro xóa dòng 5, rồi sort bảng theo cột F. Rồi chỉnh/chèn code đó vào sau phần lấy dữ liệu là được.
 
Dịch để hiểu lỗi gì:


The Microsoft Access database engine could not find the object
'2020.08.20_Delivered.csv'. Make sure the object exists and that you
spell its name and the path name correctly. If
'2020.08.20_Delivered.csv' is not a local object, check your network
connection or contact the server administrator.


Công cụ cơ sở dữ liệu Microsoft Access không thể tìm thấy đối tượng
'2020.08.20_Delivered.csv'. Đảm bảo rằng đối tượng tồn tại và bạn
đánh vần tên của nó và tên đường dẫn một cách chính xác. Nếu
'2020.08.20_Delivered.csv' không phải là một đối tượng cục bộ, hãy kiểm tra mạng của bạn
kết nối hoặc liên hệ với quản trị viên máy chủ.
Bài đã được tự động gộp:


Dịch: Không có giá trị nào cho một hoặc nhiều tham số bắt buộc.

Sub GetData_CSV dư đoạn CreateObject và ShortName
dùng dấu '' để thay thế

Sử dụng F trong Query thì HDR=No

Hi @HeSanbi
Thông báo của Excel "Make sure the object exists and that you spell its name and the path name correctly" đúng là rất rõ ràng, nhưng vấn đề là cái object "2020.08.20_Delivered.csv" nó đang tồn tại đúng theo đường dẫn.
Vì điều này mà có đoạn Code của Befain dùng ShortName mà bạn. Code đó đã chạy tốt. Mình chỉ muốn hỏi thêm là khi thêm lệnh sắp xếp trong code thì nó phát sinh dòng header của file nguồn như mình mô tả bên trên.
 
Tính trả lời mà sợ bị gọi mịt tờ mờ tịt quá nên thôi.

Sấm Thiền Đăng: trời mờ tịt mịt tờ bờ rao rờ bao trong kít chân kiếm chít cân.
 
File csv bạn gửi thì dòng đầu là dữ liệu như các dòng khác, không phải Title /Header.

View attachment 244558

Tạm thời có một cách đơn giản: Bạn record macro xóa dòng 5, rồi sort bảng theo cột F. Rồi chỉnh/chèn code đó vào sau phần lấy dữ liệu là được.
Sorry @befaint , file csv mình gửi đã bị thay đổi dòng Header, file gốc luôn có dòng đó..
Nếu không có yêu cầu sắp xếp thì code của bạn chạy rất mượt. Tiện trong ADO mình muốn nó sắp xếp khi copy từ Recordset ra. Cách Copy ra Cell rồi dùng VBAl sắp xếp thì không chỉ đi đường vòng mà tốc độ chắc cũng có ảnh hưởng.
Một lần nữa cảm ơn bạn
 
Mình đang muốn nó chạy tự động hàng ngày, mà Power Query không đáp ứng được
Sao lại không đáp ứng được nhỉ, cũng đều là bán tự động cả, ADO hay PQ kiểu j cũng phải có người tác động thì mới chạy được chứ ạ.
 
Tính trả lời mà sợ bị gọi mịt tờ mờ tịt quá nên thôi.
Chào bác, dùng 1 từ đó mà bị thẻ vàng thì thật buồn quá.
Bài đã được tự động gộp:

Sao lại không đáp ứng được nhỉ, cũng đều là bán tự động cả, ADO hay PQ kiểu j cũng phải có người tác động thì mới chạy được chứ ạ.
Anh dùng Task Scheduler kích hoạt file Excel với tính năng Workbook_Open mà em
 
MinhKhai
Bác ơi, đừng tự làm khổ mình.

Chuỗi nguồn đặt trong hai dấu nháy kép hoặc nháy đơn thì không cần đến Shortname

Data Source = "".../.../...csv"";
Hoặc: Data Source = '.../.../...csv';

Còn với câu lệnh Sort, bác có thể viết trong câu lệnh truy vấn SQL hoặc khi Recordset đã nhận được kết quả.

Ví dụ Sort cột 1:
RS.Sort RS.Fields(0).Name & " Desc" ' Hoặc " Asc"
 
Chào bác, dùng 1 từ đó mà bị thẻ vàng thì thật buồn quá.
...
Ở diễn đàn này chỉ có hai người trình độ SQL sánh được với tôi thôi. Nếu không chấp nhận luật sân chơi của tôi thì đợi hai người đó.

Về tiếng Anh thì ở diễn đàn này không có ai đủ để nói chuyện với tôi hết. Vì tôi dùng tiếng Anh phát ngán đến tận cổ cho nên tôi rất trọng tiếng Vệt.
 
Ở diễn đàn này chỉ có hai người trình độ SQL sánh được với tôi thôi. Nếu không chấp nhận luật sân chơi của tôi thì đợi hai người đó.

Về tiếng Anh thì ở diễn đàn này không có ai đủ để nói chuyện với tôi hết. Vì tôi dùng tiếng Anh phát ngán đến tận cổ cho nên tôi rất trọng tiếng Vệt.
Mong mỏi 1 ngày được gặp gỡ offline các cao thủ võ lâm. Những dòng code của các bác/anh quá tuyệt vời, giải quyết cơ số bài toán hóc búa
 
Web KT

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

Back
Top Bottom