Import Dữ Liệu Lớn Từ Excel Vào Sql Server Nhanh Nhất.

Giải Pháp Excel
  • Trang chủ Có gì mới Hoạt động gần nhất Tác giả
  • Diễn đàn Tìm bài viết mới Tìm theo chuyên mục
  • Video New Video về Excel Video về tin học khác Tin tức về tin học chung
  • Thông tin mới Featured content Tìm bài mới Tài Nguyên Mới Hoạt động gần nhất
  • Tài nguyên Đánh giá mới nhất Tìm tài nguyên
  • Facebook
  • Đóng góp
Đăng nhập Đăng Ký Có gì mới? Tìm kiếm

Tìm kiếm

Mọi nơi Đề tài Diễn đàn này Đề tài này Chỉ tìm trong tiêu đề Note Bởi: Tìm kiếm Tìm nâng cao…
  • Tìm bài viết mới
  • Tìm theo chuyên mục
Menu Đăng nhập Đăng Ký Install the app Install How to install the app on iOS

Follow along with the video below to see how to install our site as a web app on your home screen.

Note: This feature may not be available in some browsers.

  • Khách ơi! GPE thông tin đến bạn ấn phẩm "lập trình VBA trong Excel": - Phần cơ bản - Phần Nâng Cao - VBA trong Excel - Cải thiện và tăng tốc
  • Trang chủ
  • Diễn đàn
  • Lập Trình với Excel
You are using an out of date browser. It may not display this or other websites correctly.You should upgrade or use an alternative browser. Import dữ liệu lớn từ excel vào sql server nhanh nhất. (2 người xem)
  • Thread starter Thread starter quang0308
  • Ngày gửi Ngày gửi 26/4/22
Liên hệ QC

Người dùng đang xem chủ đề này

Đang trực tuyến: 2 (Thành viên: 0, Khách: 2) Q

quang0308

Thành viên mới
Tham gia 21/7/21 Bài viết 11 Được thích 0 Nhờ các anh, chị chỉ giúp có cách nào đưa dữ liệu từ excel vào sql server bằng VBA nhanh nhất đối với nguồn dữ liệu trên 10k dòng mà không bị treo file excel không ah, Em áp dụng câu lệnh insert into nó chậm và treo máy khi dữ liệu lớn. Sắp xếp theo thời gian sắp xếp theo bầu chọn Ngày mai trời lại sáng

Ngày mai trời lại sáng

Thành viên thường trực
Tham gia 4/7/21 Bài viết 340 Được thích 139
quang0308 đã viết: Nhờ các anh, chị chỉ giúp có cách nào đưa dữ liệu từ excel vào sql server bằng VBA nhanh nhất đối với nguồn dữ liệu trên 10k dòng nhanh nhất mà không bị treo file excel không ah, Em áp dụng câu lệnh insert into nó chậm và treo máy khi dữ liệu lớn. Nhấp chuột vào đây để mở rộng...
Vậy bạn thử for.. next dữ liệu rồi đưa hết vào câu lệnh insert into cuối cùng là ghi vào xem vấn đề gì không (nghĩa là ghi 1 lần) thay vì mỗi vòng lặp là 1 lần ghi vào. Upvote 0 Q

quang0308

Thành viên mới
Tham gia 21/7/21 Bài viết 11 Được thích 0
Ngày mai trời lại sáng đã viết: Vậy bạn thử for.. next dữ liệu rồi đưa hết vào câu lệnh insert into cuối cùng là ghi vào xem vấn đề gì không (nghĩa là ghi 1 lần) thay vì mỗi vòng lặp là 1 lần ghi vào. Nhấp chuột vào đây để mở rộng...
Mình đã thử rất nhiều cách,trong đó có cách của bạn nhưng cũng không nhanh hơn dc vì nó phải chạy lệnh insert thì sẽ không nhanh được. Upvote 0 Ngày mai trời lại sáng

Ngày mai trời lại sáng

Thành viên thường trực
Tham gia 4/7/21 Bài viết 340 Được thích 139
quang0308 đã viết: Mình đã thử rất nhiều cách,trong đó có cách của bạn nhưng cũng không nhanh hơn dc vì nó phải chạy lệnh insert thì sẽ không nhanh được. Nhấp chuột vào đây để mở rộng...
Cách nào chẳng phải for next bạn, cách của mình là câu lệnh insert sẽ nằm ngoài vòng lặp sau khi kết thúc mà bạn.. cách bạn có giống không? Upvote 0 Q

quang0308

Thành viên mới
Tham gia 21/7/21 Bài viết 11 Được thích 0
Ngày mai trời lại sáng đã viết: Cách nào chẳng phải for next bạn, cách của mình là câu lệnh insert sẽ nằm ngoài vòng lặp sau khi kết thúc mà bạn.. cách bạn có giống không? Nhấp chuột vào đây để mở rộng...
Rồi insert vào kiểu gì bạn thử demo cho mình dc không? Upvote 0 Ngày mai trời lại sáng

