LẤY DỮ LIỆU TỰ NGUỒN VÀO LISTBOX (1 người xem)

Liên hệ QC

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

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: 17
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
 
hình như kiểu này không gán được tiêu đề lên luôn đó Anh
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 đề?
 
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 đề?
Anh hướng dẫn giúp với , Cảm ơn anh nhiều
 
Anh hướng dẫn giúp với , Cảm ơn anh nhiề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
 
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
Em dùng như này nhưng không có tiêu đề.
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
            .Column = getArray
            .ListIndex = -1
        End With

    msgbox "Done"
End Sub
 
Em dùng như này nhưng không có tiê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.
 
1/ để có 1 cái listbox có tiều đề xịn của nó thì cách sau là đơn giản nhất

1608438997547.png

2/ Còn sử dụng ADODB lấy vào 1 Arr = Rs.GetRows xong gán vào như hình trên là ko thể ...

Tuy nhiên nếu lách lấy nó gán vào 1 name xong lấy ra từ cái name đó gán vào ListBox1.RowSource = "Name" thì tạm ok ===> quá lằng nhằng

3/ còn hình sau là tây nó nói...
Capture.PNG
4/ Còn 1 cách trên GPE này là họ làm giả cái tiêu đề bài #380
Các câu hỏi về Form trong Excel VBA | Page 19 | Giải Pháp Excel (giaiphapexcel.com)

5/ File đính kèm là cho hình số 1

6/ hy vọng ai đó có thể xài ADODB lấy vào 1 Array xong gán vào listbox có 1 cái tiêu đề mà ko phải làm giả nó Or xài name phụ -0-0-0-
 

File đính kèm

Lần chỉnh sửa cuối:
1/ để có 1 cái listbox có tiều đề xịn của nó thì cách sau là đơn giản nhất

View attachment 251527

2/ Còn sử dụng ADODB lấy vào 1 Arr = Rs.GetRows xong gán vào như hình trên là ko thể ...

Tuy nhiên nếu lách lấy nó gán vào 1 name xong lấy ra từ cái name đó gán vào ListBox1.RowSource = "Name" thì tạm ok ===> quá lằng nhằng

3/ còn hình sau là tây nó nói...
View attachment 251528
4/ Còn 1 cách trên GPE này là họ làm giả cái tiêu đề bài #380
Các câu hỏi về Form trong Excel VBA | Page 19 | Giải Pháp Excel (giaiphapexcel.com)

5/ File đính kèm là cho hình số 1

6/ hy vọng ai đó có thể xài ADODB lấy vào 1 Array xong gán vào listbox có 1 cái tiêu đề mà ko phải làm giả nó Or xài name phụ -0-0-0-
ngon lành chưa ?

1608510115943.png
 
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 )
 
Lần chỉnh sửa cuối:

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

Back
Top Bottom