Hỏi cách ghi một mảng 2 chiều vào 1 table của Access

Liên hệ QC

befaint

|||||||||||||
Tham gia
6/1/11
Bài viết
14,540
Được thích
19,749
Giả sử sau một khâu xử lý em được mảng kết quả arr_result(1 to 10, 1 to 5).
Và cho trước 1 table (Table1) trong 1 file Access.
Vậy làm sao ghi mảng arr_result vào Table1 tối ưu nhất, ngoài 2 cách duyệt từng phần tử trong arr_result rồi ghi vào Recordset.AddNew hoặc dùng câu lệnh SQL Insert Into, [ví dụ: Insert Into Table1 (Field1, Field2) Values('" & arr_result(i, 1) & "', '" & arr_result (i, 2) & "')" ]
Em cảm ơn.
 
Giả sử sau một khâu xử lý em được mảng kết quả arr_result(1 to 10, 1 to 5).
Và cho trước 1 table (Table1) trong 1 file Access.
Vậy làm sao ghi mảng arr_result vào Table1 tối ưu nhất, ngoài 2 cách duyệt từng phần tử trong arr_result rồi ghi vào Recordset.AddNew hoặc dùng câu lệnh SQL Insert Into, [ví dụ: Insert Into Table1 (Field1, Field2) Values('" & arr_result(i, 1) & "', '" & arr_result (i, 2) & "')" ]
Em cảm ơn.
Thử cách sau xem sao
Mã:
ColFieldNames = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
...
...
rst.UpdateBatch
 
Upvote 0
Giả sử sau một khâu xử lý em được mảng kết quả arr_result(1 to 10, 1 to 5).
Và cho trước 1 table (Table1) trong 1 file Access.
Vậy làm sao ghi mảng arr_result vào Table1 tối ưu nhất, ngoài 2 cách duyệt từng phần tử trong arr_result rồi ghi vào Recordset.AddNew hoặc dùng câu lệnh SQL Insert Into, [ví dụ: Insert Into Table1 (Field1, Field2) Values('" & arr_result(i, 1) & "', '" & arr_result (i, 2) & "')" ]
Em cảm ơn.

Tôi thì chỉ biết có 3 cách như befaint đề cập là: AddNew, SQL Insert Into, và ADO UpdateBatch.
Trong đó "Recordset AddNew" sẽ chạy nhanh hơn "Insert Into..." trong trường hợp này nhé. Nếu trong môi trường Access thì "Insert Into" sẽ nhanh hơn vì nó Insert một bó record luôn.
Còn dùng ADO UpdateBatch thì chưa test tốc độ. Em test thử xem. Dùng cách này nó phải qua mấy bước trung gian nhưng được cái nó xử lý ngay trên memory nên tôi nghĩ sẽ nhanh.
- Dùng ADO kết nối Table1 lưu vào ADO RS-> ngắt kết nối. (mở table với 0 record: Select * From Table1 Where 1=2").
Phải dùng rs.CursorLocation = adUseClient
- Ghi mảng vào ADO recordset ở trên.
- Mở lại kết nối, chạy code: rs.UpdateBatch
 
Upvote 0
Các bước trên nguyên tắc:
1. Tạo một recordset rỗng của table
2. Chép mảng vào recordset
3. Update table

Thực hành bước 1:
rs.CursorLocation = adUseClient ' giành quyền cursor cho code
rs.Open ... ' dùng câu lệnh "Select * From TheTable Where False" ' cho ra 0 records
vì ta chỉ cần cái mẫu, cho nên sau khi lấy cái mẫu xong thì ngắt kết nối
Set rs.ActiveConnection = Nothing
con.Close
Set con = Nothing

Thực hành bước 2:
For i = 1 To UBound(mang)
rs.AddNew ' nhét 1 dòng mới vào rs
rs("Truong1") = mang(i, 1)
...
Next i

Thực hành bước 3:
Set con = (lệnh kết nối)
Set rs.ActiveConnection = con
rs.UpdateBatch ' recordset sẽ cập nhập bảng
 
Upvote 0
Mới thử trên Access 2 cột x 10.000 dòng chạy hết khoãng 6 giây ... vậy ko biết đó là nhanh hay chậm khi sử dụng rs.UpdateBatch
 
Upvote 0
Nếu đã sử dụng đến lện SQL thì nên:
- mảng 2 chiều đó lấy dữ liệu từ đâu, tốt nhất nên là kết quả của SQL trước đó,
- khi đó thì dùng Insert into .... select ... sẽ nhanh và gọn hơn
 
Upvote 0
Mới thử trên Access 2 cột x 10.000 dòng chạy hết khoãng 6 giây ... vậy ko biết đó là nhanh hay chậm khi sử dụng rs.UpdateBatch
Thời gian ấy chả nói lên cái gì cả.
Thời gian còn tuỳ thuộc vào:
1. ADO kết nối vào Access
2. schema của bảng trong CSDL Access
3. kiểu dữ liệu

Đang chờ xem phản hồi kết quả của @befaint _)()(-
??? kết quả ???
Bạn ấy đủ kinh nghiệm để hiểu những cách làm và tự uyển chuyển cho trường hợp của mình.
Bạn muốn bạn ấy đưa luôn code đã chạy lên thì cứ nói thẳng ra.
 
Upvote 0
??? kết quả ???
Bạn ấy đủ kinh nghiệm để hiểu những cách làm và tự uyển chuyển cho trường hợp của mình.
Bạn muốn bạn ấy đưa luôn code đã chạy lên thì cứ nói thẳng ra.
thì em thấy trình độ @befaint hỏi cái này em thấy nó là lạ, chưa hiểu làm mục đích làm gì?. Thắc mắc vu vơ đó mà
 
Upvote 0
Thời gian ấy chả nói lên cái gì cả.
Thời gian còn tuỳ thuộc vào:
1. ADO kết nối vào Access
2. schema của bảng trong CSDL Access
3. kiểu dữ liệu


??? kết quả ???
Bạn ấy đủ kinh nghiệm để hiểu những cách làm và tự uyển chuyển cho trường hợp của mình.
Bạn muốn bạn ấy đưa luôn code đã chạy lên thì cứ nói thẳng ra.
Trong 3 cách lưu dữ liệu của thớt này ... vậy cách nào là nhanh nhất tai sao??? Nghe giang hồ đồn là rs.UpdateBatch chạy nhanh nhất

điều kiện của cả 3 cách là cấu trúc dữ liệu như nhau ( mọi cái như nhau )
 
Lần chỉnh sửa cuối:
Upvote 0
Trong 3 cách lưu dữ liệu của thớt này ... vậy cách nào là nhanh nhất tai sao??? Nghe giang hồ đồn là rs.UpdateBatch chạy nhanh nhất

điều kiện của cả 3 cách là cấu trúc dữ liệu như nhau

Bạn đã có sẳn dữ liệu để kiểm tra với UpdateBatch thì thêm chút code thử với 2 cách còn lại để xem như thế nào luôn và chia sẻ thông tin với mọi người. :-)
 
Upvote 0
Web KT

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

Back
Top Bottom