Làm thế nào để thêm số bản ghi trắng trong Access bằng số bản ghi đã pase vào (4 người xem)

  • Thread starter Thread starter na_an
  • Ngày gửi Ngày gửi
Liên hệ QC

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

na_an

Thành viên chính thức
Tham gia
23/2/10
Bài viết
89
Được thích
4
Chào các bạn!
Cho mình hỏi chút.
Hàng ngày mình phải down dữ liệu trên mạng về giống như bảng book1( mình có gửi kèm file). Sau đó mình phải copy dữ liệu ấy sang Access để tổng hợp báo cáo. Để copy dữ liệu từ Excel sang Access việc đầu tiên mình phải làm là mở Acc ra thêm 10 bản ghi trắng vào sau đó mới copy và pase dữ liệu từ excel vào được. Nhưng mỗi lần pase dữ liệu xong Access chỉ thêm cho mình 1 bản ghi trắng thôi. Bây giờ mình muốn sau khi mình pase dữ liệu từ Excel vào Access sẽ tự động thêm cho mình số bản ghi trắng bằng với số bản ghi mình đã pase vào. Bạn nào biết cách làm chỉ mình với.
Mình cảm ơn các bạn nhiều.
 

File đính kèm

Không cần tạo trước các bản ghi trắng đâu bạn ơi. Chỉ cần nhấn vào cái record selector bên trái bản ghi trắng duy nhất đó, paste vô là được.
Sở dĩ bạn paste không được vì có lẽ bạn để con trỏ chuột lơ lửng đâu đó trong 1 field nào đó, mà không click chọn toàn record.
 
Không cần tạo trước các bản ghi trắng đâu bạn ơi. Chỉ cần nhấn vào cái record selector bên trái bản ghi trắng duy nhất đó, paste vô là được.
Sở dĩ bạn paste không được vì có lẽ bạn để con trỏ chuột lơ lửng đâu đó trong 1 field nào đó, mà không click chọn toàn record.
Vậy viết code cho import vào Acc luôn cho khỏe.
Dùng code sau thử
PHP:
Option Explicit 'DomFootWear-PTM0412'
Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
   ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Dim myPath As String, myMDB As String, tblName As String, sKT As Boolean
Dim ArrData(), arrField()
Dim endR As Long, r As Long, i As Long, k As Long, s As Long, SoDongHD As Long, SoDongCT As Long
Dim cn As ADODB.Connection, rs As ADODB.Recordset
Sub UpdateToAcc()
KetNoi
ConvertDataToArr
'Gan ArrData vao Tbl Tonghop'
tblName = "Tonghop"
rs.Open tblName, cn, 3, 3, adCmdTable
'cn.Execute "Delete * from " & tblName'
arrField() = Array("Bienso", "sokmdiduoc", "TGDCnokhichay", "TGDCnokhidung", "solandung", "TGdung", "vuottocdo", "tocdomax")
For i = 1 To UBound(ArrData)
  With rs
    .AddNew
    For k = 1 To UBound(arrField) + 1
      .Fields(arrField(k - 1)) = ArrData(i, k)
      .Update
    Next k
  End With
Next i
BoKetNoi
Erase ArrData()
End Sub
Sub ConvertDataToArr()
With Sheets("TongHop")
  endR = .Cells(65000, 5).End(xlUp).Row
  ArrData = .Range("A5:H" & endR).Value
End With
End Sub
Sub KetNoi()
GetPath
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & "Data Source=" & myPath & myMDB & ";"
Set rs = New ADODB.Recordset
End Sub
Sub BoKetNoi()
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
End Sub
Sub GetPath()
myPath = ActiveWorkbook.Path & "\"
myMDB = "db1" & ".mdb"
End Sub
Nhớ add thêm control Microsoft ActiveX Data Object ...
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn hướng dẫn mình viết code import vào acc nhưng mõi ngày mình lấy về một bảng như gửi cho các bạn xem ấy. Tháng có bao nhiêu ngày là bấy nhiêu bảng. Nếu viết code thì phải viết cho bằng đấy bảng hả bạn. Ví dụ tháng 2 có 28 ngày thì ngày 1 file sẽ mang tên 1.xls, ngày 2 là 2.xls... sang đến tháng 3 mình lại tạo 1folder mới mang tên là T3 trong folder này lại gồm những file là các ngày trong tháng.
 
