Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
800to804
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
800to804
800to804
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Datenimport aus Access
18.09.2006 17:09:16
Peter
Hi,
hab mir ein makro aufgezeichnet zum importieren von daten aus einer access-datenbank. kann man dort auch einstellen dass man zum beispiel nur die ersten 100 zeilen der access-tabelle importieren möchte?
vielen dank!
lg peter

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenimport aus Access
18.09.2006 17:57:43
Peter
Hallo Peter,
ich meine 'einstellen' kannst du das nicht, das musst du in einer Schleife schon selbst zählen und dann abbrechen.
Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
AW: Datenimport aus Access
18.09.2006 19:33:10
Peter
hi peter,
danke für deine antwort. wie kann ich den zählen wieviele datensätze er schon importiert hat?
vielen dank!
lg peter
AW: Datenimport aus Access
18.09.2006 20:24:02
Peter
Hallo Peter,
im Prinzip so:
Du definierst dir einen Zähler und addierst beim Lesen aus Access jedesmal 1 drauf.
Wenn 100 erreicht ist, gehst du auf Exit Sub oder wohin immer du möchtest.
Ohne dein Makro zu kennen, stochert man allerdings im Dunklen.
Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
Anzeige
AW: Datenimport aus Access
18.09.2006 20:40:48
Peter
hi peter,
mein makro zum einlesen sieht so aus:

Sub Import_Test()
With ActiveSheet.QueryTables.Add(Connection:=Array( _
"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=V:\Leitner\Auswertung\AX_Process.mdb;Mode=Share Deny Writ" _
, _
"e;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine" _
, _
" Type=5;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New" _
, _
" Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Com" _
, _
"pact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False" _
), Destination:=Range("A1"))
.CommandType = xlCmdTable
.CommandText = Array("AX_Process")
.Name = "AX_Process"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceDataFile = "V:\Leitner\Auswertung\AX_Process.mdb"
.Refresh BackgroundQuery:=False
End With
End Sub

