Obecnie używam następującego kodu do eksportu danych z arkusza roboczego do bazy danych MS Access, kod przechodzi przez każdy wiersz i wstawia dane do tabeli MS Access.Używanie Excel VBA do eksportowania danych do tabeli MS Access
Public Sub TransData()
Application.ScreenUpdating = False
Application.EnableAnimations = False
Application.EnableEvents = False
Application.DisplayAlerts = False
ActiveWorkbook.Worksheets("Folio_Data_original").Activate
Call MakeConnection("fdMasterTemp")
For i = 1 To rcount - 1
rs.AddNew
rs.Fields("fdName") = Cells(i + 1, 1).Value
rs.Fields("fdDate") = Cells(i + 1, 2).Value
rs.Update
Next i
Call CloseConnection
Application.ScreenUpdating = True
Application.EnableAnimations = True
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
Public Function MakeConnection(TableName As String) As Boolean
'*********Routine to establish connection with database
Dim DBFullName As String
Dim cs As String
DBFullName = Application.ActiveWorkbook.Path & "\FDData.mdb"
cs = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & DBFullName & ";"
Set cn = CreateObject("ADODB.Connection")
If Not (cn.State = adStateOpen) Then
cn.Open cs
End If
Set rs = CreateObject("ADODB.Recordset")
If Not (rs.State = adStateOpen) Then
rs.Open TableName, cn, adOpenKeyset, adLockOptimistic
End If
End Function
Public Function CloseConnection() As Boolean
'*********Routine to close connection with database
On Error Resume Next
If Not rs Is Nothing Then
rs.Close
End If
If Not cn Is Nothing Then
cn.Close
End If
CloseConnection = True
Exit Function
End Function
Powyższy kod działa dobrze dla kilkuset wierszy rekordów, ale najwyraźniej to będzie więcej danych na eksport, jak 25000 rekordów, możliwe jest eksportuj bez przechodzenia przez wszystkie rekordy i jedną instrukcję SQL INSERT, aby zbiorczo wstawić wszystkie dane do tabeli Ms.Access za jednym razem?
Każda pomoc będzie doceniana.
EDIT: problem został rozwiązany
Tylko dla informacji, jeśli ktoś dąży do tego, zrobiłem mnóstwo wyszukiwania i znaleźć następujący kod za pracę w porządku dla mnie, i to bardzo szybko ze względu na SQL INSERT (27648 rekordy w ciągu zaledwie 3 sekund !!!!):
Public Sub DoTrans()
Set cn = CreateObject("ADODB.Connection")
dbPath = Application.ActiveWorkbook.Path & "\FDData.mdb"
dbWb = Application.ActiveWorkbook.FullName
dbWs = Application.ActiveSheet.Name
scn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath
dsh = "[" & Application.ActiveSheet.Name & "$]"
cn.Open scn
ssql = "INSERT INTO fdFolio ([fdName], [fdOne], [fdTwo]) "
ssql = ssql & "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh
cn.Execute ssql
End Sub
Wciąż pracuje, aby dodać określone pola nazwa zamiast używać „Select *”, próbowali różnych sposobów dodawania nazwy pól, ale nie może zrobić to działa na razie.
@Fionnuala kod używa ADO..the CreateObject ("ADODB.Connection") stworzy obiekt ADO .. – Ahmed
dla pliku accdb, użyć 'SCN =„Provider = Microsoft.ACE.OLEDB. 12,0; Źródło danych = "& dbpath" –
Edycja powinna zostać opublikowana jako odpowiedź. Myślę, że to najlepszy sposób na transfer danych z Excela, a nawet z plików tekstowych za pomocą VBA. Wystarczy zaktualizować ciągi połączeń, na przykład Excel 8.0 do Excel 12.0 Xlm/Excel 12.0 dla nowszych wersji programu Excel. I oczywiście odpowiednik dostawcy ACE dla JET. – L42