Lỗi lệnh Order by trong ADO (1 người xem)

Liên hệ QC

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

MinhKhai

Giải pháp Ếc-xào
Tham gia
16/4/08
Bài viết
941
Được thích
574
Chào các anh chị
Em có file như đính kèm, có mấy đề sau cần giúp đỡ

1. Trong code dùng ADO để lọc dữ liệu từ sheet Data, em có cài chữ ORDER BY cuối câu lệnh Query mà không thấy code chạy. Khi bỏ ORDER BY thì code chạy tốt. Cho hỏi em vướng vào lỗi gì vậy, cách xử lý thế nào ạ ?
2. Kết quả lọc có 1 số bản ghi bị chuyển sang dạng số mũ (sheet Loc, ô G120:G129). Em sử dụng Query như thế nào để chuyển những trường hợp như trên để hiện thị đầy đủ (dạng Text, Chuỗi).
3. Tại ô N8 của sheet Loc, có cái list giống Validation mà không sao xóa được. Cho em hỏi nó là cái gì và sao lại xuất hiện. (file của em mà em không rõ mình đã làm gì tạo ra nó)

Em xin cảm ơn !
 

File đính kèm

Chào các anh chị
Em có file như đính kèm, có mấy đề sau cần giúp đỡ

1. Trong code dùng ADO để lọc dữ liệu từ sheet Data, em có cài chữ ORDER BY cuối câu lệnh Query mà không thấy code chạy. Khi bỏ ORDER BY thì code chạy tốt. Cho hỏi em vướng vào lỗi gì vậy, cách xử lý thế nào ạ ?
2. Kết quả lọc có 1 số bản ghi bị chuyển sang dạng số mũ (sheet Loc, ô G120:G129). Em sử dụng Query như thế nào để chuyển những trường hợp như trên để hiện thị đầy đủ (dạng Text, Chuỗi).
3. Tại ô N8 của sheet Loc, có cái list giống Validation mà không sao xóa được. Cho em hỏi nó là cái gì và sao lại xuất hiện. (file của em mà em không rõ mình đã làm gì tạo ra nó)

Em xin cảm ơn !
1. Do có những dòng trống, dòng trống nó sắp xếp lên đầu, vùng lọc không đến vùng có dữ liệu. Bạn đưa điều kiện bỏ dòng trống nhé.

Mã:
 MyQuery = "SELECT HANG, SHCB, format(NGAY_VE,'dd/mm/yyyy'), MAWB_NO, HAWB, SO_KIEN, TRONG_LUONG FROM [Data$] where  MAWB_NO is not null order by MAWB_NO asc"
 
Ôi, em sơ ý quá. Em update lại file rồi nhé
Bài đã được tự động gộp:

1. Do có những dòng trống, dòng trống nó sắp xếp lên đầu, vùng lọc không đến vùng có dữ liệu. Bạn đưa điều kiện bỏ dòng trống nhé.

Mã:
 MyQuery = "SELECT HANG, SHCB, format(NGAY_VE,'dd/mm/yyyy'), MAWB_NO, HAWB, SO_KIEN, TRONG_LUONG FROM [Data$] where  MAWB_NO is not null order by MAWB_NO asc"
Code đã chạy như ý phần sắp xếp. Cảm ơn anh nhé
Anh có hướng dẫn gì cho 2 phần còn lại không anh ?
 
Ôi, em sơ ý quá. Em update lại file rồi nhé
Bài đã được tự động gộp:


Code đã chạy như ý phần sắp xếp. Cảm ơn anh nhé
Anh có hướng dẫn gì cho 2 phần còn lại không anh ?
Trường hợp 2 bạn có thể định dạng nó lại bằng cách sau:
Mã:
MyQuery = "SELECT HANG, SHCB, format(NGAY_VE,'dd/mm/yyyy'), MAWB_NO, format(HAWB,'0'), SO_KIEN, TRONG_LUONG FROM [Data$] where  MAWB_NO is not null order by MAWB_NO asc"
Còn trường hợp 3 tôi không thấy có validation
 
Trường hợp 2 bạn có thể định dạng nó lại bằng cách sau:
Mã:
MyQuery = "SELECT HANG, SHCB, format(NGAY_VE,'dd/mm/yyyy'), MAWB_NO, format(HAWB,'0'), SO_KIEN, TRONG_LUONG FROM [Data$] where  MAWB_NO is not null order by MAWB_NO asc"
Cách dùng hàm Format như anh gợi ý, em đã thử rồi, dữ liệu không chính xác. Em cũng thử dùng hàm Cast hay CStr đều không thành công
Như em file em đính kèm, dùng theo cách cho thêm dấu ' vào dữ liệu nguồn tại sheet Data rồi mới thực hiện Query thì kết quả mới như mong muốn.
 