Ngày mai trời lại sáng

Thành viên thường trực
Tham gia 4/7/21 Bài viết 340 Được thích 139
quang0308 đã viết: Rồi insert vào kiểu gì bạn thử demo cho mình dc không? Nhấp chuột vào đây để mở rộng...
Vậy code của bạn đâu? Upvote 0 V

VetMini

Đang đi tìm hòn đá
Tham gia 21/12/12 Bài viết 17,867 Được thích 24,792 Nghề nghiệp Thầy bói bài ta Bên SQL Server, lập cái SP nó import từ Excel. Chứ ai lại đi ngược vậy. SQL Server, dùng SP thì khá an toàn. Đi từ VBA qua thì câu kết nối phải cởi cái lớp an toàn của SQL Server. Đang không tự giao chìa khoá nhà cho người ngoài. Từ Excel vào nơi khác thì gọi là Export chứ đâu phải Import. Upvote 0 Q

quang0308

Thành viên mới
Tham gia 21/7/21 Bài viết 11 Được thích 0
quang0308 đã viết: Rồi insert vào kiểu gì bạn thử demo cho mình dc không? Nhấp chuột vào đây để mở rộng...
Cách của ban có lẽ là tạo 1 chuỗi dữ liệu theo cấu trúc bảng rồi thực thi câu lệnh insert,cách này mình đã làm dữ liệu lớn nó chạy miệt mài bạn oi. Bài đã được tự động gộp: 26/4/22
VetMini đã viết: Bên SQL Server, lập cái SP nó import từ Excel. Chứ ai lại đi ngược vậy. SQL Server, dùng SP thì khá an toàn. Đi từ VBA qua thì câu kết nối phải cởi cái lớp an toàn của SQL Server. Đang không tự giao chìa khoá nhà cho người ngoài. Từ Excel vào nơi khác thì gọi là Export chứ đâu phải Import. Nhấp chuột vào đây để mở rộng...
Mình tạo sẵn bảng trên sql và nguoi dùng họ nhấn nút để đẩy dữ liệu lên đó thì có gì sai bạn. Upvote 0 ongke0711

ongke0711

Thành viên gắn bó
Tham gia 7/9/06 Bài viết 2,445 Được thích 3,338 Giới tính Nam
quang0308 đã viết: Nhờ các anh, chị chỉ giúp có cách nào đưa dữ liệu từ excel vào sql server bằng VBA nhanh nhất đối với nguồn dữ liệu trên 10k dòng mà không bị treo file excel không ah, Em áp dụng câu lệnh insert into nó chậm và treo máy khi dữ liệu lớn. Nhấp chuột vào đây để mở rộng...
C1: Bạn đã thử dùng ADODB Recordset chưa? - Kết nối SQL Server, mở ADO Recordset từ Table đích. - Đưa dữ liệu Excel vào Array rồi AddNew vào ADO Recordset -> UpdateBatch. Cách này chắc chắn nhanh hơn Insert into. C2: Chuyển dữ liệu Excel thành CSV rồi Bulk Insert vào SQL SV. Cái này viết SP. Lần chỉnh sửa cuối: 26/4/22 Upvote 0 Ngày mai trời lại sáng

Ngày mai trời lại sáng

Thành viên thường trực
Tham gia 4/7/21 Bài viết 340 Được thích 139
quang0308 đã viết: Cách của ban có lẽ là tạo 1 chuỗi dữ liệu theo cấu trúc bảng rồi thực thi câu lệnh insert,cách này mình đã làm dữ liệu lớn nó chạy miệt mài bạn oi. Bài đã được tự động gộp: 26/4/22 Mình tạo sẵn bảng trên sql và nguoi dùng họ nhấn nút để đẩy dữ liệu lên đó thì có gì sai bạn. Nhấp chuột vào đây để mở rộng...
quang0308 đã viết: Rồi insert vào kiểu gì bạn thử demo cho mình dc không? Nhấp chuột vào đây để mở rộng...
Kiểu này nè bạn: Mã: Sao chép. data = rng.Resize(lastRow, lastCol).Value For j = 1 To lastCol If j = 1 Then sColName = data(1, j) Else sColName = sColName & "," & data(1, j) End If Next j For i = 2 To lastRow For j = 1 To lastCol If i = 2 Then str = data(i, j) Else str = "'" & data(i, j) & "'" End If If j = 1 And i = 2 Then aInsert = "(" & str ElseIf j = 1 Then aInsert = aInsert & ",(" & str Else aInsert = aInsert & "," & str End If Next j aInsert = aInsert & ")" Next i strSQL = "INSERT INTO " & "[" & sDBName & "].[dbo].[" & sTbName & "] (" & sColName & ") VALUES " & aInsert cnn.Execute (strSQL) Upvote 0 V

