Nhờ anh chị chỉ giúp câu lệnh insert into này lỗi gì mà nó cứ báo lỗi chổ dòng query không chạy được (Excel ADODB)

Liên hệ QC

quang0308

Thành viên mới
Tham gia
21/7/21
Bài viết
11
Được thích
0
Sub insertdata_sheet()
Dim conn As New ADODB.Connection
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\du_lieu_vba.xlsm" & ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
'conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\du_lieu_vba.xlsm" & ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
'conn.Open
Dim query As String
query = "Insert Into [outer$] select * from [CHAT_LUONG$]"
conn.Execute query
conn.Close
'Set conn = nothig
End Sub
 

File đính kèm

  • du_lieu_vba.xlsm
    677.8 KB · Đọc: 11
Tôi không hiểu tại sao bạn lại dùng Insert Into mà không dùng Select *. Thôi cũng theo ý bạn, dùng đoạn code này thay cho đoạn code cùng tên
Rich (BB code):
Sub insertdata_sheet()
Dim Rec As Object, cnn$
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    Set Rec = CreateObject("ADODB.Recordset")
    Rec.Open ("Insert Into [outer$] select * from [CHAT_LUONG$A2:J8804] "), cnn
Set Rec = Nothing
End Sub
 
Lần chỉnh sửa cuối:
query = "Insert Into [outer$] select * from [CHAT_LUONG$]"

Dùng "Insert Into tableName Select * ..." bắt buộc Table đích phải có cùng tên Field và thứ tự sắp xếp các field. Sheet Outer của bạn không có tên cột nào nên báo lỗi là đúng rồi.
 
Tôi không hiểu tại sao bạn lại dùng Insert Into mà không dùng Select *. Thôi cũng theo ý bạn, dùng đoạn code này thay cho đoạn code cùng tên
Rich (BB code):
Sub insertdata_sheet()
Dim Rec As Object, cnn$
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    Set Rec = CreateObject("ADODB.Recordset")
    Rec.Open ("Insert Into [outer$] select * from [CHAT_LUONG$A2:J8804] "), cnn
Set Rec = Nothing
End Sub
Copy các tiêu đề qua sheet outer rồi sửa lại code của Maika8008 chút xíu là xong (HDR=Yes)!

Mã:
Sub insertdata_sheet()
Dim Rec As Object, cnn$
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=Yes"""
    Set Rec = CreateObject("ADODB.Recordset")
    Rec.Open ("Insert Into [outer$] select * from [CHAT_LUONG$A1:J8804]"), cnn
Set Rec = Nothing
End Sub


Dùng ADO để chỉ copy từ sheet này qua sheet khác thì nó chạy chậm "bà cố" luôn, thay vì chỉ cần 1 dòng code cho thủ tục copy mà lại chạy chưa tới nửa giây!

Mã:
Sub test()
    Sheets("CHAT_LUONG").Range("A1:J8804").Copy Sheets("outer").Range("A1")
End Sub
 
Tôi nghĩ thớt sẽ dùng code để lấy dữ liệu từ file khác chứ không phải ngay trong file hiện hành đâu. Nhưng tại sao phải là Insert mà không là Select * From ... nhỉ
 
Tôi nghĩ thớt sẽ dùng code để lấy dữ liệu từ file khác chứ không phải ngay trong file hiện hành đâu. Nhưng tại sao phải là Insert mà không là Select * From ... nhỉ
Đúng như thế, và đương nhiên nó chạy rất nhanh không bị chớp giật mất thời gian!
Mã:
Sub insertdata_sheet()
Dim Rec As Object, cnn$
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    Set Rec = CreateObject("ADODB.Recordset")
    Rec.Open ("Select * from [CHAT_LUONG$A2:J8804]"), cnn
    Sheets("outer").Range("A1").CopyFromRecordset Rec
Set Rec = Nothing
End Sub

Nhưng có thể người ta không copy qua Excel mà copy qua Access hoặc SQL Server cũng nên; mà như thế đâu thể dùng CopyFromRecordset.
 
Lần chỉnh sửa cuối:
Tôi nghĩ thớt sẽ dùng code để lấy dữ liệu từ file khác chứ không phải ngay trong file hiện hành đâu. Nhưng tại sao phải là Insert mà không là Select * From ... nhỉ
2 câu lệnh nó khác nhau hoàn toàn mà bạn. Insert thì nó thêm dữ liệu mới vào CSDL, còn select thì nó chỉ lấy dữ liệu từ CSDL ra thôi mà bạn.
Nói nôm na là 1 cái lấy ra và 1 cái thêm vào.
 
Tôi không hiểu tại sao bạn lại dùng Insert Into mà không dùng Select *. Thôi cũng theo ý bạn, dùng đoạn code này thay cho đoạn code cùng tên
Rich (BB code):
Sub insertdata_sheet()
Dim Rec As Object, cnn$
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    Set Rec = CreateObject("ADODB.Recordset")
    Rec.Open ("Insert Into [outer$] select * from [CHAT_LUONG$A2:J8804] "), cnn
Set Rec = Nothing
End Sub
Cảm ơn bạn đã giải đáp thắc mắc của mình.
 
Web KT
Back
Top Bottom