Câu Lệnh INSERT Trong Truy Vấn SQL - Tự Học VBA

Menu Tự học VBA
  • Trang chủ
  • Diễn đàn Bài viết mới Tìm chủ đề
  • Có gì mới Bài viết mới Hoạt động mới nhất
Đăng nhập Đăng ký Có gì mới? Tìm kiếm

Tìm kiếm

Everywhere Chủ đề This forum This thread Chỉ tìm trong tiêu đề Bởi: Tìm Tìm kiếm nâng cao…
  • Bài viết mới
  • Tìm chủ đề
Menu Đăng nhập Đăng ký
  • Cách upload ảnh lên diễn đàn
  • Trang chủ
  • Diễn đàn
  • Kỹ thuật xử lý Excel
  • Hỏi -Code Theo Yêu Cầu Có Trả Phí
Câu lệnh INSERT trong truy vấn SQL
  • Thread starter syquyen1987
  • Ngày gửi 19/8/20
S

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 N

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 Bạn cần đăng nhập để thấy link S

syquyen1987

Yêu THVBA
NhanSu nói: 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 Bạn cần đăng nhập để thấy link Nhấn để mở rộng...
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. S

syquyen1987

Yêu THVBA
Vâng, cảm ơn bạn đã nhắc nhở, minh xin sửa đổi, mình là thành viên mới nên chưa hiểu hết nội quy của diễn đàn Bạn phải đăng nhập hoặc đăng ký để bình luận. Chia sẻ: Facebook Twitter WhatsApp Email Link
  • Trang chủ
  • Diễn đàn
  • Kỹ thuật xử lý Excel
  • Hỏi -Code Theo Yêu Cầu Có Trả Phí
Top

Từ khóa » Câu Lệnh Sql Trong Vba Excel