VetMini

Đang đi tìm hòn đá
Tham gia 21/12/12 Bài viết 17,867 Được thích 24,792 Nghề nghiệp Thầy bói bài ta
quang0308 đã viết: ... Mình tạo sẵn bảng trên sql và nguoi dùng họ nhấn nút để đẩy dữ liệu lên đó thì có gì sai bạn. Nhấp chuột vào đây để mở rộng...
SQL Server phải cho phép VBA kết nối. Chính cái kết nối ấy mở đường cho acttack. Kiến thức về an toàn CSDL của người viết VBA là con số không tổ bố. Hầu hết các chuỗi kết nối chứa tên user và password. Khi làm việc trên SQL Server Management Studio (SSMS) thì chủ server cho phép máy con được kết nối với một số diều kiện. Người chạy SSMS phải có một số kiến thức về an toàn. Admin của Server có thể giới hạn rằng người dùng chỉ có quyền đọc, ghi thì phải dùng SP (stored procedure) Cách an toàn duy nhất cho VBA là đặt Schedule Task, đưa tham số tên file, tên bảng vào SP. Scheduled Task sẽ tự chạy SP. Vì SP chịu kiểm soát của Server cho nên khá an toàn. Upvote 0 Q

quang0308

Thành viên mới
Tham gia 21/7/21 Bài viết 11 Được thích 0
Ngày mai trời lại sáng đã viết: Kiểu này nè bạn: Mã: Sao chép. data = rng.Resize(lastRow, lastCol).Value For j = 1 To lastCol If j = 1 Then sColName = data(1, j) Else sColName = sColName & "," & data(1, j) End If Next j For i = 2 To lastRow For j = 1 To lastCol If i = 2 Then str = data(i, j) Else str = "'" & data(i, j) & "'" End If If j = 1 And i = 2 Then aInsert = "(" & str ElseIf j = 1 Then aInsert = aInsert & ",(" & str Else aInsert = aInsert & "," & str End If Next j aInsert = aInsert & ")" Next i strSQL = "INSERT INTO " & "[" & sDBName & "].[dbo].[" & sTbName & "] (" & sColName & ") VALUES " & aInsert cnn.Execute (strSQL) Nhấp chuột vào đây để mở rộng...
Ok nhưng dữ liệu lớn chạy chậm lắm bạn. Ban có cách nào nhanh hơn chỉ mình với. Upvote 0 Ngày mai trời lại sáng

Ngày mai trời lại sáng

Thành viên thường trực
Tham gia 4/7/21 Bài viết 340 Được thích 139
quang0308 đã viết: Ok nhưng dữ liệu lớn chạy chậm lắm bạn. Ban có cách nào nhanh hơn chỉ mình với. Nhấp chuột vào đây để mở rộng...
Mình thấy bài 9 của anh @ongke0711 có gợi ý 2 cách đó mà chưa thấy bạn phản hồi. Rồi các nguy cơ liên quan đến máy chủ mà chú @VetMini nói tớ nữa đó bạn. Mình không có phòng thí nghiệm để thử nên chỉ có cách củ chuối đó thôi bạn. Upvote 0 ongke0711

ongke0711

Thành viên gắn bó
Tham gia 7/9/06 Bài viết 2,445 Được thích 3,338 Giới tính Nam Đang rảnh làm cái test transfer data các kiểu xem như thế nào nhé. - Dữ liệu: 30k dòng x 15 cột - Mới test 2 cách đã đề cập: dùng SP để bulk insert cực kỳ nhanh nhưng đổi lại là user phải có quyền Admin mới xài được lệnh này. - Dùng Bulk insert thì sẽ có những đánh đổi để được tốc độ như nó không kiểm tra các khóa, các ràng buộc dữ liệu (constraint) mà chỉ nạp một đống dữ liệu vào. Nếu ngoài việc chuyển dữ liệu lớn vào SQL SV thì không nên dùng cách này. (Lưu ý: là chỉ đang test trên cùng 1 máy cài SQL SV, không tính tới yếu tố băng thông khi đưa lên máy chủ, qua mạng LAN, WAN) Screen Shot 2022-04-27 at 08.57.42.png Lần chỉnh sửa cuối: 27/4/22 Upvote 0 Ngày mai trời lại sáng

Ngày mai trời lại sáng

Thành viên thường trực
Tham gia 4/7/21 Bài viết 340 Được thích 139
ongke0711 đã viết: Đang rảnh làm cái test transfer data các kiểu xem như thế nào nhé. - Dữ liệu: 30k dòng x 15 cột - Mới test 2 cách đã đề cập: dùng SP để bulk insert cực kỳ nhanh nhưng đổi lại là user phải có quyền Admin mới xài được lệnh này. View attachment 275069 Nhấp chuột vào đây để mở rộng...
Nhìn hấp dẫn quá,chia sẻ cho em học để áp dụng với anh }}}}} Upvote 0 Q

