LẤY DỮ LIỆU TỰ NGUỒN VÀO LISTBOX
Xin Chào Các Anh Chị GPE,
Em có một thắc mắc mong anh chị hỗ trợ giúp.
Mục đích là muốn lấy dữ liệu từ server SQL thẳng xuống Listbox.code của em bên dưới mà nó chỉ lấy có dòng tiêu đề mà không phải là hàng ngang mà chỉ có 1 cột
Rất chờ sự giúp đỡ của anh chị. xin cảm ơn ạ,
Private Sub CommandButton2_Click() Dim i As Long, k As Long Dim lArr() Dim cnnDb As New cnnDatabase Set cnnDb = New cnnDatabase cnnDb.Get_Record ("SELECT A.ORDNO, A.REFNO, A.FITEM, A.FDESC, A.ITCL, A.ORQTY, A.QTDEV, A.QTYRC, (A.ORQTY+ A.QTDEV-A.QTYRC) AS OPEN,A.SSTDT, A.ODUDT, A.JOBNO, A.OSTAT " & _ "FROM G20ACF9V.AMFLIBW.MOMAST A " & _ "WHERE substr(A.ORDNO,1,2) = 'MS' " & _ "ORDER BY A.REFNO,A.ODUDT") With ListBox1 For i = 0 To cnnDb.adors.Fields.Count - 1 .AddItem .List(k) = cnnDb.adors.Fields(i).Name k = k + 1 Next i End With msgbox "Done" End Sub2760
For i = 0 To cnnDb.adors.Fields.Count – 1
.AddItem .List(k) = cnnDb.adors.Fields(i).Name
k = k + 1
Next i
Code này là code lấy tên cột của bảng rồi đưa vào ListBox là đúng rồi. Nhưng tôi chưa thấy thêm code đưa dữ liệu vào.
Bạn thử gán dữ liệu đó vào mảng (Mảng KQ ) rồi sau đó nạp vào listbox .Với lại trong listbox có phần chỉnh số code hiện thị nữa
.ColumnCount = 'bao nhiêu cột .List() = KQ
Nạp như bạn thì phải xoay mảng lại nữa mới đạt yêu cầu nhé.
Dạ em làm vậy mà cũng hong được hic
With ListBox1 ReDim lArr(1 To 1, 1 To col) For i = 0 To cnnDb.adors.Fields.Count - 1 lArr(1, k) = cnnDb.adors.Fields(i).Name k = k + 1 Next i For i = 1 To UBound(lArr, 2) .AddItem .List = Application.WorksheetFunction.Transpose(lArr) Next i End With
Gán thẳng mảng nó vào thuộc tính .Column luôn là được. Không cần chuyển mảng nha bạn.
Bỏ hết đi rồi thử 1 dòng này
ListBox1.List()= Application.WorksheetFunction.Transpose(lArr)Chú ý phải chỉnh Listbox1.ColumnCount= <số cột cần chứa trước đã>
Xem kỹ kết quả, Sau đó nếu muốn thêm tiêu đề
Thì xem lại cách AddItem cơ bản vào listbox lần lượt thế nào
Nên dùng cách bài 5 tôi đã giới thiệu sẽ khỏi chuyển mảng. Hàm chuyển mảng trên sẽ bị lỗi trong vài trường hợp.
Bài đó nhằm mục tiêu cho người hỏi hiểu về .List()
Đúng là nếu lỗi với transpose thì nên tự xây dựng hàm Transpose trong VBA cho gọnThử gán bằng -1 xem.
Không có điều kiện thử, để người hỏi thử và phản hồi nhé
Em thử như vầy nó ra nè. nhưng không biết có bị ảnh hưởng gì không nếu chạy máy khác ạ.
Private Sub CommandButton2_Click() Dim i As Long, rCol As Long Dim getArray As Variant Dim cnnDb As New cnnDatabase Set cnnDb = New cnnDatabase cnnDb.Get_Record ("SELECT A.ORDNO, A.REFNO, A.FITEM, A.FDESC, A.ITCL, A.ORQTY, A.QTDEV, A.QTYRC, (A.ORQTY+ A.QTDEV-A.QTYRC) AS OPEN,A.SSTDT, A.ODUDT, A.JOBNO, A.OSTAT " & _ "FROM G20ACF9V.AMFLIBW.MOMAST A " & _ "WHERE substr(A.ORDNO,1,2) = 'MS' " & _ "ORDER BY A.REFNO,A.ODUDT") With cnnDb.adors Set .ActiveConnection = Nothing 'Disconnect the recordset. rCol = .Fields.Count getArray = .GetRows End With cnnDb.adors.Close With ListBox1 .Clear .ColumnCount = rCol .ColumnHeads = True .List = Application.Transpose(getArray) .ListIndex = -1 End With msgbox "Done" End Sub2761
Bạn vẫn dùng List, như tôi đã nói bài số 5, chắc chắn sẽ gặp lỗi nếu như bạn không dùng hàm chuyển mảng tự tạo. Tôi ví dụ bạn thử xóa 1 vài cell trống ở dữ liệu rồi chạy code thử nhé.
Dạ, không có thuộc tính .Column anh ơi. chỉ có Fields à
Bó tay toàn tập.
Hiện tại bạn có
.List = Application.Transpose(getArray)
Tức bạn đang sử dụng LIST. Mà bài #5 nói phải dùng COLUMN, tức phải là
.Column =getArray
www.giaiphapexcel.com/diendan/threads/l%E1%BA%A4y-d%E1%BB%AE-li%E1%BB%86u-t%E1%BB%B0-ngu%E1%BB%92n-v%C3%80o-listbox.153528/
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học
Tôi có bàn về tiêu đề đâu? Người ta không hiểu bài #5 nên tôi giúp họ hiểu bài #5 thôi.
Muốn có tiêu đề thực sự thì bỏ dùng List và Column đi, dùng RowSource đi. Còn nếu tiêu đề nhái thì sao lại không có tiêu đề khi dữ liệu lấy về có cả tiêu đề?
Hướng dẫn cái gì?
Khi bạn dùng .List = Application.Transpose(getArray) thì bạn có thấy cả TIÊU ĐỀ và cả DỮ LIỆU không?
Bạn phải viết code sao cho nó lấy về cả TIÊU ĐỀ và cả DỮ LIỆU – tức sao cho trong getArray có cả tiêu đề và dữ liệu. Lúc đó thì dùng
.List = Application.Transpose(getArray) hay .Column =getArray thì đều nhìn thấy cả TIÊU ĐỀ và cả DỮ LIỆU
Khi bạn không thấy tiêu đề thì đó là do trong mảng kết quả getArray không có tiêu đề chứ không do .List = Application.Transpose(getArray) mà cũng chả do .Column =getArray
Viết code sao cho trong mảng trả về getArray có cả tiêu đề. Thế thôi.
Trên GPE có hằng hà sa số code lấy về cả tiêu đề cả dữ liệu, vậy tìm đọc thôi.
Nếu muốn listbox có tiêu đề giống như khi gán rowsource hay như listview mà không muốn tự làm (giả với sử dụng thêm listbox hay labels) thì đợi microsoft cập nhật vậy (chắc có lý do gì đó mà họ không làm )