wie soll ich da einen zaehler laufen lassen bzw. kann man diese routine besser gestalten?
vielen dank!
lg peter
Anzeige
AW: Datenimport aus Access
18.09.2006 22:32:30
Coach
Hallo Peter,
am einfachsten dürfte es sein, die Abfrage wie folgt zu ändern:
.CommandType = xlCmdSql
.CommandText = Array("Select Top 100 * From AX_Process")
Gruß Coach
AW: Datenimport aus Access
18.09.2006 23:19:08
peter
hi coach,
vielen dank! das ist super! aber wie würde es gehen wenn ich dann mal von datensatz 300 bis 400 z.b. brauche. was muss ich dann anstelle von top 100 schreiben?
vielleicht kannst mir das auch noch sagen! vielen dank!
lg peter
AW: Datenimport aus Access
19.09.2006 09:46:05
coach
Hallo Peter,
dafür gibt es keinen direkten SQL-Befehl, dafür müßte man über die Where-Klausel die Datensätze nach Kriterien (>=X und Option Explicit

Sub ImportFromACCESS()
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim Master As Workbook
Dim j As Integer
Set Cn = New ADODB.Connection
Set Rs = New ADODB.Recordset
Set Master = ThisWorkbook
Cn.Open "Provider =Microsoft.Jet.OLEDB.4.0; Data Source =C:\Test.mdb;"
Rs.Open "Select Top 500 * From tbl_Test", Cn, CursorType:=adOpenKeyset, LockType:=adLockOptimistic
Application.ScreenUpdating = False
With Master.Sheets("Test")
For j = 0 To Rs.Fields.Count - 1
.Cells(1, j + 1).Value = Rs.Fields(j).Name
Next
Rs.MoveLast
Rs.AbsolutePosition = 401 '1 für den 1. DS etc
.Cells(2, 1).CopyFromRecordset Rs
End With
Application.ScreenUpdating = True
Rs.Close
Cn.Close
Set Cn = Nothing
Set Rs = Nothing
End Sub

Bitte Verweis auf MS ADO (z.B. 2.8) setzen.
Gruß Coach
Anzeige
AW: Datenimport aus Access
20.09.2006 09:29:28
peter
hi coach,
vielen dank für deine antwort. das funktioniert sehr gut. leider hab i noch nicht durchschaut wie das geht damit ich sagen kann welche datensätze ich importieren will. vielleicht könntest du mir das noch kurz erklären.
vielen vielen dank!
lg peter
AW: Datenimport aus Access
20.09.2006 12:21:32
Coach
Hallo Peter,
mit
Rs.Open "Select Top 500 * From tbl_Test", Cn, CursorType:=adOpenKeyset, LockType:=adLockOptimistic
gibst Du die Anzahl der Datensätze an, mit
Rs.AbsolutePosition = 401 '1 für den 1. DS etc
definierst Du den gewünschten 1. Datensatz und damit indirekt die Anzahl der Datensätze.
Du könntest damit z.B. die Umsätze von Vertretern nach Größe absteigend sortiert auslesen und dann die auf Position 11 bis 20 ausgeben, also "Select Top 20" + .AbsolutePosition = 11
Gruß Coach
Anzeige
AW: Datenimport aus Access
20.09.2006 12:26:54
peter
hi coach,
vielen dank für deine hilfe bis jetzt. ich denke ich habe leider mein problem falsch dargestellt. hab schon probiert damit zum ziel zu kommen. geht leider nicht.
ich habe eine access-tabelle mit ca. 300000 datensätzen (messwerte) und möchte diese für weitere berechnungen in excel exportieren. excel hat aber bei 65... zeilen eine begrenzung. ich möchte jetzt immer pakete zu 65000 datensätzen in einzelne excel-sheets exportieren. solange bis alles daten in excel sind.
wie kann man denn das am einfachsten angehen?
vielen dank im voraus!
lg peter
AW: Datenimport aus Access
20.09.2006 14:24:48
Coach
Hallo Peter,
folgender Code verteilt Deine Daten auf Tabellen mit Namen Part1...N
Option Explicit

Sub ImportFromACCESS()
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim Master As Workbook
Dim i As Long, j As Integer
Dim ws As Worksheet
Application.ScreenUpdating = False
'Alle alten Importtabellen löschen
Application.DisplayAlerts = False
For Each ws In ThisWorkbook.Worksheets
If ws.Name Like "Part*" Then ws.Delete
Next
Application.DisplayAlerts = True
Set Cn = New ADODB.Connection
Set Rs = New ADODB.Recordset
Set Master = ThisWorkbook
Cn.Open "Provider =Microsoft.Jet.OLEDB.4.0; Data Source =C:\Test.mdb;"
Rs.Open "Select * From tbl_Test2 Order By ID", Cn, CursorType:=adOpenKeyset, LockType:=adLockOptimistic
Rs.MoveLast
For i = 1 To (Int(Rs.RecordCount / 65000) + 1)
Set ws = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
ws.Name = "Part" & i
With ws
For j = 0 To Rs.Fields.Count - 1
.Cells(1, j + 1).Value = Rs.Fields(j).Name
Next
Rs.AbsolutePosition = (65000 * (i - 1)) + 1
.Cells(2, 1).CopyFromRecordset Rs
.Rows("65002:" & ws.Rows.Count).ClearContents
End With
Next
Application.ScreenUpdating = True
Rs.Close
Cn.Close
Set Cn = Nothing
Set Rs = Nothing
Application.ScreenUpdating = True
End Sub

Bitte MDB und Tabelle und Sortierfeld entsprechend anpassen.
Gruß Coach
Anzeige
AW: Datenimport aus Access
20.09.2006 15:36:33
peter
hallo coach,
vielen vielen dank! es funktioniert bestens! danke nochmal für deine mühe. jetzt muss ich noch einiges an auswertearbeiten durchführen, aber mit diesen dingen kenn ich mich in vba besser aus als mit access! danke nochmal!
lg peter
zu
20.09.2006 21:00:51
zu
zu

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige