Chạy câu lệnh SQL và trả về kết quả bằng ADODB
Em chào cả nhà GPE, em đang gặp vấn đề về việc lấy dữ liệu từng dòng một và theo cột tùy ý từ bảng kết quả của Recordset (bảng recordset được lấy dữ liệu từ SQL bằng cách sử dụng ADODB.Command).
Hiện tại em chỉ có thể lấy dữ liệu tất cả bảng Recordset bằng thủ tục .CopyFromRecordset.
Vì dữ liệu lấy từ SQL nên em cũng không biết phải gửi file lên đây như thế nào, do đó em hy vọng nhà mình có thể giúp đỡ em câu lệnh mẫu ạ.
Em cảm ơn.
Với rs là recordset mà bạn có được sau câu lênh truy vấn thì:
Dim rs as Object, arrTemp
arrTemp = rs.GetRows
ReDim arrRsl(1 To UBound(arrTemp, 2) + 1, 1 To UBound(arrTemp, 1) + 1)
For i = 0 To UBound(arrTemp, 2)
For j = 0 To UBound(arrTemp, 1)
arrRsl(i + 1, j + 1) = arrTemp(j, i)
Next
Next
Bạn xem cần lấy cột nào cho mảng kết quả arrRsl thì đặt điều kiện trong vòng lặp For j.
Dim rs as Object, arrTemp arrTemp = rs.GetRows ReDim arrRsl(1 To UBound(arrTemp, 2) + 1, 1 To UBound(arrTemp, 1) + 1) For i = 0 To UBound(arrTemp, 2) For j = 0 To UBound(arrTemp, 1) arrRsl(i + 1, j + 1) = arrTemp(j, i) Next NextCái này phải sửa câu lệnh SQL chứ sao lại ghi ra thế này.
Không biết thớt truy vấn như thế nào nhưng chỉ biết là thớt lấy được recordset thì chừ muốn chọn để lấy từng cột thì phải làm thế này chứ sao nữa bạn. –=0
www.giaiphapexcel.com/diendan/threads/ch%E1%BA%A1y-c%C3%A2u-l%E1%BB%87nh-sql-v%C3%A0-tr%E1%BA%A3-v%E1%BB%81-k%E1%BA%BFt-qu%E1%BA%A3-b%E1%BA%B1ng-adodb.160591/
Kỹ năng giải quyết vấn đề hiệu quả
Mô tả Nội dung Đánh giá Tài nguyên KỸ NĂNG GIẢI QUYẾT VẤN ĐỀ HIỆU QUẢHiểu đúng vấn đề là một nửa của giải...
Xem khóa học
Nguyên tắc là luôn giảm thiểu việc tải dữ liệu qua mạng, ảnh hưởng băng thông, tốc độ thực hiện. Do đó, tôi luôn chỉ lấy về dữ liệu cần thiết, không lấy dư thừa, nguyên cả table, cái nào thực hiện được ngay trên Server thì xử lý trên đó, chỉ lấy về kết quả. Chỉ khi nguyên table đó còn có thể tái sử dụng tất cả các field trong đó thì mới tải cả table.
Còn việc lọc dữ liệu theo dòng thì dùng phương thức Recordset.Filter nhé.
Where cũng được anh, tuỳ trường hợp mà dùng thôi. Dùng Filter khi có nhu cầu trả về số record ban đầu. Ví dụ như dùng trong các Form tìm kiếm, tìm xong thì bấm Show all để hiển thị tất cả.
Bạn xem cái rs đó tương đương với biến nào của bạn chứ hình như bạn dùng rs mới khai báo thì phải
Bạn phải thiết lập con trỏ lúc truy vấn dữ liệu. Đâu bạn gửi cái code của bạn xem thử nhé.
Như thớt giải thích ở bài #9, đây là gọi từ một cái SP (stored procedure). Nó cho ra gì lấy nấy. Chỉ cần biết là nó có cho đúng con số cẩn thiết thôi.
Tuy nhiên, theo nguyên tắc kết nối với Database Server thì Db Manager họ cũng cần tiết kiệm băng thông, đường nối, vv… Vì vậy, chỉ cần trình bày rõ vấn đề thì họ sẵn sàng viết cái SP khác cho.
Viết một cái SP nhanh và dễ hơn viết code VBA nhiều. Nếu mình biết cách nói chuyện thì họ sẽ vui vẻ. (Rất tiếc là hầu hết bà con ở đây đi làm việc mà không hề luyện qua kỹ năng giao tiếp)
Trừ hai trường hợp đặc biệt:
1. Db Manager lỡ sắm cái hệ thống lớn quá, khi kiểm tra họ thấy chạy dưới 40% công suất thì họ sẽ trừ điểm KPI. Người Db Manager bắt buộc phải tìm những chỗ tiêu thụ cho hết tiềm năng máy (trên 60%). Trên nguyên tắc, KPIs dùng để báo động những chỗ chưa hiệu quả. Nhưng ở VN người ta áp dụng KPIs như cái roi đe con bò phải kéo xe cật lực.
2. Tương tự như trên, nhưng ở tình huống ngược lại. Hệ thống chạy gần đến 80-90% công suất rồi. Người Db Manager muốn tìm cách cho nó sát 100% hơn để có cớ xin sắm hệ thống mới, giựt le với đào.
@thớt:
Lỡ có cái recordset rồi thì cứ việc chép ra sheet (nếu cần thì sheet tạm cũng được). Rồi sau đó dùng code filter, xóa cột,… Hoặc lại dùng ADODB lấy cột, lọc dòng. Làm vậy dễ kiểm soát dữ liệu hơn.
Có vẻ như thớt không biết cái SP mà tôi nói ở bài #15.
Tôi xin nhận sai và rút lại những lời nói về SQL Server ở bài ấy.
Vấn đề của thớt nằm ngoái khả năng tôi.