Khai thác và tùy biến thêm, sửa, xuất file và lấy dữ liệu từ Recordset

Liên hệ QC
Thì cũng là link bạn Mạnh đưa lên thôi và cái winsqlite3.dll cũng chỉ dùng để tương tác với SQLite database thôi.
Link em gửi khác mà (anh click vào ảnh thứ nhất ấy).

Chắc anh ấy tìm thấy cái gì đó hay hay thì úp lên thôi.
Cái thư viện đó có thể dùng độc lập, không cần tới Office mà vẫn làm việc được với các file Access, Excel. Đại khái thế.
 
Link em gửi khác mà (anh click vào ảnh thứ nhất ấy).

Chắc anh ấy tìm thấy cái gì đó hay hay thì úp lên thôi.
Cái thư viện đó có thể dùng độc lập, không cần tới Office mà vẫn làm việc được với các file Access, Excel. Đại khái thế.
vãi lắm bài 177 Mạnh chụp cái hình to trà bá đó mà không dòm cứ mở cái link kia

1 cái link là ý tưởng code đó có trước khi bill cho File winsqlite3.dll vào Windows10 ( Lưu ý chỉ mới có trên Window10 nhé )

1607144693186.png
Còn cái link kia là hướng dẫn xài cho VBA đấy
Connect to SQLite from VBA using winsqlite3.dll (renenyffenegger.ch)
1607144769903.png
 
Lần chỉnh sửa cuối:
vãi lắm bài 177 Mạnh chụp cái hình to trà bá đó mà không dòm cứ mở cái link kia

1 cái link là ý tưởng code đó có trước khi bill cho File winsqlite3.dll vào Windows10 ( Lưu ý chỉ mới có trên Window10 nhé )

View attachment 250632
Còn cái link kia là hướng dẫn xài cho VBA đấy
Connect to SQLite from VBA using winsqlite3.dll (renenyffenegger.ch)

Đồngh ý cái winsqlite.dll của của Widnows 10 và túm lại, vậy lợi ích của nó đối với chủ đề này là gì vậy bạn? Một đống câu hỏi post trước của tôi đó, bạn dùng nó khai thác cái gì vậy? Hay đưa lên chơi chơi thôi, không có tính thực dụng ở đây.
 
Đồngh ý cái winsqlite.dll của của Widnows 10 và túm lại, vậy lợi ích của nó đối với chủ đề này là gì vậy bạn? Một đống câu hỏi post trước của tôi đó, bạn dùng nó khai thác cái gì vậy? Hay đưa lên chơi chơi thôi, không có tính thực dụng ở đây.
bài 177 dòng màu đỏ

1607153206880.png


bài 182 dòng màu đỏ tây nó nói
1607153296766.png
đó là câu trả lời cho bạn .... đã nói hết rồi mà .... có vậy mà cũng hỏi ... vãi thật
 
bài 177 dòng màu đỏ

View attachment 250639


bài 182 dòng màu đỏ tây nó nói
View attachment 250640
đó là câu trả lời cho bạn .... đã nói hết rồi mà .... có vậy mà cũng hỏi ... vãi thật

:D Vậy là bạn không hiểu tôi hỏi gì. Mà bạn biết SQLite chứ?. Tôi cũng ngưng ở đây vì thông qua đây đã biết việc trao đổi này chẳng có tính thực tế gì.
 
Lần chỉnh sửa cuối:
Sẵn tiện nghiên cứu SQL lite thì tuỳ vào khả năng của từng bạn mà nghiên cứu luôn
Oracle, MySQL, SQLServer, TurboDB, DBisam, PostgreSQL luôn đi he tài liệu Google.
Còn mình thì Pó tay :eek:

Anh @Hai Lúa Miền Tây xuất chiêu tiếp đi anh, để cho em và mọi người chưa biết học hỏi
 
Tìm kiếm dữ liệu với dữ liệu mẫu bài 1 với cột "ID='TP0019'" và lấy xuống 5 dòng dữ liệu kể từ khi ta tìm được dữ liệu ta được kết quả:

1607583788425.png
Code sẽ như sau:

Rich (BB code):
Sub TimDL_HLMT()
    With CreateObject("ADODB.Recordset")
        .Open "Select * from [Sheet1$]", "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName, 1
        .Find "ID='TP0019'"
        Sheet2.Range("A2").CopyFromRecordset .DataSource, 5
    End With
End Sub
 
Lần chỉnh sửa cuối:
Em thử code sau nhé.

Mã:
Private Sub CommandButton1_Click()
    'Dim arr As Variant
    'arr = ListBox1.List
    'Sheet1.Range("K2:M100").ClearContents
    'Sheet1.Range("K2:M" & rst.RecordCount + 1) = arr
    Sheet1.Range("K2:M1000").ClearContents
    Dim rng  As Range, i As Integer, col As Integer
    Set rng = Worksheets("Sheet1").Range("K" & Rows.Count).End(xlUp).Offset(1)
     For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) Then
            For col = 0 To ListBox1.ColumnCount - 1
                rng.Offset(, col).Value = ListBox1.List(i, col)
            Next
            Set rng = rng.Offset(1)
            ListBox1.Selected(i) = False
        End If
    Next

End Sub
Anh Hai Lúa cho OT hỏi chỗ nay với ạ, khi OT muốn hiển thì toàn bộ dữ liệu khi mở form,do đó trong câu lệnh:
Mã:
Private Sub UserForm_Initialize()
    Set rst = CreateObject("ADODB.Recordset")
    rst.Open "Select * from [Sheet1$]", "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName, 1
    TextBox1.Text = "001"
End Sub
OT đã sửa:
TextBox1.Text = "001"
Thành:
TextBox1.Text = ""
Thì khi mở from lên không xuất hiện dữ liệu, vậy làm thế nào để có thể hiển thị toàn bộ dữ liệu khi mở form mã TextBox1="" ạ.
Bởi vì OT thấy sau khi mở Form mã xóa toàn bộ dữ liệu trong TextBox1 thì mới hiển thì toàn bộ danh sách anh ạ.
 
Anh Hai Lúa cho OT hỏi chỗ nay với ạ, khi OT muốn hiển thì toàn bộ dữ liệu khi mở form,do đó trong câu lệnh:
Mã:
Private Sub UserForm_Initialize()
    Set rst = CreateObject("ADODB.Recordset")
    rst.Open "Select * from [Sheet1$]", "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName, 1
    TextBox1.Text = "001"
End Sub
OT đã sửa:
TextBox1.Text = "001"
Thành:
TextBox1.Text = ""
Thì khi mở from lên không xuất hiện dữ liệu, vậy làm thế nào để có thể hiển thị toàn bộ dữ liệu khi mở form mã TextBox1="" ạ.
Bởi vì OT thấy sau khi mở Form mã xóa toàn bộ dữ liệu trong TextBox1 thì mới hiển thì toàn bộ danh sách anh ạ.
Đã có luôn rồi mà em

Rich (BB code):
Private Sub TextBox1_Change()
    Dim arr As Variant
    If TextBox1.Text = "" Then
        rst.Filter = 0
    Else
        rst.Filter = "Code like '*" & TextBox1.Text & "*'"
    End If
    If rst.EOF Then
        ListBox1.Clear
    Else
        arr = rst.getrows()
        ListBox1.ColumnCount = rst.Fields.Count
        ListBox1.Column = arr
    End If
End Sub
 
Đã có luôn rồi mà em

Rich (BB code):
Private Sub TextBox1_Change()
    Dim arr As Variant
    If TextBox1.Text = "" Then
        rst.Filter = 0
    Else
        rst.Filter = "Code like '*" & TextBox1.Text & "*'"
    End If
    If rst.EOF Then
        ListBox1.Clear
    Else
        arr = rst.getrows()
        ListBox1.ColumnCount = rst.Fields.Count
        ListBox1.Column = arr
    End If
End Sub
Dạ vâng anh, đúng là có rồi ạ nhưng chỉ có tác dụng với, sự kiện: TextBox1_Change
Còn vấn đề OT hỏi là khi mở form lên có luôn cơ ạ (nghĩa là lúc chưa cần tác động lên TextBox1) anh ạ.
 
Dạ vâng anh, đúng là có rồi ạ nhưng chỉ có tác dụng với, sự kiện: TextBox1_Change
Còn vấn đề OT hỏi là khi mở form lên có luôn cơ ạ (nghĩa là lúc chưa cần tác động lên TextBox1) anh ạ.
Thì em nạp bình thường giống như trên Textbox thôi mà

Mã:
Private Sub UserForm_Initialize()
    Dim arr As Variant
    Set rst = CreateObject("ADODB.Recordset")
    rst.Open "Select * from [Sheet1$]", "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName
    'TextBox1.Text = "001"
    If rst.EOF Then
        ListBox1.Clear
    Else
        arr = rst.getrows()
        ListBox1.ColumnCount = rst.Fields.Count
        ListBox1.Column = arr
    End If
End Sub
 
Thì em nạp bình thường giống như trên Textbox thôi mà

