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Ế
Trời, ADO này hay thậtADO 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. 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
![]()
Extended Properties=Excel 8.0;
Extended Properties=""Excel 8.0;[COLOR=#ff0000][B]IMEX=1[/B][/COLOR]""
à 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
sửa thànhMã:Extended Properties=Excel 8.0;
Mã:Extended Properties=""Excel 8.0;[COLOR=#ff0000][B]IMEX=1[/B][/COLOR]""
Công nhận là nó quay quay mất 1-2s thui, trc là nó chỉ chớp mắt cái thui ạ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 ạ. 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 ạ
![]()
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 ạ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 .
Đá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ử.