Bạn hướng dẫn mình viết code import vào acc nhưng mõi ngày mình lấy về một bảng như gửi cho các bạn xem ấy. Tháng có bao nhiêu ngày là bấy nhiêu bảng. Nếu viết code thì phải viết cho bằng đấy bảng hả bạn. Ví dụ tháng 2 có 28 ngày thì ngày 1 file sẽ mang tên 1.xls, ngày 2 là 2.xls... sang đến tháng 3 mình lại tạo 1folder mới mang tên là T3 trong folder này lại gồm những file là các ngày trong tháng.
Tại sao không dùng 1 file và nhiều sh theo ngày hay là 1 sh mà có thêm cột ngày. Và mình import hết vào.
Bạn nên cho 1 folder như yêu cầu mình sẽ gợi ý hướng làm tổng hợp nhất.
 
Mình gửi cho bạn Folder của tháng 1 và tháng 2. Sang tháng 3 dữ liệu mình down về mình cũng để tương tự như thế. Còn vấn đề nữa hôm trước mình quên chưa nói. Vì dữ liệu down về không có tên đơn vị mà chỉ có biển số xe thôi nên khi đưa sang acc để tổng hợp mình phải thêm tên đơn vị và ngày vào nữa. Phần này mình dùng query để update được rồi.
Mình mô tả lại công việc mình phải làm hàng ngày nhé. Mỗi ngày mình down dữ liệu về 1 lần. Sau đó mình copy dữ liệu down về sang acc. Mỗi lần muốn pase được dữ liệu từ excel sang access mình phải mở bảng tổng hợp trong access ra thêm số bản ghi trắng bằng với số dòng trong bảng dữ liệu excel rồi mới pase dữ liệu vào được. Sau đó mình dùng query để update ngày và đơn vị. Cái mình muốn bây giờ là sau khi làm xong công việc pase dữ liệu từ excel sang và update xong thì aceess sẽ tự động thêm cho mình số bản ghi trắng bằng với số bản ghi vừa pase vào. Hiện tại dữ liệu mình down về ít nên việc copy và pase thủ công như thế này không ảnh hưởng gì nhưng sau này dữ liệu sẽ nhiều hơn lên ví dụ tăng lên 150 dòng trong excel chẳng hạn. Như vậy để pase được 150 dòng này vào access thì mình phải thêm 150 bản ghi trắng. Mà việc này làm thủ công thì mất thời gian quá.
Bạn xem có cách nào thì chỉ giúp mình với.
Cảm ơn bạn nhiều!
 

File đính kèm