Mã:
Private Sub UserForm_Initialize()
    Dim arr As Variant
    Set rst = CreateObject("ADODB.Recordset")
    rst.Open "Select * from [Sheet1$]", "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName
    'TextBox1.Text = "001"
    If rst.EOF Then
        ListBox1.Clear
    Else
        arr = rst.getrows()
        ListBox1.ColumnCount = rst.Fields.Count
        ListBox1.Column = arr
    End If
End Sub
Được rồi ạ, cảm ơn anh Hai Lúa cảm ơn chú Mỹ. Thì ra vấn đề là nằm ở chỗ rst .
Híc OT cứ loay hoay suốt không biết câu lệnh truy vấn liên quan ở chỗ nào.
 
Thì cũng là link bạn Mạnh đưa lên thôi và cái winsqlite3.dll cũng chỉ dùng để tương tác với SQLite database thôi.
Vậy ứng dụng nó ra sao trong Excel và nếu dùng nó có gì hay hơn so với vụ dùng ADODB để kết nối nguồn dữ liệu Excel mà phải đổi hướng xài nó vậy? Tôi chưa xài tới nó bao giờ vì chưa thấy có nhu cầu trong hiện tại của tôi, nếu bạn Mạnh thấy được tính ứng dụng của nó thì khai sáng cho mọi người nhé hoặc bạn Mạnh tạo cái chủ đề mới giới thiệu về nó và ứng dụng cho mọi người học hỏi.
Em hiện tại đang dùng access làm database để lưu dữ liệu bán hàng ( ~ 30 triệu record / năm), vấn đề với access là nó bị giới hạn ~ 2Gb/file nên em mới tìm hiểu qua SQLite vì nó không bị giới hạn kích thước. Em thấy vẫn dùng ADODB để connect với SQLite3 bình thường nên mọi người bàn luận ở đây vẫn phù hợp mà anh

@Kiều Mạnh , @befaint mình đang muốn import hết dữ liệu của 1 table trong file access qua sqlite3 thông qua VBA - ADOdb thì có cách nào không nhỉ?
 
Em hiện tại đang dùng access làm database để lưu dữ liệu bán hàng ( ~ 30 triệu record / năm), vấn đề với access là nó bị giới hạn ~ 2Gb/file nên em mới tìm hiểu qua SQLite vì nó không bị giới hạn kích thước. Em thấy vẫn dùng ADODB để connect với SQLite3 bình thường nên mọi người bàn luận ở đây vẫn phù hợp mà anh

@Kiều Mạnh , @befaint mình đang muốn import hết dữ liệu của 1 table trong file access qua sqlite3 thông qua VBA - ADOdb thì có cách nào không nhỉ?
Cái nick Kiều Mạnh kia với nick này của tôi là 1 Tôi xài 2 nick ấy ... Rất minh bạch và rành mạch ko thèm nấp danh nick ảo

Tôi gợi ý cho viết thôi nhé chứ kỳ này tôi mất hứng thú rồi ... chắc sau này cũng thế sẻ ko bao giờ viết nữa nếu có chỉ gợi ý cho thôi

1/ Khi bạn biết xài SQL lite đó thì bạn sẻ không phụ thuộc vào ADOx của Ms như mô tả bài 184 khoanh tròn thứ 2
2/ đó là thư viện API để xài được nó bạn phải viết thêm các Hàm phụ khai báo sử dụng API
3/ trên VB6 để xài được nó họ viết ra các hàm phụ trung gian xong call API SQLite thì mới sử dụng được
4/ xem hình nha ... code đó là bên kia địa cầu họ viết đấy ... chịu khó tìm đi là thấy có khi thấy rồi mới thì cũng chưa biết xài ... chịu khó quậy ngang dọc đi xong sẻ ngộ ra là biết xài đừng có nóng vội nói bạy nghe không

xem hình minh họa

1610417341164.png
 
Tôi vận dụng và khai thác cái hàm lọc vào cái form lọc dữ liệu, các bạn có thể tham khảo và tùy biến sử dụng nhé.

Mã:
Dim rst As Object

Private Sub TextBox1_Change()
    Dim arr As Variant
    If TextBox1.Text = "" Then
        rst.Filter = 0
    Else
        rst.Filter = "Code like '*" & TextBox1.Text & "*'"
    End If
    If rst.EOF Then
        ListBox1.Clear
    Else
        arr = rst.getrows()
        ListBox1.ColumnCount = rst.Fields.Count
        ListBox1.Column = arr
    End If
End Sub

Private Sub UserForm_Initialize()
    Set rst = CreateObject("ADODB.Recordset")
    rst.Open "Select * from [Sheet1$]", "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName
    TextBox1.Text = "001"
End Sub

View attachment 249426
Anh ơi có thể hiển thị được tiêu đề cho listbox trường hợp này này được không?
 
Web KT
Back
Top Bottom