quang0308

Thành viên mới
Tham gia 21/7/21 Bài viết 11 Được thích 0
ongke0711 đã viết: C1: Bạn đã thử dùng ADODB Recordset chưa? - Kết nối SQL Server, mở ADO Recordset từ Table đích. - Đưa dữ liệu Excel vào Array rồi AddNew vào ADO Recordset -> UpdateBatch. Cách này chắc chắn nhanh hơn Insert into. C2: Chuyển dữ liệu Excel thành CSV rồi Bulk Insert vào SQL SV. Cái này viết SP. Nhấp chuột vào đây để mở rộng...
C1 mình đã làm nhưng vần không nhanh hơn được. C2 thì mình không biết, bạn có thể hướng dẫn mình được không ? Upvote 0 ongke0711

ongke0711

Thành viên gắn bó
Tham gia 7/9/06 Bài viết 2,445 Được thích 3,338 Giới tính Nam
quang0308 đã viết: C1 mình đã làm nhưng vần không nhanh hơn được. C2 thì mình không biết, bạn có thể hướng dẫn mình được không ? Nhấp chuột vào đây để mở rộng...
Code bạn làm như thế nào? Xem thử nguyên nhân nó ra sao. Upvote 0 Q

quang0308

Thành viên mới
Tham gia 21/7/21 Bài viết 11 Được thích 0
ongke0711 đã viết: Code bạn làm như thế nào? Xem thử nguyên nhân nó ra sao. Nhấp chuột vào đây để mở rộng...
'Sub NL_TH_KHTT() ' 'FORM_LOG.Show ' Call connect_data.connect_sql ' Dim rs, rs1 As Object ' Dim delete_query, select_query As String ' delete_query = "truncate table [CSDL_LDA].[KHOAN_PHONG].[NL_TH_KHTT]" ' Set rs = cn.Execute(delete_query) ' select_query = "Select * from [CSDL_LDA].[KHOAN_PHONG].[NL_TH_KHTT] " ' Set rs1 = CreateObject("adodb.RecordSet") ' rs1.Open select_query, cn, 1, 3 ' Dim xlRow, last_row As Long ' Dim xlCol As Integer ' last_row = ThisWorkbook.Worksheets("NL_TH_KHTT").Cells(Rows.Count, 1).End(xlUp).Row ' For xlRow = 2 To last_row ' rs1.AddNew ' For xlCol = 1 To 20 ' rs1.Fields(Cells(1, xlCol).Value) = Cells(xlRow, xlCol).Value ' Next xlCol 'Next xlRow 'rs1.updateBatch ' cn.Close ' Set cn = Nothing ' Set rs1 = Nothing ' Set rs = Nothing ' End Sub Bạn xem thử vì sao nó chậm lắm luôn á, còn chậm hơn cả cách insert into ngoài vòng for .. next Upvote 0 thuyyeu99

thuyyeu99

Trùm Nhiều Chuyện
Tham gia 6/6/08 Bài viết 1,729 Được thích 875
quang0308 đã viết: 'Sub NL_TH_KHTT() ' 'FORM_LOG.Show ' Call connect_data.connect_sql ' Dim rs, rs1 As Object ' Dim delete_query, select_query As String ' delete_query = "truncate table [CSDL_LDA].[KHOAN_PHONG].[NL_TH_KHTT]" ' Set rs = cn.Execute(delete_query) ' select_query = "Select * from [CSDL_LDA].[KHOAN_PHONG].[NL_TH_KHTT] " ' Set rs1 = CreateObject("adodb.RecordSet") ' rs1.Open select_query, cn, 1, 3 ' Dim xlRow, last_row As Long ' Dim xlCol As Integer ' last_row = ThisWorkbook.Worksheets("NL_TH_KHTT").Cells(Rows.Count, 1).End(xlUp).Row ' For xlRow = 2 To last_row ' rs1.AddNew ' For xlCol = 1 To 20 ' rs1.Fields(Cells(1, xlCol).Value) = Cells(xlRow, xlCol).Value ' Next xlCol 'Next xlRow 'rs1.updateBatch ' cn.Close ' Set cn = Nothing ' Set rs1 = Nothing ' Set rs = Nothing ' End Sub Bạn xem thử vì sao nó chậm lắm luôn á, còn chậm hơn cả cách insert into ngoài vòng for .. next Nhấp chuột vào đây để mở rộng...
Theo tôi thấy code bạn làm sai ý rồi, cố gắng mò đi cho nhớ Upvote 0 ongke0711

ongke0711

