LẤY DỮ LIỆU TỰ NGUỒN VÀO LISTBOX

Liên hệ QC

phuoclocvl

Thành viên thường trực
Tham gia
28/3/12
Bài viết
220
Được thích
32
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 ạ,

PHP:
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 Sub
Bài đã được tự động gộp:

 

File đính kèm

  • eg.png
    eg.png
    9.7 KB · Đọc: 15
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 ạ,

PHP:
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 Sub
Bài đã được tự động gộp:
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
Mã:
.ColumnCount = 'bao nhiêu cột
.List() = KQ
 
Lần chỉnh sửa cuối:
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
Mã:
.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é.
 
Lần chỉnh sửa cuố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.


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

PHP:
    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
 
Dạ em làm vậy mà cũng hong được hic

PHP:
    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.
 
Dạ em làm vậy mà cũng hong được hic

PHP:
    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
Bỏ hết đi rồi thử 1 dòng này
Mã:
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
 
Bỏ hết đi rồi thử 1 dòng này
Mã:
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.
 
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ọn
 
sao 1 hồi thì nó ra vậy, còn cái ruột làm sao lấy ra các anh
1608350326489.png
 
Tôi đã nói rõ là bạn không cần chuyển mảng để lấy "cái ruột" ở bài số 5. Bạn đọc kỹ lại và làm theo sẽ được.
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 ạ.

PHP:
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 Sub
1608354496560.png
 
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 ạ.

PHP:
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 Sub
View attachment 251495
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é.
 
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ạ bài số 5 là bài nào , cho em xin link với ạ. Cảm ơn Anh
 
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
hình như kiểu này không gán được tiêu đề lên luôn đó Anh
 
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
Dạ, em mới tập tành thôi, xin lỗi .
Bài đã được tự động gộp:

hình như kiểu này không gán được tiêu đề lên luôn đó Anh
Vậy để đầy đủ phải làm sao anh? Cảm ơn
 
Web KT
Back
Top Bottom