Cách dùng hàm Format như anh gợi ý, em đã thử rồi, dữ liệu không chính xác. Em cũng thử dùng hàm Cast hay CStr đều không thành công
Như em file em đính kèm, dùng theo cách cho thêm dấu ' vào dữ liệu nguồn tại sheet Data rồi mới thực hiện Query thì kết quả mới như mong muốn.
Tôi đã thử format với hàm trên nó sẽ ra kết quả được đấy.
 
Câu hỏi 3: có đến 4 cái Drop Down chứ không phải 1, và không biết loại control nào (chứ không phải validation)
Để xem mặt mũi nó thì chạy code sau, muốn xoá thì gỡ comment câu lệnh cuối
Rich (BB code):
Sub repairShape()
Dim i As Long
For i = 6 To 3 Step -1
    ActiveSheet.Shapes(i).Visible = True
    ActiveSheet.Shapes(i).Top = Cells(i * 2, 8).Top
    ActiveSheet.Shapes(i).Left = 800
    'ActiveSheet.Shapes(i).Delete
Next
 
Thử chơi Power Query đi anh @MinhKhai

Em có tạo Sheet PQ, click phải chuột trong vùng có dữ liệu => refresh là xong
 

File đính kèm

File đính kèm

Lần chỉnh sửa cuối:
Câu hỏi 3: có đến 4 cái Drop Down chứ không phải 1, và không biết loại control nào (chứ không phải validation)
Để xem mặt mũi nó thì chạy code sau, muốn xoá thì gỡ comment câu lệnh cuối
Rich (BB code):
Sub repairShape()
Dim i As Long
For i = 6 To 3 Step -1
    ActiveSheet.Shapes(i).Visible = True
    ActiveSheet.Shapes(i).Top = Cells(i * 2, 8).Top
    ActiveSheet.Shapes(i).Left = 800
    'ActiveSheet.Shapes(i).Delete
Next
Ta có thể xóa mà không phải dùng code mà phải hôn Sư Phụ?
 
Đã tìm cách nhưng chưa xoá được, vì không phải các controls thường gặp
Em có cách xóa, nhưng nó hơi củ chuối chút. Tạm thời làm như sau đến khi tìm ra cách khác.
- Chọn cell chứa control đó.
- Nhấn Ctrl+X.
- Tạo sheet mới, hoặc qua sheet khác, nhấn Ctrl+V
- Trở lại sheet chứa control đó, control đó sẽ được chọn.
- Nhấn Delete là xong.
 
Em có cách xóa, nhưng nó hơi củ chuối chút. Tạm thời làm như sau đến khi tìm ra cách khác.
- Chọn cell chứa control đó.
- Nhấn Ctrl+X.
- Tạo sheet mới, hoặc qua sheet khác, nhấn Ctrl+V
- Trở lại sheet chứa control đó, control đó sẽ được chọn.
- Nhấn Delete là xong.
Lạ quá nhỉ? Lúc đó cả 4 cái drop down đều được chọn và xoá 1 phát 4 em.
 
Em có cách xóa, nhưng nó hơi củ chuối chút. Tạm thời làm như sau đến khi tìm ra cách khác.
- Chọn cell chứa control đó.
- Nhấn Ctrl+X.
- Tạo sheet mới, hoặc qua sheet khác, nhấn Ctrl+V
- Trở lại sheet chứa control đó, control đó sẽ được chọn.
- Nhấn Delete là xong.
Đúng là cách củ chuối thật, nhưng mà hiệu nghiệm :p
Bài đã được tự động gộp:

Tôi đã thử format với hàm trên nó sẽ ra kết quả được đấy.
1602753329603.png

Em gửi anh kết quả em đã kiểm tra.
Khi dùng format(HAWB,'0') kết quả truy vấn có các số cuối cùng đều là 0. Tuy nhiên dữ liệu nguồn không phải vậy
Bài đã được tự động gộp:

Attach file lên xem sao anh.

Anh thử lại File này xem sao (e bỏ thử mấy bước thừa)? như file trên máy e chạy Phè phè, đảm bảo cái món này mà vài triệu dòng ăn đứt ADO
Anh đã test và vẫn gặp lỗi như anh chụp ở #10
Không hiểu do đâu nhỉ ?
 
Lần chỉnh sửa cuối:
Đúng là cách củ chuối thật, nhưng mà hiệu nghiệm :p
Bài đã được tự động gộp:


View attachment 247489

Em gửi anh kết quả em đã kiểm tra.
Khi dùng format(HAWB,'0') kết quả truy vấn có các số cuối cùng đều là 0. Tuy nhiên dữ liệu nguồn không phải vậy
Bài đã được tự động gộp:


Anh đã test và vẫn gặp lỗi như anh chụp ở #10
Không hiểu do đâu nhỉ ?
Huhu. Hay nó bắt ae mình phải gặp nhau mới được nhỉ. Haizaa..
 
Kết quả vẫn như trước anh ạ

Dùng Format (HAWB,'0') như bác HLMT hướng dẫn là đúng rồi đó bạn.
Vấn đề là ADO sẽ tham chiếu kiểu dữ liệu ở dòng đầu tiên do đó, bạn thiết lập kiểu dữ liệu mong muốn ở dòng đầu. Đối với cột [HAWB] dùng dạng Text và bạn vô xoá cái khoảng trắng trong Cell đó đi là chạy ra kết quả đúng.
 
Em thì võ đoán ở sheet data a đang collect từ nhiều file. Mà nếu dùng PQ có lẽ ko cần bước trung gian này, group by cho kết quả luôn
 
Dùng Format (HAWB,'0') như bác HLMT hướng dẫn là đúng rồi đó bạn.
Vấn đề là ADO sẽ tham chiếu kiểu dữ liệu ở dòng đầu tiên do đó, bạn thiết lập kiểu dữ liệu mong muốn ở dòng đầu. Đối với cột [HAWB] dùng dạng Text và bạn vô xoá cái khoảng trắng trong Cell đó đi là chạy ra kết quả đúng.
Chào bạn
Mình vừa thử đi thử lại theo hướng dẫn của bạn nhưng kết quả không đúng. Kết quả vẫn như mình đã đề cập ở #16 (tuy số đã không dùng số mũ nữa nhưng các số cuối bị đổi thành 0 hết).
Bạn tải file ở #1 để chạy rồi gửi giúp mình kết quả nhé.
Cảm ơn bạn
 
Chào bạn
Mình vừa thử đi thử lại theo hướng dẫn của bạn nhưng kết quả không đúng. Kết quả vẫn như mình đã đề cập ở #16 (tuy số đã không dùng số mũ nữa nhưng các số cuối bị đổi thành 0 hết).
Bạn tải file ở #1 để chạy rồi gửi giúp mình kết quả nhé.
Cảm ơn bạn

Bạn xem file đính kèm.

Screen Shot 2020-10-27 at 9.11.55 AM.png
 

File đính kèm

Mình đã kiểm tra theo hướng dẫn của bạn nhưng nay mới có thời gian phản hồi. Đúng là cách của bạn đã cho ra kết quả như mong muốn. Cảm ơn bạn rất nhiều
Tuy nhiên mình cũng muốn nói thêm là dữ liệu trong sheet Data của file thường xuyên được cập nhật bằng cách copy dữ liệu từ 1 file khác. Sau khi copy chúng luôn tồn tại khoảng trắng vì thế kiểm soát cái này thành ra lại mất công hơn. Do đó mình chọn giải pháp chuyển dữ liệu ở sheet Data sang dạng Text trước khi tiến hành Query bằng ADO.
Một lần nữa xin cảm ơn bạn về sự nhiệt tình. Mong bạn tiếp tục hỗ trợ các thành viên mới ở GPE và TTAccesss.
 
Tuy nhiên mình cũng muốn nói thêm là dữ liệu trong sheet Data của file thường xuyên được cập nhật bằng cách copy dữ liệu từ 1 file khác. Sau khi copy chúng luôn tồn tại khoảng trắng vì thế kiểm soát cái này thành ra lại mất công hơn. Do đó mình chọn giải pháp chuyển dữ liệu ở sheet Data sang dạng Text trước khi tiến hành Query bằng ADO.

Nếu bạn làm việc với file dạng Text (CSV) thì dễ hơn. Xuất dữ liệu sang file CSV + tạo một file scheme.ini lưu thông tin định dạng các cột (lưu cùng thư mục) --> ADO sẽ lấy dữ liệu chính xác kiểu định dạng đã thiết lập.

Ví dụ:

Mã:
[testntile.csv]
ColNameHeader=True
Format=Delimited(,)
MaxScanRows=0
CharacterSet=ANSI
Col1=MaNV Integer
Col2=HoTen Text
Col3=Luong Integer

Bạn tham khảo thêm bài này: https://www.giaiphapexcel.com/diend...chạy-query-sql-trên-excel.145811/#post-942232
 

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

Back
Top Bottom