Thành viên gắn bó
Tham gia 7/9/06 Bài viết 2,445 Được thích 3,338 Giới tính Nam
quang0308 đã viết: ' Dim rs, rs1 As Object ' For xlCol = 1 To 20 ' rs1.Fields(Cells(1, xlCol).Value) = Cells(xlRow, xlCol).Value ' Next xlCol 'Next xlRow Bạn xem thử vì sao nó chậm lắm luôn á, còn chậm hơn cả cách insert into ngoài vòng for .. next Nhấp chuột vào đây để mở rộng...
- Dính lỗi khai báo biến gộp. Có bài nói rồi. - Mỗi lần lấy dữ liệu là mỗi lần tương tác với Sheet. - Các Action query (Delete, Insert, update) thì chỉ cần thực thi, không cần phải qua đối tượng Recordset. Dùng thẳng đối tượng ADO Connection hoặc ADO Command. - Code VBA còn lủng củng thì sẽ khó hơn khi tương tác với stored procedure của SQL Server. Thông thường khi nhập liệu lên table của SQL Server người ta thường truyền tham số cho stored procedure của SQL Sv để chạy trên máy chủ chứ không chạy bằng câu lệnh SQL ở phía khách như anh Vetmini đã đề cập ở trên. (Tránh bị SQL injection). Lần chỉnh sửa cuối: 27/4/22 Upvote 0 Q

quang0308

Thành viên mới
Tham gia 21/7/21 Bài viết 11 Được thích 0
ongke0711 đã viết: - Dính lỗi khai báo biến gộp. Có bài nói rồi. - Mỗi lần lấy dữ liệu là mỗi lần tương tác với Sheet. - Các Action query (Delete, Insert, update) thì chỉ cần thực thi, không cần phải qua đối tượng Recordset. Dùng thẳng đối tượng ADO Connection hoặc ADO Command. - Code VBA còn lủng củng thì sẽ khó hơn khi tương tác với stored procedure của SQL Server. Nhấp chuột vào đây để mở rộng...
Hic nó chi chạy chậm chứ nó không hề báo lỗi gì.Bạn có thể chia sẽ cho mình cách bulk insert vba được không? Upvote 0 befaint

befaint

|||||||||||||
Tham gia 6/1/11 Bài viết 14,600 Được thích 19,843 Ợ. Tưởng vướng mắc gì, sao ngay bài #1 không úp code đã làm lên cho rồi. Vậy mà phương án nào đưa ra cũng kêu chậm. Gọi tới từng cell thế kia thì siêu rùa chứ chậm gì. last_row còn gọi tới sheet cụ thể, lúc lấy dữ liệu thì gọi cell trống không. Upvote 0 tigertiger

tigertiger

Coming back ...
Tham gia 25/1/07 Bài viết 1,941 Được thích 1,907
quang0308 đã viết: Nhờ các anh, chị chỉ giúp có cách nào đưa dữ liệu từ excel vào sql server bằng VBA nhanh nhất đối với nguồn dữ liệu trên 10k dòng mà không bị treo file excel không ah, Em áp dụng câu lệnh insert into nó chậm và treo máy khi dữ liệu lớn. Nhấp chuột vào đây để mở rộng...
Nên hỏi IT phụ trách cơ sở dữ liệu đó. Nếu bạn là IT phụ trách luôn: thì sẽ biết nên hỏi vấn đề này ở đâu thay vì Excel Upvote 0 ongke0711

ongke0711

Thành viên gắn bó
Tham gia 7/9/06 Bài viết 2,445 Được thích 3,338 Giới tính Nam
quang0308 đã viết: C1 mình đã làm nhưng vần không nhanh hơn được. C2 thì mình không biết, bạn có thể hướng dẫn mình được không ? Nhấp chuột vào đây để mở rộng...
Bạn xem file đính kèm. - Mở SQL Server và chạy lần lượt 3 cái SQL script để tạo: TestDB, tblRawData và cái stored procedure Bulk insert. - Chạy file Excel và nhập các thông số kết nối tới máy chủ SQL Server của bạn. Bổ sung: Tùy phiên bản và thiết lập SQL Server của bạn mà thay đổi Connection String cho phù hợp nhé. Mã: Sao chép. mConnectionString = "Network Library=DBMSSOCN;" & _ "PROVIDER=MSOLEDBSQL;DATA SOURCE=" & mServerName & _ ";INITIAL CATALOG=" & mDatabaseName & _ ";User Id=" & mUserName & ";Password=" & mPassword & ";" Mã: Sao chép. mConnectionString = "Driver={SQL Server};" & _ "Server=" & mServerName & _ ";Database=" & mDatabaseName & _ ";Uid=" & mUserName & _ ";Pwd=" & mPassword & ";" '";DataTypeCompatibility=80;" 'dung cho SQL SV 2019 với các datatype moi'

