SQL lỗi giới hạn số code khi truy vấn 1 file excel

Liên hệ QC

linhmta

Thành viên mới
Tham gia
13/12/11
Bài viết
4
Được thích
0
KÍnh gửi các bác, em đang có 1 file excel có rất nhiều cột dữ liệu (khoảng 400-500 cột). Em một truy suất bằng vba để thuận tiện tuy nhiên khi truy xuất dữ liệu thì gặp 2 vấn đề như sau:
1. SQL hình như giới hạn số cột. cụ thể sử dụng câu lệnh:
select A1,A2 from [A1:pW4] thì thấy không được. Trong khi đó, nếu giới hạn lại: Select A1,A2 from [A1:G4] thì hoàn toàn được.
2. lọc theo điều kiện em có viết theo file bên dưới tức là
A1='1' thì lấy dữ liệu tại dòng đó. Cụ thể
select A1,A2 form [A1:G4] where A1='1'
thì trắng trơn không thấy hiện tượng gì.
Mong các bác chỉ giáo. File excel chứa code có đính kèm bên dưới. Mong các bác chỉ giáo cho em được mở rộng tầm mắt. Em kiến thức excel và SQL có thể nói bằng 0 nên sửa mãi không được.
Cảm ơn các bác ạ!
 

File đính kèm

  • lay du lieu.zip
    294.4 KB · Đọc: 5
Lần chỉnh sửa cuối:
KÍnh gửi các bác, em đang có 1 file excel có rất nhiều cột dữ liệu (khoảng 400-500 cột). Em một truy suất bằng vba để thuận tiện tuy nhiên khi truy xuất dữ liệu thì gặp 2 vấn đề như sau:
1. SQL hình như giới hạn số cột. cụ thể sử dụng câu lệnh:
select A1,A2 from [A1:pW4] thì thấy không được. Trong khi đó, nếu giới hạn lại: Select A1,A2 from [A1:G4] thì hoàn toàn được.
2. lọc theo điều kiện em có viết theo file bên dưới tức là
A1='1' thì lấy dữ liệu tại dòng đó. Cụ thể
select A1,A2 form [A1:G4] where A1='1'
thì trắng trơn không thấy hiện tượng gì.
Mong các bác chỉ giáo. File excel chứa code có đính kèm bên dưới. Mong các bác chỉ giáo cho em được mở rộng tầm mắt. Em kiến thức excel và SQL có thể nói bằng 0 nên sửa mãi không được.
Cảm ơn các bác ạ!
Bạn kiểm tra lại file đính kèm, mình ko thấy file nào cả.
1. Theo mình đc biết thì số cột truy vấn tối đa là 255 nên trường hợp của bạn > 255 thì sẽ báo lỗi hoặc ko cho ra kq (nếu bạn đã bẫy lỗi)
2. Ko có file thì ko thể check cho bạn
 
Xin lỗi bác em up lai file đính kèm!!!! bác chỉ giáo có cách nào đưa cột lên khoảng 500 không. vì dữ liệu em nó nhiều cột quá . Thanks bác nhiều nhiều!
 

File đính kèm

  • lay du lieu.zip
    294.4 KB · Đọc: 16
Lần chỉnh sửa cuối:
Xin lỗi bác em up lai file đính kèm!!!! bác chỉ giáo có cách nào đưa cột lên khoảng 500 không. vì dữ liệu em nó nhiều cột quá . Thanks bác nhiều nhiều!
Truy vấn cho bảng có 500 cột thì mình chịu, bây h mới thấy 1 bảng dữ liệu mà có nhiều cột thế này đây. Bạn tìm phương án khác coi (không dùng truy vấn, ADO)
 
Thế vụ thứ 2 bác co cách nào ko.em lọc ma ko được.lọc với dữ liệu a1=1 ấy.có thể ít cột cũng được.em nghĩ cách khắc phục tuy nhiên cũng vẫn phải giải quyết vấn đề số 2.
 
Thế vụ thứ 2 bác co cách nào ko.em lọc ma ko được.lọc với dữ liệu a1=1 ấy.có thể ít cột cũng được.em nghĩ cách khắc phục tuy nhiên cũng vẫn phải giải quyết vấn đề số 2.
Bạn coi lại bảng dữ liệu, nó phải là Sheet1$A2:I4
phần điều kiện, bạn thử 2 PA sau: A1 = 1 (ko phải A1 = '1') hoặc: A1 like '1'
 
Đồng ý bác e đã sửa được vấn đề số 2 chỉ còn vấn đề số 1: Số lượng cột quá lớn 500 dòng. Vậy thì có cách nào xử lý hay không. Em có ý tượng là chia thành 2 lần: Lần 1: select A1,A2 from [A1:IC4] và Lần 2: select A1,A2 from [IC4:pW4]. Tuy nhiên em lại gặp vấn đề là nếu vậy. Trong lần 1 đã lọc dữ liệu và copy ra file vidu: sheet dulieu thì lần 2 : select A1,A2 biết copy vào vị trí nào? trong file sheet dulieu.
Mong các bác chỉ giáo. Hoặc
có phương án mới giúp em
 
