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

Blue Softs Liên hệ QC

befaint

|||||||||||||
Tham gia
6/1/11
Bài viết
12,460
Được thích
15,515
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ế.
 

Kiều Mạnh

IIIIIIIIIIIIIIIII
Tham gia
9/6/12
Bài viết
4,558
Được thích
3,214
Giới tính
Nam
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:

ongke0711

Thành viên tích cực
Tham gia
7/9/06
Bài viết
1,085
Được thích
1,294
Giới tính
Nam
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.
 

Kiều Mạnh

IIIIIIIIIIIIIIIII
Tham gia
9/6/12
Bài viết
4,558
Được thích
3,214
Giới tính
Nam
Đồ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
 

ongke0711

Thành viên tích cực
Tham gia
7/9/06
Bài viết
1,085
Được thích
1,294
Giới tính
Nam
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:

thuyyeu99

Trùm Nhiều Chuyện
Tham gia
6/6/08
Bài viết
1,720
Được thích
864
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
 

Hai Lúa Miền Tây

❆❆❆❆❆❆❆❆
Thành viên BQT
Administrator
Tham gia
18/3/08
Bài viết
8,142
Được thích
15,447
Giới tính
Nam
Nghề nghiệp
Làm ruộng.
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:

Hoàng Nhật Phương

Thành viên gắn bó
Tham gia
5/11/15
Bài viết
1,782
Được thích
944
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 ạ.
 

Hai Lúa Miền Tây

❆❆❆❆❆❆❆❆
Thành viên BQT
Administrator
Tham gia
18/3/08
Bài viết
8,142
Được thích
15,447
Giới tính
Nam
Nghề nghiệp
Làm ruộng.
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
 

Hoàng Nhật Phương

Thành viên gắn bó
Tham gia
5/11/15
Bài viết
1,782
Được thích
944
Đã 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 ạ.
 

Hai Lúa Miền Tây

❆❆❆❆❆❆❆❆
Thành viên BQT
Administrator
Tham gia
18/3/08
Bài viết
8,142
Được thích
15,447
Giới tính
Nam
Nghề nghiệp
Làm ruộng.
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
 

ptm0412

Bad Excel Member
Thành viên BQT
Super Moderator
Tham gia
4/11/07
Bài viết
11,620
Được thích
32,646
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Consultant

Hoàng Nhật Phương

Thành viên gắn bó
Tham gia
5/11/15
Bài viết
1,782
Được thích
944
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.
 

evolt

Thành viên mới
Tham gia
14/6/13
Bài viết
17
Được thích
1
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ỉ?
 

phuongnam366377

Thành viên chính thức
Tham gia
25/10/19
Bài viết
98
Được thích
134
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
 
Top Bottom