kieu manh > 11-11-18, 10:56 AM
(11-11-18, 09:57 AM)ongke0711 Đã viết:Tại Mình cũng đang viết 1 hàm sử dụng cho Excel và Access thấy bài này Úp bên GPE tiện đây mình viết ADO(11-11-18, 07:50 AM)kieu manh Đã viết: Ý mình nói là khi ta dùng code lấy dữ liệu lên TableName xong rồi nhưng nhìn vào TableName đó chưa thấy có dữ liệu mà phải thao tác thủ công là bấm vào Refresh All trên Menu Access ấy thì dữ liệu trên TableName nó mới Show ra thì mới nhìn thấy được
Nếu theo như file demo của bạn maidinhdan thì khi bấm nút lấy dữ liệu thì dữ liệu đã được load về table rồi.
- Nếu bạn mở table đó lên trước để xem khi bấm nút lấy dữ liệu thì sau khi load về dữ liệu không cập nhật trên màn hình thôi. Mọi truy vấn đối với table đó vẫn có dữ liệu.
- Nếu bạn muốn hiển thị dữ liệu cập nhật lên trên màn hình luôn thì chỉ cần thêm Requery cho Form hay SubForm là được rồi.
Me.Requery
Me.SubForm.Requery
Me: đại diện cho Form có Source là table vừa nạp dữ liệu.
ongke0711 > 13-11-18, 09:12 PM
(11-11-18, 10:56 AM)kieu manh Đã viết: Tại Mình cũng đang viết 1 hàm sử dụng cho Excel và Access thấy bài này Úp bên GPE tiện đây mình viết ADO
1/ Từ Excel lưu dữ liệu Sheet đó vào Table Access (chạy code trên Excel )
2/ Từ Access chạy code lấy dữ liệu từ Excel đó lên Mảng xong lưu vào Table Access (Chạy code trên Access )
3/ Sử dung chung 1 Hàm cho 2 vấn đề trên nên mới tiện đây hỏi thêm vậy
....
Cảm ơn Bạn Access mình chưa hiểu lắm ... nếu viết thành code chạy chung cho toàn bộ File Access để Refresh All thì mình viết thế nào bạn nhỉ
kieu manh > 14-11-18, 03:33 PM
(13-11-18, 09:12 PM)ongke0711 Đã viết:(11-11-18, 10:56 AM)kieu manh Đã viết: Tại Mình cũng đang viết 1 hàm sử dụng cho Excel và Access thấy bài này Úp bên GPE tiện đây mình viết ADO
1/ Từ Excel lưu dữ liệu Sheet đó vào Table Access (chạy code trên Excel )
2/ Từ Access chạy code lấy dữ liệu từ Excel đó lên Mảng xong lưu vào Table Access (Chạy code trên Access )
3/ Sử dung chung 1 Hàm cho 2 vấn đề trên nên mới tiện đây hỏi thêm vậy
....
Cảm ơn Bạn Access mình chưa hiểu lắm ... nếu viết thành code chạy chung cho toàn bộ File Access để Refresh All thì mình viết thế nào bạn nhỉ
Tôi có viết cái Class dùng ADO để kết nối với 3 loại CSLD: SQL Server, MS Access và Excel. Bạn có thể tham khảo trong bài post này: http://thuthuataccess.com/forum/thread-10003.html
Trong bài này tôi rút gọn cái Class kết nối với Excel không thôi để đỡ rối.
Theo cách tôi thì không dùng mảng vì khi dùng ADO kết nối, nó đã tạo Recordset đó trên bộ nhớ rồi và mình chỉ cần dùng nó để ghi xuống table trong Access hoặc hiển thị thông tin để xem trên Form. Thay vì mất thêm thời gian cho công đoạn chuyển từ in-memory Recordset sang Mảng (cũng nằm trên bộ nhớ) rồi mới dùng cái biến mảng cho các thao tác kế tiếp.
- Dùng Recordset có thể sẽ chậm hơn mảng nhưng sẽ tận dụng được các thuộc tính, phương thức của nó như: Filter, Find, UpdateBatch v.v..Cái này mảng không làm được.
- Đối với dữ liệu ít dòng, ít field, không cần thao tác xử lý gì lại cái recordset đó thì tôi mới dùng Array, hoặc Collection nhưng phần lớn thì thích dùng Recordset hơn (khỏi phải Redim lại mảng).
Riêng đối với Sheet Excel thì kiểu gì cũng phải định dạng nó cho chuẩn hoá trước khi Import chứ không thì Access cũng sẽ bỏ qua các record có dữ liệu không đồng nhất -> sai dữ liệu.
Vd: cột dạng Text có nhưng dòng lẫn dạng Number thì Access vẫn import nhưng cột dữ liệu đó sẽ là Null. Tốt nhất nên chuyển các dữ liệu Number về Text để Access import ít lỗi mất dữ liệu hơn.
Link demo: http://www.mediafire.com/file/bwv0bbnfzcwmzmb/Demo_Import_Du_lieu_tu_Excel.rar/file
[/url]
[url=https://flic.kr/p/2bLuBm1]
Sub ImportExcelToAccess()
Dim Rs As Object, SQL As String
Dim Strcon As String, ExcelPath As String
ExcelPath = CurrentProject.Path & "\Test.xlsx"
Set Rs = CreateObject("ADODB.Recordset")
SQL = "select * from [Sheet1$A6:L15]" ''Tuy chon Mo Rong de lay du lieu
Strcon = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ExcelPath _
& ";Extended Properties=""Excel 12.0 Xml;HDR=Yes;"";")
Rs.Open SQL, Strcon, 3, 1
Rem CurrentDb.Execute "DELETE * FROM tblExcelImportTemp", dbFailOnError ''xoa hay luu xuong thì tuy
Dim i As Long
Dim rsDAO As DAO.Recordset
Set rsDAO = CurrentDb.OpenRecordset("tblExcelImportTemp", dbOpenDynaset)
With Rs
Do While Not .EOF
With .Fields
rsDAO.AddNew
For i = 0 To (.Count - 1)
rsDAO.Fields(i).Value = .Item(i).Value
Next
rsDAO.Update
End With
.MoveNext
Loop
MsgBoxUni ChrW(272) & "ã import d" & ChrW(7919) & " li" & ChrW(7879) & "u vào table: [tblExcelImportTemp]."
End With
Rs.Close
Set Rs = Nothing
rsDAO.Close
Set rsDAO = Nothing
End Sub
ongke0711 > 15-11-18, 03:50 PM
maidinhdan > 16-11-18, 01:36 AM