Đồng ý bác e đã sửa được vấn đề số 2 chỉ còn vấn đề số 1: Số lượng cột quá lớn 500 dòng. Vậy thì có cách nào xử lý hay không. Em có ý tượng là chia thành 2 lần: Lần 1: select A1,A2 from [A1:IC4] và Lần 2: select A1,A2 from [IC4:pW4]. Tuy nhiên em lại gặp vấn đề là nếu vậy. Trong lần 1 đã lọc dữ liệu và copy ra file vidu: sheet dulieu thì lần 2 : select A1,A2 biết copy vào vị trí nào? trong file sheet dulieu.
Mong các bác chỉ giáo. Hoặc
có phương án mới giúp em
thì bạn chèn vào mỗi bảng 1 cột (vd: ID) để liên kết 2 bảng với nhau thui.
 
Chào bạn,

Mình chưa hiểu ý của bạn lắm, dữ liệu bạn cần lấy là gì, sau lại đánh lại là A1,A2...mà không phải là F1,F2...Mình nhớ là nếu không có header thì đánh bằng F.
Trong cột STT ở Sheet1 lại chứa A1?

Theo mình thì đánh như thế này: SELECT f1,f2 FROM [Sheet1!A1:p3$] WHERE f1=1;
 
Chào bạn,

Mình chưa hiểu ý của bạn lắm, dữ liệu bạn cần lấy là gì, sau lại đánh lại là A1,A2...mà không phải là F1,F2...Mình nhớ là nếu không có header thì đánh bằng F.
Trong cột STT ở Sheet1 lại chứa A1?

Theo mình thì đánh như thế này: SELECT f1,f2 FROM [Sheet1!A1:p3$] WHERE f1=1;
ĐÚng là bạn ko hiểu câu hỏi của bạn ấy thật rùi.
 
Đồng ý bác e đã sửa được vấn đề số 2 chỉ còn vấn đề số 1: Số lượng cột quá lớn 500 dòng. Vậy thì có cách nào xử lý hay không. Em có ý tượng là chia thành 2 lần: Lần 1: select A1,A2 from [A1:IC4] và Lần 2: select A1,A2 from [IC4:pW4]. Tuy nhiên em lại gặp vấn đề là nếu vậy. Trong lần 1 đã lọc dữ liệu và copy ra file vidu: sheet dulieu thì lần 2 : select A1,A2 biết copy vào vị trí nào? trong file sheet dulieu.
Mong các bác chỉ giáo. Hoặc
có phương án mới giúp em

Câu lệnh truy vấn chạy ra kết quả như thế này:
SELECT f1,f2,f3,f4,f5,f6,f7,f8,f9 FROM [Sheet1$A1:p3] WHERE f1='2'

Còn về vấn đề thứ nhất bạn nói có thể chia thành 2 lần lấy dữ liệu với cùng đk:
1. SELECT f1,f2,f3,f4,f5,f6,f7,f8,f9 FROM [Sheet1$A1:IU4] WHERE f1='2'
f1 ở đây tương ứng với cột A
Dữ liệu copy về ô A2
2. SELECT f1,f2,f3,f4,f5,f6,f7,f8,f9 FROM [Sheet1$IV1:pW4] WHERE f1='2'
f1 ở đây tương ứng với cột IV
Dữ liệu copy về ô CL2 với CL=số cột lấy trong câu lệnh 1 cộng thêm 1
Bạn có thể dùng hàm split để tính số CL từ ds_cot trong câu lệnh 1

Chúc bạn thành công!
 
Bạn có thể giải thích dùm mình được không, đúng là mình không hiểu vì sao lại là select A1,A2... và điều kiện tại sao lại phải là A1='1'
ý mình nói là bạn chưa hiểu ý của bạn hỏi ấy. Còn vấn đề này ko biết bạn đã đọc code chưa? trong code có cho HDR = Yes tức là có lấy tên cột, nhưng trong code sai ở chỗ là lấy dữ liệu từ dòng 1 (đúng là dòng 2 có A1, A2...) mình đã nhắc bạn ấy trong bài viết trc.
 
Câu lệnh truy vấn chạy ra kết quả như thế này:
SELECT f1,f2,f3,f4,f5,f6,f7,f8,f9 FROM [Sheet1$A1:p3] WHERE f1='2'

Còn về vấn đề thứ nhất bạn nói có thể chia thành 2 lần lấy dữ liệu với cùng đk:
1. SELECT f1,f2,f3,f4,f5,f6,f7,f8,f9 FROM [Sheet1$A1:IU4] WHERE f1='2'
f1 ở đây tương ứng với cột A
Dữ liệu copy về ô A2
2. SELECT f1,f2,f3,f4,f5,f6,f7,f8,f9 FROM [Sheet1$IV1:pW4] WHERE f1='2'
f1 ở đây tương ứng với cột IV
Dữ liệu copy về ô CL2 với CL=số cột lấy trong câu lệnh 1 cộng thêm 1
Bạn có thể dùng hàm split để tính số CL từ ds_cot trong câu lệnh 1

Chúc bạn thành công!
Để kq chắc chắn thì nên join 2 bảng này, ko nên fill dữ liệu từng bảng 1.
 
Truy vấn cho bảng có 500 cột thì mình chịu, bây h mới thấy 1 bảng dữ liệu mà có nhiều cột thế này đây. Bạn tìm phương án khác coi (không dùng truy vấn, ADO)
Bạn cho mình hỏi truy vấn tối đa được bao nhiêu dòng. Mình có làm đặt 50.000 dòng thì được nhưng khi đưa lên 100.000 thì bị báo lỗi
 
Web KT
Back
Top Bottom