Câu lệnh INSERT trong truy vấn SQL

syquyen1987

Yêu THVBA
Xin chào cả nhà, mình có vấn đề muốn hỏi: mình muốn copy dữ liệu từ file "Book1.xlsm" vào file database "File Nguon.xlsx", và mình đang thực hành bằng câu lệnh INSERT trong SQL. Và do có nhiều dòng cần copy nên mình sẽ viết code vòng lặp cho nó để gán các giá trị cho các biến và các biến này được dùng trong câu lệnh INSERT SQL trong file Book1.xlsm. Tuy nhiên có người chỉ ra là phương pháp này không hiệu quả khi cứ tương tác qua lại liên tục giữa code và Sheet. Và người đó chỉ rằng phương pháp UpdateBatch là phương pháp hiệu quả. Các bạn biết phương pháp UpdateBatch thì mình mong nhận được chia sẻ từ các bạn.
Thứ hai nữa là code của mình thêm dữ liệu vào File Nguon.xlsx. Tuy nhiên trong File Nguon.xlsx, table chứa dữ liệu không tự động mở rộng (nếu paste hoặc gõ thuần túy thì table chứa dữ liệu tự mở rộng), không biết có cách nào mà table chứa dữ liệu tự mở rộng bằng cách chạy mã code nào đó trong file Book.xlsm không?
Minh xin chân thành cảm ơn. Và mình muốn gửi 2 files excel (Book1.xlsm là file dữ liệu copy, File Nguon.xlsx là file đích để paste vào) nhưng loay hoay mà không biết gửi thế nào. Nên trước khi được hướng dẫn gửi file đính kèm, mình viết code của mình trong Book1.xlsm như dưới đây. Rất mong nhận được sự chia sẻ từ các bạn
Mã:
Sub a()
Dim ob As ADODB.Connection
Dim sConnect As String
Dim sSQL As String

sConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " & ThisWorkbook.Path & "\File Nguon.xlsx;" & _
"Extended Properties=""Excel 12.0;HDR=No;"";" 'Co the bo ;IMEX=1

Set ob = New ADODB.Connection

i = 5
ob.Open sConnect
Do While Len(Sheet1.Cells(i, 1)) > 0
    q1 = Sheet1.Cells(i, 1)
    q2 = Sheet1.Cells(i, 2)
    Debug.Print q1, q2
    sSQL = "INSERT INTO [BISMUTH_CON$] (f1,f2)" & "VALUES ('" & q1 & "', #" & q2 & "#)"
    
    ob.Execute sSQL, , adCmdText Or adExecuteNoRecords
    i = i + 1
Loop
ob.Close
Set ob = Nothing
End Sub
 

NhanSu

SMod
Thành viên BQT
Bạn nên đưa file lên.
Bạn không nên đọc từng dòng rồi insert vào file như vậy sẽ rất chậm và các object không giải phóng bộ nhớ sau khi chạy nên nếu chạy nhiều lần sẽ lỗi. Do vậy cần sửa lại bằng cách insert một lần, trong code mình đã sửa tên File nguồn thành File_Dich.xlsx, bạn tự sửa câu lệnh SELECT theo ý bạn nhé.
Mã:
Sub InsertADO()
    Dim cn As ADODB.Connection, rs As ADODB.Recordset
    Dim s As String
    s = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " & ThisWorkbook.Path & "\File_Dich.xlsx" & _
        ";Extended Properties=""Excel 12.0 XML;HDR=No;"""
    Set cn = New ADODB.Connection
    cn.Open s
    s = "INSERT INTO [Sheet1$] (F1,F2) SELECT Q1,Q2 FROM [Excel 12.0 Xml;HDR=YES;Database=" & ThisWorkbook.FullName & ";].[Sheet1$] WHERE Q1>0"
    Set rs = New ADODB.Recordset
    rs.Open s, cn
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Sub
 

syquyen1987

Yêu THVBA
Bạn nên đưa file lên.
Bạn không nên đọc từng dòng rồi insert vào file như vậy sẽ rất chậm và các object không giải phóng bộ nhớ sau khi chạy nên nếu chạy nhiều lần sẽ lỗi. Do vậy cần sửa lại bằng cách insert một lần, trong code mình đã sửa tên File nguồn thành File_Dich.xlsx, bạn tự sửa câu lệnh SELECT theo ý bạn nhé.
Mã:
Sub InsertADO()
    Dim cn As ADODB.Connection, rs As ADODB.Recordset
    Dim s As String
    s = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " & ThisWorkbook.Path & "\File_Dich.xlsx" & _
        ";Extended Properties=""Excel 12.0 XML;HDR=No;"""
    Set cn = New ADODB.Connection
    cn.Open s
    s = "INSERT INTO [Sheet1$] (F1,F2) SELECT Q1,Q2 FROM [Excel 12.0 Xml;HDR=YES;Database=" & ThisWorkbook.FullName & ";].[Sheet1$] WHERE Q1>0"
    Set rs = New ADODB.Recordset
    rs.Open s, cn
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Sub
Code hữu hiệu quá bạn ạ. Mình cám ơn bạn. Mình còn một vấn đề nữa bạn giúp mình với
Mình muốn cập nhật số liệu vào các cột còn thiếu trong file đích (File_Dich.xlsx), theo dữ liệu từ file Book1.xlsm bằng câu lệnh truy vấn UPDATE SQL. Ví dụ là Cột A dữ liệu của 2 file (File_Dich.xlsx và Book1.xlsm) giống nhau, bây giờ muốn cập nhật số liệu cột B và cột C vào File_Dich.xlsx từ dữ liệu file Book1.xlsm theo dữ liệu cột A chung
Mong bạn chia sẻ giúp mình với ạ
Mình xin chân thành cảm ơn
 
D

Deleted member 1392

Guest
@syquyen1987 Câu hỏi của bạn trong Topic đã được giải quyết. Nếu bạn muốn đặt câu hỏi khác thì phải tạo Topic mới để hỏi, không được đặt câu hỏi luông tuồng trong cùng một Topic.
 
Top