File đính kèm

  • TransferExcelTableToSQLServer.zip TransferExcelTableToSQLServer.zip 3 MB · Đọc: 45
Lần chỉnh sửa cuối: 29/4/22 Upvote 0 H

hvnhpro

Thành viên hoạt động
Tham gia 3/3/11 Bài viết 163 Được thích 93 Giới tính Nam
ongke0711 đã viết: Bạn xem file đính kèm. - Mở SQL Server và chạy lần lượt 3 cái SQL script để tạo: TestDB, tblRawData và cái stored procedure Bulk insert. - Chạy file Excel và nhập các thông số kết nối tới máy chủ SQL Server của bạn. Nhấp chuột vào đây để mở rộng...
Cảm ơn Ongke0711 đã chia sẻ. Em đang tìm hiểu về ADODB, bác có thể cho em xin thêm tài liệu hoặc link tham khảo được ko, em cảm ơn!!! vd như qua ngâm cứu file bác gửi, em thấy bác khai báo mấy biến chung này mà vẫn ko hiểu khai báo này có mục đích để làm gì? Private Const adUseClient As Long = 3 Private Const adLockReadOnly As Long = 1 Private Const adStateOpen As Long = 1 Private Const adCmdStoredProc As Long = 4 Private Const adParamOutput As Long = 2 Private Const adOpenDynamic As Long = 2 Private Const adOpenStatic As Long = 3 Public Enum DBaseType dbSQLServer = 1 dbAccess = 2 dbIBMDADB2 = 3 End Enum Upvote 0 ongke0711

ongke0711

Thành viên gắn bó
Tham gia 7/9/06 Bài viết 2,445 Được thích 3,338 Giới tính Nam
hvnhpro đã viết: Private Const adUseClient As Long = 3 Private Const adLockReadOnly As Long = 1 Private Const adStateOpen As Long = 1 Private Const adCmdStoredProc As Long = 4 Private Const adParamOutput As Long = 2 Private Const adOpenDynamic As Long = 2 Private Const adOpenStatic As Long = 3 Public Enum DBaseType dbSQLServer = 1 dbAccess = 2 dbIBMDADB2 = 3 End Enum Nhấp chuột vào đây để mở rộng...
Code gốc của tôi dùng khai báo muộn (Late binding) với thư viện ADODB, nên nếu dùng tên hằng như: rs1.Open select_query, cn , adOpenKeySet, adLockOptimistic sẽ báo lỗi ngay vì VBA nó không hiểu các tham số đó là gì nếu chưa khai báo nó. Nếu truyền tham số trong câu lệnh bằng các con số thì sẽ không báo lỗi nhưng không phải ai cũng nhớ nó là tham số gì. Người ta hay gọi là Magic number. Mã: Sao chép. rs1.Open select_query, cn, 1, 3 Do đó tôi khai báo các hằng trên để có thể dùng cái tên nó luôn trong câu lệnh đối với Late binding. Còn phần khai báo: DBType là vì tôi dùng bộ code này để kết nối với 2 loại CSDL khác là Access và IBMDB. Khi kết nối với CSDL nào thì cung cấp tham số này để code nó tạo chuỗi kết nối phù hợp với loại CSDL đó. Tài liệu tham khảo: đính kèm bên dưới.

File đính kèm

  • ADO_Activex_Data_Objects.pdf ADO_Activex_Data_Objects.pdf 2.4 MB · Đọc: 19
Upvote 0 H

hvnhpro

Thành viên hoạt động
Tham gia 3/3/11 Bài viết 163 Được thích 93 Giới tính Nam
ongke0711 đã viết: Code gốc của tôi dùng khai báo muộn (Late binding) với thư viện ADODB, nên nếu dùng tên hằng như: rs1.Open select_query, cn , adOpenKeySet, adLockOptimistic sẽ báo lỗi ngay vì VBA nó không hiểu các tham số đó là gì nếu chưa khai báo nó. Nếu truyền tham số trong câu lệnh bằng các con số thì sẽ không báo lỗi nhưng không phải ai cũng nhớ nó là tham số gì. Người ta hay gọi là Magic number. Mã: Sao chép. rs1.Open select_query, cn, 1, 3 Do đó tôi khai báo các hằng trên để có thể dùng cái tên nó luôn trong câu lệnh đối với Late binding. Còn phần khai báo: DBType là vì tôi dùng bộ code này để kết nối với 2 loại CSDL khác là Access và IBMDB. Khi kết nối với CSDL nào thì cung cấp tham số này để code nó tạo chuỗi kết nối phù hợp với loại CSDL đó. Tài liệu tham khảo: đính kèm bên dưới. Nhấp chuột vào đây để mở rộng...
lần thứ n cảm ơn Bác. Có tài liệu đọc sẽ hiểu gốc vấn đề hơn học mót. Upvote 0 Q

