[SQL] MS Access 테이블로 내보내기 데이터를 엑셀 VBA를 사용하여
SQLMS Access 테이블로 내보내기 데이터를 엑셀 VBA를 사용하여
나는 현재 코드가 각 행을 통해 MS 액세스 테이블에 데이터를 삽입 루핑, 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
위의 코드 기록의 몇 백 개 라인에 대한 벌금을 작동하지만, 분명히 수출에 더 많은 데이터를 할 것이다, 25000 개 기록처럼, 모든 레코드를 반복하지 않고 수출에 가능하며 Ms.Access에 대한 모든 데이터를 삽입 대량으로 하나의 SQL INSERT 문 한 가지 표?
어떤 도움이 많이 이해할 수있을 것이다.
편집 : 문제가 해결
그냥은 불과 3 초 (27,648 기록을 사람이에 대한 추구 경우 정보를, 나는 검색을 많이 해봤 나를 위해 잘 작동 될 수있는 다음 코드를 발견하고는 SQL INSERT로 인해 실제 빠르고 !!!! ) :
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
그럼에도 불구하고, 대신에 "선택 *"사용하는 특정 필드의 이름을 추가 할 필드 이름을 추가 할 수있는 다양한 방법을 시도 작동하지만 지금은 작동 할 수 없습니다.
해결법
-
==============================
1.많은 수의 행과 Excel의 범위를 들어 당신은 Excel에서 Access.Application 개체를 만드는 경우 일부 성능 향상을 본 후 Access로 Excel 데이터를 가져 오는 데 사용할 수 있습니다. 아래의 코드는 다음의 시험 데이터를 포함하는 동일한 Excel 문서에서 VBA 모듈에
많은 수의 행과 Excel의 범위를 들어 당신은 Excel에서 Access.Application 개체를 만드는 경우 일부 성능 향상을 본 후 Access로 Excel 데이터를 가져 오는 데 사용할 수 있습니다. 아래의 코드는 다음의 시험 데이터를 포함하는 동일한 Excel 문서에서 VBA 모듈에
Option Explicit Sub AccImport() Dim acc As New Access.Application acc.OpenCurrentDatabase "C:\Users\Public\Database1.accdb" acc.DoCmd.TransferSpreadsheet _ TransferType:=acImport, _ SpreadSheetType:=acSpreadsheetTypeExcel12Xml, _ TableName:="tblExcelImport", _ Filename:=Application.ActiveWorkbook.FullName, _ HasFieldNames:=True, _ Range:="Folio_Data_original$A1:B10" acc.CloseCurrentDatabase acc.Quit Set acc = Nothing End Sub
-
==============================
2.@ 아메드
@ 아메드
아래 코드는 그 MS 액세스에 삽입 명명 된 범위에서 지정 필드. 이 코드의 좋은 점은 당신이 내가 엑셀 열 "하하"라는 한 볼 수 있듯이 (당신이 사용하는 경우 * 다음 필드는 엑셀 및 액세스 사이에 정확히 일치해야한다) 도대체 당신이 원하는대로 엑셀에서 필드 이름을 수 있다는 것입니다 심지어 액세스 열이 "DTE"라고하지만.
Sub test() dbWb = Application.ActiveWorkbook.FullName dsh = "[" & Application.ActiveSheet.Name & "$]" & "Data2" 'Data2 is a named range sdbpath = "C:\Users\myname\Desktop\Database2.mdb" sCommand = "INSERT INTO [main] ([dte], [test1], [values], [values2]) SELECT [haha],[test1],[values],[values2] FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh Dim dbCon As New ADODB.Connection Dim dbCommand As New ADODB.Command dbCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sdbpath & "; Jet OLEDB:Database Password=;" dbCommand.ActiveConnection = dbCon dbCommand.CommandText = sCommand dbCommand.Execute dbCon.Close End Sub
from https://stackoverflow.com/questions/16161865/using-excel-vba-to-export-data-to-ms-access-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 나는 SELECT 쿼리에서 계산 필드를 다시 사용할 수 있습니까? (0) | 2020.04.09 |
---|---|
[SQL] 최대 재귀 (100)는 문이 완료되기 전에 소진 된 (0) | 2020.04.09 |
[SQL] 엑셀 함수는 워크 시트 데이터에 대한 쿼리 SQL-처럼 만들어? (0) | 2020.04.09 |
[SQL] MySQL은 달과 연도 별 그룹 (0) | 2020.04.09 |
[SQL] INSERT ... ON DUPLICATE KEY (아무것도하지 않고) (0) | 2020.04.09 |