Xuất dử liệu từ Access ra Excel và ngược lại

Liên hệ QC
em đã sửa lại theo hướng dẫn của các bác, mặc dù sau khi chạy code đã cập nhật dữ liệu nhưng dũ liệu đã cập nhật bị thiếu, một số cột bị blank. Không hiểu lý do vì sao ??? Các bác giải thích giúp em với, không biết lỗi đó có khắc phục được không ???.
Thanks

Bạn gửi file Excel lên tôi xem giùm cho
Thân
 
Đưa dữ liệu Excel vào access

Em có làm một tran web về ASP, em cũng đang design 1 trang xem điểm của học sinh. Bi giờ Em có rất nhiều cơ sỡ dữ liệu excel khác nhau nhưng cùng một form, mỗi file excel lại có rất nhiều trường. Bi h em có thể đưa nó vào access với các trường dữ liệu em đã làm sẵn trong nhiều table , em sẽ làm thế nào để kết nối và đưa những dữ liệu vào trong access và mọi người có thể chi tiết dùm không do em hơi gà về vấn để này.
 
Option Compare Database
Const cnn = "Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source= duong dan \ten file excel;" & "Extended Properties = Excel 12.0" (đây là đối với excel 2007)
Sub get_Edata()
Dim myCn As String
Dim myRc As ADODB.Recordset
Dim myTb As ADODB.Recordset
Dim mySql As String
myCn = cnn
mySql = "select*from[sheet1$]"
Set myRc = New ADODB.Recordset
myRc.Open mySql, myCn, adOpenStatic, adLockReadOnly
Set myTb = New ADODB.Recordset
myTb.Open [ten table can nhap du lieu trong csdl access], CurrentProject.Connection, adOpenDynamic, adLockOptimistic
Do Until myRc.EOF
myTb.AddNew
myTb![ten cot trong excel] = myRc!ten truong trong bảng access]
....
....
....
myTb.Update
myRc.MoveNext
Loop
Set myTb = Nothing
End Sub

tôi dùng code này (học từ hướng dẫn của bác levanduyet) để cập nhật dữ liệu từ excel vào access. Bạn xem có ứng dụng được không. %#^#$
 
mình đặt code này trong cái nào của access và mổi lần khởi động lên là nó tự update hay sao
 
nó báo lỗi dòng này là sao, mình đang sài excel 2003. myRc.Open mySql, myCn, adOpenStatic, adLockReadOnly
Mình gởi ai coi dùm rồi chỉnh dùm mình nha, cả cấu truc file excel luôn
 

File đính kèm

  • khoa.zip
    19.2 KB · Đọc: 40
  • khoa.jpg
    khoa.jpg
    13 KB · Đọc: 22
Lần chỉnh sửa cuối:
Hình như bạn khai báo sai về connect string. Cái này tôi dùng append 1 bảng của excel vào 1 bảng của access, nếu bạn nối nhiều bảng thì phải tạo ra nhiều connect string (1,2,3,4....) rồi sử dụng từng cái một để cập nhạt dữ liệu từ excel vào access. Bạn nên tải file ADO toàn tập của bác Duyệt về mà nghiên cứu thêm.
Link đây http://www.giaiphapexcel.com/forum/showthread.php?p=82680#post82680
 
Lần chỉnh sửa cuối:
Bảng của bạn có khóa chính là ID, bạn set ID là Auto number, dữ liệu bên Excel của bạn cũng có trường ID, theo mình nghĩ hoặc là bạn sửa lại ID trong Access không phải là Auto number mà là number để ghi lại từ Excel, hoặc là bạn bỏ hẳn trường ID bên Excel đi mà để lại trường ID bên Access cho nó tự động đánh số.

Bạn tham khảo code bên dưới, nó nhập tất cả các file Excel có trong đường dẫn cho trước với tên là Sheet1, Bạn nên chỉnh đường dẫn cho hợp lý nhé.