Mình gửi cho bạn Folder của tháng 1 và tháng 2. Sang tháng 3 dữ liệu mình down về mình cũng để tương tự như thế. Còn vấn đề nữa hôm trước mình quên chưa nói. Vì dữ liệu down về không có tên đơn vị mà chỉ có biển số xe thôi nên khi đưa sang acc để tổng hợp mình phải thêm tên đơn vị và ngày vào nữa. Phần này mình dùng query để update được rồi.
Mình mô tả lại công việc mình phải làm hàng ngày nhé. Mỗi ngày mình down dữ liệu về 1 lần. Sau đó mình copy dữ liệu down về sang acc. Mỗi lần muốn pase được dữ liệu từ excel sang access mình phải mở bảng tổng hợp trong access ra thêm số bản ghi trắng bằng với số dòng trong bảng dữ liệu excel rồi mới pase dữ liệu vào được. Sau đó mình dùng query để update ngày và đơn vị. Cái mình muốn bây giờ là sau khi làm xong công việc pase dữ liệu từ excel sang và update xong thì aceess sẽ tự động thêm cho mình số bản ghi trắng bằng với số bản ghi vừa pase vào. Hiện tại dữ liệu mình down về ít nên việc copy và pase thủ công như thế này không ảnh hưởng gì nhưng sau này dữ liệu sẽ nhiều hơn lên ví dụ tăng lên 150 dòng trong excel chẳng hạn. Như vậy để pase được 150 dòng này vào access thì mình phải thêm 150 bản ghi trắng. Mà việc này làm thủ công thì mất thời gian quá.
Bạn xem có cách nào thì chỉ giúp mình với.
Cảm ơn bạn nhiều!
Xin hỏi:
1/ Quy trình bạn down là thế nào, mở web copy xuống?
2/ Liệu tất cả các file 1, 2, ... có thể thành 1 file và chung trong 1 sh cụ thể như
Ngay---Bienso---
Còn không phải viết thêm 1 code để tổng hợp lại. Mất công hơn, bạn nói quy trình lấy dữ liệu từ web vế (1) sẽ cụ thể hơn.
3/ Khuyến cáo tên Sh, tên Field, tên file nên là chữ không dấu và kg có khoản trắng.
Còn cái vụ tạo 10, 150 hay n dòng trắng trong tbl thì so easy.
 
Mình gửi cho bạn Folder của tháng 1 và tháng 2. Sang tháng 3 dữ liệu mình down về mình cũng để tương tự như thế. Còn vấn đề nữa hôm trước mình quên chưa nói. Vì dữ liệu down về không có tên đơn vị mà chỉ có biển số xe thôi nên khi đưa sang acc để tổng hợp mình phải thêm tên đơn vị và ngày vào nữa. Phần này mình dùng query để update được rồi.
Mình mô tả lại công việc mình phải làm hàng ngày nhé. Mỗi ngày mình down dữ liệu về 1 lần. Sau đó mình copy dữ liệu down về sang acc. Mỗi lần muốn pase được dữ liệu từ excel sang access mình phải mở bảng tổng hợp trong access ra thêm số bản ghi trắng bằng với số dòng trong bảng dữ liệu excel rồi mới pase dữ liệu vào được. Sau đó mình dùng query để update ngày và đơn vị. Cái mình muốn bây giờ là sau khi làm xong công việc pase dữ liệu từ excel sang và update xong thì aceess sẽ tự động thêm cho mình số bản ghi trắng bằng với số bản ghi vừa pase vào. Hiện tại dữ liệu mình down về ít nên việc copy và pase thủ công như thế này không ảnh hưởng gì nhưng sau này dữ liệu sẽ nhiều hơn lên ví dụ tăng lên 150 dòng trong excel chẳng hạn. Như vậy để pase được 150 dòng này vào access thì mình phải thêm 150 bản ghi trắng. Mà việc này làm thủ công thì mất thời gian quá.
Bạn xem có cách nào thì chỉ giúp mình với.
Cảm ơn bạn nhiều!
Nếu bạn chịu sửa cái tên sheet thành tên không có dấu Tiếng Việt và tên field trong bảng Access và Excel lại cho giống nhau thì mình có cách giúp bạn.
 
Nếu bạn chịu sửa cái tên sheet thành tên không có dấu Tiếng Việt và tên field trong bảng Access và Excel lại cho giống nhau thì mình có cách giúp bạn.

Đợi bạn trả lời lâu quá, thôi thì mình tự chỉnh trường trong Access table giống như Excel file và chỉnh các tên sheet của các file Excel thành sheet TH, như vậy code nhập tất cả file có chứa trong folder vào 1 bảng Access sẽ là:

Mã:
Private Sub Command0_Click()
 Dim strPathFile, strFile, strPath, strTable As String
   DoCmd.SetWarnings (False)
        strPath = "C:\Users\Le Phat Dom\Desktop\New folder\T2\" [B][COLOR=darkgreen]' duong dan den folder can nhap[/COLOR][/B]
        strTable = "tonghop"
        
        
        strFile = Dir(strPath & "*.xls")
        
        Do While Len(strFile) > 0
              strPathFile = strPath & strFile
              DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
              strTable, strPathFile, True, "TH!A4:H200"
              strFile = Dir()
        Loop
        MsgBox "Da nhap xong du lieu ", vbExclamation, "Nhap du lieu tu Excel"
      '  Me.Application.CloseCurrentDatabase
   DoCmd.SetWarnings (True)
        
End Sub

Trên đây code chưa linh động vì phải chỉnh lại đường dẫn, còn nếu muốn nó linh động phải thêm code khác vào.
 

File đính kèm

Đợi bạn trả lời lâu quá, thôi thì mình tự chỉnh trường trong Access table giống như Excel file và chỉnh các tên sheet của các file Excel thành sheet TH, như vậy code nhập tất cả file có chứa trong folder vào 1 bảng Access sẽ là:

Mã:
Private Sub Command0_Click()
Dim strPathFile, strFile, strPath, strTable As String
DoCmd.SetWarnings (False)
strPath = "C:\Users\Le Phat Dom\Desktop\New folder\T2\" [B][COLOR=darkgreen]' duong dan den folder can nhap[/COLOR][/B]
strTable = "tonghop"
 
 
strFile = Dir(strPath & "*.xls")
 
Do While Len(strFile) > 0
strPathFile = strPath & strFile
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
strTable, strPathFile, True, "TH!A4:H200"
strFile = Dir()
Loop
MsgBox "Da nhap xong du lieu ", vbExclamation, "Nhap du lieu tu Excel"
' Me.Application.CloseCurrentDatabase
DoCmd.SetWarnings (True)
 
End Sub

Trên đây code chưa linh động vì phải chỉnh lại đường dẫn, còn nếu muốn nó linh động phải thêm code khác vào.


Mình bị ốm hôm nay mới đi làm được.
Mình làm thử như bạn hướng dẫn rồi. Nhưng mỗi lần import dữ liệu từ Excel sang thì nó lại lấy toàn bộ dữ liệu của tất cả các ngày đã có trước đó. Như thế dữ liệu bị dư thừa. Điều mình muốn ở đây là mõi lần import dữ liệu từ Excel sang Access thì nó chỉ lấy dữ liệu của ngỳa mới down về thôi chứ không phải lấy hết như thế. Có cách nào làm được việc đó? Bạn giúp mình với. Bạn xem file mình gửi kèm nhé.
Cảm ơn bạ nhiều nhiều!
 

File đính kèm

ThuNghi ơi cho hỏi một chút đi. Nếu làm theo cách của ThuNghi thì mỗi ngày down dữ liệu xuống lại phải viết lại code 1 lần cho bảng đó ah.
 
ThuNghi ơi cho hỏi một chút đi. Nếu làm theo cách của ThuNghi thì mỗi ngày down dữ liệu xuống lại phải viết lại code 1 lần cho bảng đó ah.
Nếu cần thì thêm dòng xóa cái cũ. Hay là chép sang chỗ khác.
Xóa thì dễ hơn nhiều so với update.
 
Nếu cần thì thêm dòng xóa cái cũ. Hay là chép sang chỗ khác.
Xóa thì dễ hơn nhiều so với update.
Dữ liệu mỗi nagỳ down về là một file riêng tương tj như file mình gửi. Mình muốn khi đưa sang acc thi dữ liệu được thêm vào bên dưới dữ liệu ngày hôm trước. Làm theo cách của Domfootwear thì dữ liệu bị thừa nhiều quá. Có cách nào không bạn giúp mình với.
 
Web KT

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

Back
Top Bottom