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)

Blue Softs Liên hệ QC

quang0308

Thành viên mới
Tham gia
21/7/21
Bài viết
2
Đượ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

Maika8008

Thành viên gắn bó
Tham gia
12/6/20
Bài viết
2,511
Được thích
2,752
Donate (Momo)
Donate
Giới tính
Nam
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:

ongke0711

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

Hoàng Trọng Nghĩa

Chuyên gia GPE
Thành viên BQT
Moderator
Tham gia
17/8/08
Bài viết
8,418
Được thích
16,189
Giới tính
Nam
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
 

Maika8008

Thành viên gắn bó
Tham gia
12/6/20
Bài viết
2,511
Được thích
2,752
Donate (Momo)
Donate
Giới tính
Nam
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ỉ
 

Hoàng Trọng Nghĩa

Chuyên gia GPE
Thành viên BQT
Moderator
Tham gia
17/8/08
Bài viết
8,418
Được thích
16,189
Giới tính
Nam
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:

Hai Lúa Miền Tây

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

quang0308

Thành viên mới
Tham gia
21/7/21
Bài viết
2
Được thích
0
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.
 
Top Bottom