quang0308

Thành viên mới
Tham gia 21/7/21 Bài viết 11 Được thích 0
ongke0711 đã viết: Bạn xem file đính kèm. - Mở SQL Server và chạy lần lượt 3 cái SQL script để tạo: TestDB, tblRawData và cái stored procedure Bulk insert. - Chạy file Excel và nhập các thông số kết nối tới máy chủ SQL Server của bạn. Bổ sung: Tùy phiên bản và thiết lập SQL Server của bạn mà thay đổi Connection String cho phù hợp nhé. Mã: Sao chép. mConnectionString = "Network Library=DBMSSOCN;" & _ "PROVIDER=MSOLEDBSQL;DATA SOURCE=" & mServerName & _ ";INITIAL CATALOG=" & mDatabaseName & _ ";User Id=" & mUserName & ";Password=" & mPassword & ";" Mã: Sao chép. mConnectionString = "Driver={SQL Server};" & _ "Server=" & mServerName & _ ";Database=" & mDatabaseName & _ ";Uid=" & mUserName & _ ";Pwd=" & mPassword & ";" '";DataTypeCompatibility=80;" 'dung cho SQL SV 2019 với các datatype moi' Nhấp chuột vào đây để mở rộng...
cảm ơn bạn rất nhiều. Upvote 0 befaint

befaint

|||||||||||||
Tham gia 6/1/11 Bài viết 14,600 Được thích 19,843
hvnhpro đã viết: khai báo mấy biến chung này Nhấp chuột vào đây để mở rộng...
Cái đó gọi là enum (value of Constant). Khi dùng kết nối sớm thì dùng Constant (cũng có thể dùng value). Lúc gõ phương thức/ thuộc tính môi trường lập trình đưa sẵn gợi ý constant để lựa chọn. Khi dùng kết nối muộn, object chỉ chấp nhận dùng enum. Và lập trình tường minh, rõ ràng thì phải khai báo các trị đó rõ ràng dạng hằng, để dễ nhận biết, quản trị. Muốn biết enum của Constant tương ứng là gì thì gõ vào Google là thấy. 1651207330070.png 1651207313209.png Upvote 0 Bạn phải đăng nhập hoặc đăng ký để trả lời bài viết tại đây.

Bài viết mới nhất

hongphuong1997 Năm mới cháu chúc mừng các bác và toàn thể gia đình GPE
  • hongphuong1997
  • Hôm nay lúc 17:18
  • Gặp gỡ Offline
Trả lời 0 Đọc 10 Hôm nay lúc 17:18 hongphuong1997 hongphuong1997 H Chào cả nha! Xin tư vấn về câu chuyện quản lý nhân sự
    • Cười
  • hotboykute
  • 22/2/26
  • Những vấn đề chung
Trả lời 14 Đọc 296 Hôm nay lúc 15:53 Maika8008 Maika8008 SA_DQ Copilot bình luận các ván cờ vua từng ngày.
    • Thích
  • SA_DQ
  • 3/11/25
  • Chia sẻ
Trả lời 84 Đọc 3K Hôm nay lúc 15:23 SA_DQ SA_DQ H Xin A/C Giúp Tách địa chỉ ra Tỉnh , Huyện, Xã, Ấp
  • hoanghanh80
  • 31/5/24
  • Hàm và công thức Excel
Trả lời 10 Đọc 2K Hôm qua, lúc 22:26 dong.nguyen.hdkt D Maika8008 Sản phẩm từ Python với sự giúp đỡ của Copilot
    • Thích
    • Yêu thích
  • Maika8008
  • Thứ tư lúc 20:50
  • Excel và các ngôn ngữ lập trình khác
Trả lời 20 Đọc 459 Hôm qua, lúc 21:42 nguyendang95 N A Gửi tặng file excel kiểm phiếu bầu cử Đại biểu Quốc hội và Hội đồng nhân dân các cấp
    • Thích
    • Yêu thích
  • adua29
  • 19/5/11
  • Ứng dụng cho lĩnh vực khác
Trả lời 24 Đọc 29K Hôm qua, lúc 16:10 ngoclamthkg N phuongnam366377 Xây dựng RPC Server cho Excel / Access bằng Delphi – Tận dụng lại DLL và bảo mật mã nguồn (2 người xem)
  • phuongnam366377
  • Hôm qua, lúc 15:27
  • Excel và các ngôn ngữ lập trình khác
Trả lời 0 Đọc 46 Hôm qua, lúc 15:27 phuongnam366377 phuongnam366377 HeSanbi
  • Đã giải quyết
FitRowXL v1.3 - Giãn dòng tự động và bổ trợ in ấn Excel (*01/2026 mới)
    • Thích
    • Yêu thích
  • HeSanbi
  • 18/4/21
  • Lập Trình với Excel
Trả lời 79 Đọc 31K Hôm qua, lúc 12:17 HeSanbi HeSanbi V Một Excel add-in vibe coding
    • Thích
  • vietdang170
  • 28/1/26
  • Các Add-ins cho excel
Trả lời 22 Đọc 1K Hôm qua, lúc 09:19 Ttipit76 T ongke0711
  • Question Question
Tải hóa đơn điện tử (https://hoadondientu.gdt.gov.vn/) Excel Vba
    • Thích
    • Yêu thích
    • Cảm ơn
  • ongke0711
  • 6/10/24
  • Lập Trình với Excel
5 6 7 Trả lời 637 Đọc 94K Thứ sáu lúc 23:12 Diemnguyenqn Diemnguyenqn vuanhdungtb phân lớp đắp trong san nền và đường giao thông
  • vuanhdungtb
  • 20/1/10
  • Excel và Kỹ Thuật
Trả lời 19 Đọc 55K Thứ sáu lúc 23:03 hoangdung09x2 H TranThanhPhong Hàm EXACT
    • Thích
  • TranThanhPhong
  • 30/4/14
  • Dự án: Công thức & Hàm 97-2019
Trả lời 5 Đọc 9K Thứ năm lúc 20:46 ptm0412 ptm0412 vn81206 TRA CỨU MÃ SỐ THUẾ CÁ NHÂN QUA EXCEL
    • Buồn
  • vn81206
  • 2/2/23
  • Cơ sở dữ liệu
Trả lời 70 Đọc 27K Thứ năm lúc 10:29 minhhueyb21 M HeSanbi
  • Question Question
Trình điều khiển Web tải hóa đơn điện tử từ trang Misa (actapp.misa.vn/app)
    • Thích
    • Yêu thích
  • HeSanbi
  • Thứ năm lúc 09:56
  • Lập Trình với Excel
Trả lời 0 Đọc 131 Thứ năm lúc 09:56 HeSanbi HeSanbi xumipham1 Cách lấy dữ liệu từ nhiều cột theo nhiều điều kiện
  • xumipham1
  • Thứ năm lúc 08:49
  • Hàm và công thức Excel
Trả lời 2 Đọc 131 Thứ năm lúc 09:48 xumipham1 xumipham1 E
  • Đã giải quyết
VBA code tô màu ô excel theo điều kiện so sánh
  • eagle12
  • Thứ ba lúc 09:42
  • Lập Trình với Excel
Trả lời 4 Đọc 147 Thứ tư lúc 16:11 eagle12 E ongke0711
  • Question Question
Tra cứu thông tin mã số thuế (cập nhật lại code cũ)
    • Thích
    • Cảm ơn
    • Yêu thích
  • ongke0711
  • 24/7/25
  • Lập Trình với Excel
Trả lời 24 Đọc 2K Thứ tư lúc 14:14 kahainguyen K D Xin file excel về dự án đầu tư bao gồm các sheet liên kết từ danh mục đầu tư đến bảng kết quả kinh doanh
  • DoanTrongHuong
  • Thứ tư lúc 09:44
  • Excel và Các Biểu Đồ
Trả lời 0 Đọc 74 Thứ tư lúc 09:44 DoanTrongHuong D A File Excel kiểm phiếu bầu cử Quốc hội và HĐND các cấp (1 người xem)
    • Thích
  • adua29
  • 9/4/21
  • Excel Ứng Dụng
Trả lời 19 Đọc 5K Thứ ba lúc 21:35 bac0986101092 bac0986101092 B Phần mềm quản lý bán hàng trên excel offline
    • Cười
  • buihoanganhminh
  • Thứ ba lúc 14:09
  • Hàm và công thức Excel
Trả lời 0 Đọc 148 Thứ ba lúc 14:09 buihoanganhminh B Xem thêm… Chia sẻ: Facebook X Bluesky LinkedIn Reddit Pinterest Tumblr WhatsApp Email Chia sẻ Link

Thành viên có số lượng bài viết cao nhất tháng

  • Maika8008 2
  • SA_DQ 1

Thành viên có điểm tương tác cao nhất tháng

  • Maika8008 3
  • SA_DQ 2

Thời gian đếm ngược.

000 Ngày 00 Giờ 00 phút 00 giây Thân mời tham dự sự kiện sinh nhật GPE 2025
  • Trang chủ
  • Diễn đàn
  • Lập Trình với Excel
  • Website này sử dụng cookies. Tiếp tục sử dụng trang này, đồng nghĩa với việc bạn chấp nhận website sử dụng cookies. Chấp nhận Tìm hiểu thêm.…
Back Top Bottom

Từ khóa » Cách Copy Dữ Liệu Từ Excel Vào Sql