Mã:
Private Sub Command0_Click()
 Dim strPathFile As String, strFile As String, strPath As String
        Dim strTable As String
        Dim blnHasFieldNames As Boolean
        blnHasFieldNames = True
        strPath = "C:\Le Phat Dom\STUDY\ACCESS\" [COLOR=darkgreen]'Đường dẫn đến file Excel của bạn[/COLOR]
        strTable = "tbldulieu"
        strFile = Dir(strPath & "*.xls")
        Do While Len(strFile) > 0
              strPathFile = strPath & strFile
              DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
              strTable, strPathFile, blnHasFieldNames, "SHEET1!"
              strFile = Dir()
        Loop
        MsgBox "Da nhap xong du lieu ", vbExclamation, "Nhap du lieu tu Excel"
        
End Sub

Bạn tham khảo thêm file nhe.
Thân
 

File đính kèm

  • Import data from excel file.rar
    31.9 KB · Đọc: 189
Ah bạn ơi, cách này là nó lấy tất cả các file excel để nó import ah, vậy thì tuyệt lắm, nhưng vấn đề ở chổ 1 sheet của mình lại có rất nhiều vùng, mình muốn copy từng vùng như thế, vậy mình phải làm sao đây
 
Ah bạn ơi, cách này là nó lấy tất cả các file excel để nó import ah, vậy thì tuyệt lắm, nhưng vấn đề ở chổ 1 sheet của mình lại có rất nhiều vùng, mình muốn copy từng vùng như thế, vậy mình phải làm sao đây
Bạn copy vùng ở sheet1 thì sửa lại như sau:
Mã:
[COLOR=red]'....[/COLOR]
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
              strTable, strPathFile, blnHasFieldNames, "SHEET1![COLOR=red][B]A1:B200[/B][/COLOR]" 'Ở đây giả sử tôi copy vùng [B][COLOR=#ff0000]A1:B200 ở Sheet1[/COLOR][/B]
 
[COLOR=red]'....[/COLOR]
Bạn Test thử nhé
Thân
 
ah còn một vấn đề nhỏ nữa, file access bạn có thiết lập gì khác ngoài viết code không. Mình còn muốn hỏi là trong 1 sheet mình có nhiều vùng dữ liệu làm như trên rồi, và nhiều vùng này lại có nhiều table để chứa dữ liệu đó. vậy mình lập code nhiều lần lập lại với code thay đổi ít ít ah
 
ah còn một vấn đề nhỏ nữa, file access bạn có thiết lập gì khác ngoài viết code không. Mình còn muốn hỏi là trong 1 sheet mình có nhiều vùng dữ liệu làm như trên rồi, và nhiều vùng này lại có nhiều table để chứa dữ liệu đó. vậy mình lập code nhiều lần lập lại với code thay đổi ít ít ah
File mình gửi không có thiết lập gì nhiều chỉ tạo nút bấm, các thuộc tính trên form, nhưng nó không ảnh hưởng gì đến code, nó chỉ làm cho đẹp thôi.
Theo mình nghĩ, theo yêu cầu của bạn thì có nhiều vùng nhập liệu trên sheet, mỗi vùng khác nhau đưa vào Table khác nhau, cái này bạn nên làm là mỗi table là 1 code riêng ứng với code đó là 1 option để nhập. Nói cách khác là bạn muốn nhập Table nào thì click lựa chọn Table đó.
Thân
 
bạn có rõ về cái ứng với mỗi lúc kich vào table thì nó sẽ ra code nhập tương ứng không, mình cũng có rất nhiều file excel có cấu trúc giống nhau muốn nhập vào các trường khác nhau của file access, nhưng mỗi trường lại có liên quan tới nhau, khi nhập vào 1 table thì nó sẽ sinh ra ID tự động ID này chính là cái mà table khác dùng để dựa vào ID để lấy dữ liệu, vậy nếu nhập vào từng table thì việc ID bên này và nhập ID bên table kia làm sao, có phải mình phải dùng code nào đó để đọc ID bên này nhập qua ID bên kia theo đúng điều kiện ko, mình rất khó hiểu chổ này, mong bạn giúp mình
 
bạn có rõ về cái ứng với mỗi lúc kich vào table thì nó sẽ ra code nhập tương ứng không, mình cũng có rất nhiều file excel có cấu trúc giống nhau muốn nhập vào các trường khác nhau của file access, nhưng mỗi trường lại có liên quan tới nhau, khi nhập vào 1 table thì nó sẽ sinh ra ID tự động ID này chính là cái mà table khác dùng để dựa vào ID để lấy dữ liệu, vậy nếu nhập vào từng table thì việc ID bên này và nhập ID bên table kia làm sao, có phải mình phải dùng code nào đó để đọc ID bên này nhập qua ID bên kia theo đúng điều kiện ko, mình rất khó hiểu chổ này, mong bạn giúp mình
Như mình đã nói ở bài số #7 vấn đề đau đầu là ID với các mối quan hệ trong bảng, tùy trường hợp mình khắc phục thôi.
Trường hợp của bạn mình nghĩ ID phải tạo từ excel quá, và dĩ nhiên trường ID bên Access của bạn phải chỉnh lại cho nó tương thích với trường ID bên Excel là text hoặc number chứ không phải Auto number nhé.
 
Cách bổ xung exel vào Access không trùng lặp

Mình có fỉle ví dụ nhờ các bác chỉ dẫn dùm mình: file exel khi mình đổ làm đầu tiên vào Table1 (file Access) thì không sao nhưng khi mình bổ sung dòng mới vào file Exel thì khi đổ lần 2 vào bảng thì nó nhân đôi các dònglúc trước đã đổ vào rồi và bổ sung thêm dòng mới. Vậy có cách nào dựa trên file của mình đã làm khi đổ lần 2 sẽ không nhân đôi các dòng trước đã đổ không ? Mong các bác giúp đễ
 

File đính kèm

  • Hoi.rar
    7.8 KB · Đọc: 62
Lần chỉnh sửa cuối:
Mình mới đăng ký vào diễn đàn.thấy các bạn rất giỏi lập trình trên access!mình cũng muốn học nhưng tìm nhiều sách rồi, đọc và thử nhưng cũng không có gì ổn cả!xin hãy chỉ cho mình cách học access ổn ổn một chút nha!cám ơn các bạn nhiều lắm!các bác nào có kinh nghiệm mail cho mình theo địa chỉ: thpttanyen@gmail.com
 
Cách đơn giản nhất là xóa trống Table Ac trước khi đổ dữ liệu mới. Có thể làm thủ công hoặc VBA để làm
 
Mình có fỉle ví dụ nhờ các bác chỉ dẫn dùm mình: file exel khi mình đổ làm đầu tiên vào Table1 (file Access) thì không sao nhưng khi mình bổ sung dòng mới vào file Exel thì khi đổ lần 2 vào bảng thì nó nhân đôi các dònglúc trước đã đổ vào rồi và bổ sung thêm dòng mới. Vậy có cách nào dựa trên file của mình đã làm khi đổ lần 2 sẽ không nhân đôi các dòng trước đã đổ không ? Mong các bác giúp đễ
Cho mình hỏi thêm là bạn nhập dữ liệu lần 2 vào bằng cách nào vậy bạn ?
 
Các bạn ơi tôi mới tập tễnh tự học Access nên cũng coi như chưa biết gì. Có vấn đề sau nhờ các bạn biết chỉ giúp và thật chi tiết giùm nhe.
Tôi lặp một bản tính số liệu công tơ điện, tôi muốn biết tháng nầy so với tháng trước công tơ đếm được bao nhiêu Kwh điện thì tôi phải dùng hàm gì? Cách thức nhập. xin được cảm ơn trước nhe.
 
to bác lopop và bác libero bác nên liên hệ với bác solomon 2211 ấy, tui nghe giang hồ đồn bác ấy là cao thủ access đấy. goodluck!
 
Web KT
Back
Top Bottom