ADO không lọc được dữ liệu là Text (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

keke355992

Thành viên thường trực
Tham gia
19/1/08
Bài viết
310
Được thích
20
Nghề nghiệp
KẾ TOÁN THUẾ, TƯ VẪN THUẾ
- Xin chào các Ac trong diễn đàn
- E đang tập tành ADO, có 1 vấn đề này mún nhờ các AC xem giúp:
- Em đã ghi trong file rùi ạ. Xin cảm ơn các A/c
 

File đính kèm

ADO có cái trò vui là đoán kiểu dữ liệu của từng cột (TypeGuessRow ) . Bằng cách đọc trước vài dòng dữ liệu của cột đó xem kiểu dữ liệu là gì rồi xác định cho toàn cột . Theo mặc định khi cài Office nó sẽ đọc trước 8 dòng . Trong file của bạn 8 dòng đầu dữ liệu là number cả rồi nên toàn cột sẽ bị cho là number , dòng nào không phải number sẽ bị bỏ qua không đọc


bạn vào Run gõ regedit -> OK
vào 1 trong 2 nhánh
HKEY_LOCAL_MACHINE ► Software ► Microsoft ► Office ► 12.0 ► Access Connectivity Engine ► Engines►Excel


HKEY_CURRENT_USER ► Software ► Microsoft ► Office ► 12.0 ► Access Connectivity Engine ► Engines►Excel

(số 12.0 có thể thay đổi tùy phiên bản Office)


xem giá trị TypeGuessRow là bao nhiêu , thử sửa lại thành số 0 xem sao ?
Nhưng mà nghe nói sửa thành số 0 việc đọc dữ liệu sẽ chậm đi đấy .
 
Upvote 0
ADO có cái trò vui là đoán kiểu dữ liệu của từng cột (TypeGuessRow ) . Bằng cách đọc trước vài dòng dữ liệu của cột đó xem kiểu dữ liệu là gì rồi xác định cho toàn cột . Theo mặc định khi cài Office nó sẽ đọc trước 8 dòng . Trong file của bạn 8 dòng đầu dữ liệu là number cả rồi nên toàn cột sẽ bị cho là number , dòng nào không phải number sẽ bị bỏ qua không đọc


bạn vào Run gõ regedit -> OK
vào 1 trong 2 nhánh
HKEY_LOCAL_MACHINE ► Software ► Microsoft ► Office ► 12.0 ► Access Connectivity Engine ► Engines►Excel


HKEY_CURRENT_USER ► Software ► Microsoft ► Office ► 12.0 ► Access Connectivity Engine ► Engines►Excel

(số 12.0 có thể thay đổi tùy phiên bản Office)


xem giá trị TypeGuessRow là bao nhiêu , thử sửa lại thành số 0 xem sao ?
Nhưng mà nghe nói sửa thành số 0 việc đọc dữ liệu sẽ chậm đi đấy .
Trời, ADO này hay thật :D. E sửa thành 0 rùi, mà vẫn vậy, chắc nó mặc định vậy rùi, chỉ có cách thay đổi kiểu dữ liệu nhập vào. Cảm ơn a, chúc a ngày cuối tuần vv --=0
 
Upvote 0
Trời, ADO này hay thật :D. E sửa thành 0 rùi, mà vẫn vậy, chắc nó mặc định vậy rùi, chỉ có cách thay đổi kiểu dữ liệu nhập vào. Cảm ơn a, chúc a ngày cuối tuần vv --=0

à tôi quên ,ngoài việc đặt TypeGuessRow =0 , trong code của bạn phải sửa thêm 1 chỗ nữa mới hiển thị được text
chỗ này
Mã:
Extended Properties=Excel 8.0;
sửa thành
Mã:
Extended Properties=""Excel 8.0;[COLOR=#ff0000][B]IMEX=1[/B][/COLOR]""
 
Upvote 0
à tôi quên ,ngoài việc đặt TypeGuessRow =0 , trong code của bạn phải sửa thêm 1 chỗ nữa mới hiển thị được text
chỗ này
Mã:
Extended Properties=Excel 8.0;
sửa thành
Mã:
Extended Properties=""Excel 8.0;[COLOR=#ff0000][B]IMEX=1[/B][/COLOR]""

E thêm chỗ màu đỏ vào. Nó báo lỗi Could find Instable ISRAM a ơi -+*/
 
Upvote 0
ADO có cái trò vui là đoán kiểu dữ liệu của từng cột (TypeGuessRow ) .



xem giá trị TypeGuessRow là bao nhiêu , thử sửa lại thành số 0 xem sao ?
Nhưng mà nghe nói sửa thành số 0 việc đọc dữ liệu sẽ chậm đi đấy .
Công nhận là nó quay quay mất 1-2s thui, trc là nó chỉ chớp mắt cái thui ạ :D. Nếu sửa thành 0 mà tốc độ chậm đi thì thôi ạ, e sẽ thay đổi kiểu dữ liệu nhập vào. A đóng topic giúp em. một lần nữa cảm ơn a ạ :)
 
Upvote 0
Công nhận là nó quay quay mất 1-2s thui, trc là nó chỉ chớp mắt cái thui ạ :D. Nếu sửa thành 0 mà tốc độ chậm đi thì thôi ạ, e sẽ thay đổi kiểu dữ liệu nhập vào. A đóng topic giúp em. một lần nữa cảm ơn a ạ :)

cho biết lý do đóng topic ? chỉ có bạn mới được quyền hỏi vấn đề này còn người khác lỡ gặp vấn đề tương tự thì không được hỏi ?
ở #4 tôi nói tiếng Việt là "sửa" , tức là chỗ nào có đoạn code cần sửa thì xóa hết và copy nguyên đoạn mới vào , bạn làm khác thì sai ráng chịu . Nhưng thôi tôi cũng không muốn trao đổi với người chưa biết thì thích hỏi , biết rồi thì đòi khóa topic .
 
Upvote 0
Đáng ra, với thái độ chủ thớt tôi không thèm vào thớt này. Nhưng nghĩ lại mình khong nên giận cá chém thớt (từ thớt ở đây chỉ trùng hợp, khong có ý chơi chữ)

Toi viết đây để đề nghị bạn Chìm+Nổi (bài #7) làm thử xem:

ADO dùng OLEDB để lấy dữ liệu.
Nếu khong được chỉ dẫn thì OLEDB bắt buọc phải đoán dữ liệu. Một trong những công việc nó làm lúc đoán là vào hệ thống xem loại dữ liệu nó cần đọc được mặc định như thế nào. Đối với file Excel thì nó đọc cái phần TypeGuessRows (có 's', bạn chìm+nổi gõ thiếu ký tự này) để biết cần đọc bao nhiêu dòng thì đoán được kiểu dữ liệu. Khi giá trị này là 0 thì nó coi như phải đọc hết (đúng ra no không đọc hết, chỉ đọc đến lúc nó tự cảm thấy có thể tin tưởng). Tuy nhiên việc này cũng có vấn đề
1. vì phải thống kê kiểu dữ liệu để đoán nên hơi mất sức. Tuy nhiên không lâu lắm.
2. có thể nó vẫn đoán sai như thường
3. nếu trong dữ liệu có những chuỗi dài, có thể nó cắt lại còn 255 ký tự.

Vì vậy, để tránh vấn đề thứ 3, người ta thêm "ImportMixedTypes=Text"
Hoặc thêm 10 dòng đầu vào dữ liệu, những cột text thì đặt 1 chuỗi cỡ 1000 ký tự. Import xong thì xoá 10 dòng này. Lưu ý là 1 dòng không đủ, tối thiểu phải vài dòng.

Chú thêm: theo tôi biết, nếu ghi "TypeGuessRows=0" thẳng bên trong chuỗi kết nối thì sẽ không phải sửa registry (đâu phải máy nào cũng cho sửa registry). Tuy nhiên, hình như nó chỉ thự hiện được với ACE, chứ JET khong được.
Nếu bạn Chìm+Nổi có rảnh thì thử xem. Tôi chỉ dùng OLEDB trong phần mềm khác chứ không dùng trong VBA nên không có cơ hội thử.
 
Upvote 0
cho biết lý do đóng topic ? chỉ có bạn mới được quyền hỏi vấn đề này còn người khác lỡ gặp vấn đề tương tự thì không được hỏi ?
ở #4 tôi nói tiếng Việt là "sửa" , tức là chỗ nào có đoạn code cần sửa thì xóa hết và copy nguyên đoạn mới vào , bạn làm khác thì sai ráng chịu . Nhưng thôi tôi cũng không muốn trao đổi với người chưa biết thì thích hỏi , biết rồi thì đòi khóa topic .
Ui, E xin lỗi tất cả m.n ạ. E chỉ nói vậy thui chứ k có ý gì ạ, cũng ko để ý lời mình nói luôn. E sẽ rút kinh nghiệm ạ
 
Lần chỉnh sửa cuối:
Upvote 0
Đáng ra, với thái độ chủ thớt tôi không thèm vào thớt này. Nhưng nghĩ lại mình khong nên giận cá chém thớt (từ thớt ở đây chỉ trùng hợp, khong có ý chơi chữ)

Toi viết đây để đề nghị bạn Chìm+Nổi (bài #7) làm thử xem:

ADO dùng OLEDB để lấy dữ liệu.
Nếu khong được chỉ dẫn thì OLEDB bắt buọc phải đoán dữ liệu. Một trong những công việc nó làm lúc đoán là vào hệ thống xem loại dữ liệu nó cần đọc được mặc định như thế nào. Đối với file Excel thì nó đọc cái phần TypeGuessRows (có 's', bạn chìm+nổi gõ thiếu ký tự này) để biết cần đọc bao nhiêu dòng thì đoán được kiểu dữ liệu. Khi giá trị này là 0 thì nó coi như phải đọc hết (đúng ra no không đọc hết, chỉ đọc đến lúc nó tự cảm thấy có thể tin tưởng). Tuy nhiên việc này cũng có vấn đề
1. vì phải thống kê kiểu dữ liệu để đoán nên hơi mất sức. Tuy nhiên không lâu lắm.
2. có thể nó vẫn đoán sai như thường
3. nếu trong dữ liệu có những chuỗi dài, có thể nó cắt lại còn 255 ký tự.

Vì vậy, để tránh vấn đề thứ 3, người ta thêm "ImportMixedTypes=Text"
Hoặc thêm 10 dòng đầu vào dữ liệu, những cột text thì đặt 1 chuỗi cỡ 1000 ký tự. Import xong thì xoá 10 dòng này. Lưu ý là 1 dòng không đủ, tối thiểu phải vài dòng.

Chú thêm: theo tôi biết, nếu ghi "TypeGuessRows=0" thẳng bên trong chuỗi kết nối thì sẽ không phải sửa registry (đâu phải máy nào cũng cho sửa registry). Tuy nhiên, hình như nó chỉ thự hiện được với ACE, chứ JET khong được.
Nếu bạn Chìm+Nổi có rảnh thì thử xem. Tôi chỉ dùng OLEDB trong phần mềm khác chứ không dùng trong VBA nên không có cơ hội thử.

em sử dung ACE có thêm IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text; rồi mà không có tác dụng anh ạ . ADO vẫn xác định dựa vào giá trị trong Registry .
 
Upvote 0
Tiếc nhỉ. ADO dỏm thật
 
Upvote 0
- Vẫn là file này ạ, Giờ e chuyển tiêu đề cột thành Tiếng Việt và lọc ra như trong kiểu File. Nhưng bị báo lỗi ( Chắc là do nó không hiểu được Tiếng Việt ). E cảm ơn ạ

- P/s: A @doveandrose Htrc e có nói nhưng ko để ý lời nói của mình, mong a và mọi ng bỏ qua cho ạ :sad:
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom