Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datensatz aus Access Tabelle1 in Tabelle 2 kopiere

Datensatz aus Access Tabelle1 in Tabelle 2 kopiere
02.12.2012 10:48:14
Marco
Guten Tag Forum
Danke diesem Forum habe ich schon einige Ideen umsetzen können.
Nun habe ich ein Frage:
Ich versuche mittels VBA aus Excel von der Access Tabelle"DatenTransver" einen ausgewählten Datensatz in die Tabelle"DatenTransverAktiv" zu kopieren. Die Tabellen befinden sich in der selben .mdb
Bei der Prozedur wir ein Fehler bei
rs_daten2.Fields(i) = rs_daten.Fields(i).Value
ausgeben "ein Objekt, das dem angeforderten Namen oder Ordnerveweis entspricht, kann nicht gefunden werden. LZF-NR 3265
was mache ich da falsch,
Besten Dank
Marco
Hier mein Code
in Modul
Public AcsDbName As String
Public AcsDbSource As String
Public AcsDbSource2 As String
Public pfad As String
Public conn As New ADODB.Connection
Public rs_daten As New ADODB.Recordset
Public rs_daten2 As New ADODB.Recordset
Public ID As String
'****************************************
Sub Archiv_AuftraglisteKunden_Lesen()
Dim i As Byte
Rem  Access
With Uf_Exe.Controls(Uf_Exe.ComboVar)
VarOBez = .List(.ListIndex, 1)
VarANr = .List(.ListIndex, 2)
VarAStatus = .List(.ListIndex, 4)
End With
Rem: öffne Access DB
StartStammdatei
rs_daten.Index = "ID"        'Archiv auslesen
rs_daten.Seek (VarANr)
rs_daten2.Index = "ID"  'Aktiver Auftrag
Do Until rs_daten.EOF
If rs_daten.Fields("AuftagNr") = VarANr Then
Dim trans
For i = 1 To 21
rs_daten2.Fields(i) = rs_daten.Fields(i).Value
Next i
End If
Loop
Rem: Schliesse Access DB
DB_Close
End Sub

Sub StartStammdatei()
nochmals:
AcsDbName = "D:\Projekt\AuftraglisteKunden.mdb"
AcsDbSource = "DatenTransfer"
AcsDbSource2 = "DatenTransferAktiv"
On Error GoTo schliessen
pfad = ActiveWorkbook.Path & AcsDbName
Rem: öffnet Access DB
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & pfad
Set rs_daten = New ADODB.Recordset  'Datenblatt 1
With rs_daten
.ActiveConnection = conn
.CursorType = adOpenKeyset
.CursorLocation = adUseServer
.LockType = adLockOptimistic
.Source = AcsDbSource
.Open Options:=adCmdTableDirect
End With
Set rs_daten2 = New ADODB.Recordset  'Datenblatt 2
With rs_daten2
.ActiveConnection = conn
.CursorType = adOpenKeyset
.CursorLocation = adUseServer
.LockType = adLockOptimistic
.Source = AcsDbSource2
.Open Options:=adCmdTableDirect
End With
Exit Sub
schliessen:
Rem: Schliesse Access DB
DB_Close
GoTo nochmals
End Sub
Sub DB_Close()
On Error Resume Next
rs_daten.Update             'Actualisiert Access DB
rs_daten2.Update
rs_daten.Close              ' Schliesst Datenblatt Access
rs_daten2.Close
Set rs_daten = Nothing
Set rs_daten2 = Nothing
conn.Close                  'Schliesst Datei Access
Set conn = Nothing
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datensatz aus Access Tabelle1 in Tabelle 2 kopiere
02.12.2012 11:36:47
fcs
Hallo Marco,
mich wundert, dass der Fehler erst in dieser Zeile auftritt.
Das liegt aber wahrscheinlich an der Fehlerbehandlung in den verschiedenen Sub-Routinen, die meistens nicht spezifisch auf bestimmte Fehler reagiert, sondern pauschal weitere Aktionen ausführt.
Der Fehler steckt wahrscheinlich hier:
Sub StartStammdatei()
nochmals:
AcsDbName = "D:\Projekt\AuftraglisteKunden.mdb"
AcsDbSource = "DatenTransfer"
AcsDbSource2 = "DatenTransferAktiv"
On Error GoTo schliessen
pfad = ActiveWorkbook.Path & AcsDbName
Rem: öffnet Access DB
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & pfad
Der Variablen "AcsDbName" weist du den Datenbank-Dateinamen inklusive Verzeichnis zu.
Dann berechnest du "pfad", indem du das Verzeichnis der Excelmappe vor dem Datenbanknamen einfügst.
Variable "pfad" hat dann eine Wert ähnlich
C:\MyeinProjekt\ExceldateiD:\Projekt\AuftraglisteKunden.mdb"
Damit funktioniert dann die conn.Open-Methode nicht und es kommt zu einem Fehler-Abruch.
Wenn die Datenbank im gleichen Verzeichnis liegt wie die Exceldatei, dann muss Variable "AcsDbName" anders vorgegeben werden.
AcsDbName = "AuftraglisteKunden.mdb"
und pfad wie folgt berechnet werden:
pfad = ActiveWorkbook.Path & "\" & AcsDbName
Auf jeden Fall muss du sicherstellen, dass Verzeichnis und Dateiname in der Variablen "pfad" korrekt zusammenfügt werden.
Gruß
Franz

Anzeige
AW: Datensatz aus Access Tabelle1 in Tabelle 2 kopiere
02.12.2012 12:02:04
Marco
Hallo Franz
Danke für Deine schnelle Antwort.
Ich habe nur einen Teil der gesamte Codes gepostet. Den Pfad habe ich dummerweise vollständig ausgeschrieben. Habe dies nun geändert und der Code läuft bis zur geposteten Fehlermeldung durch.
Wie nun weiter
Gruss Marco

AW: Datensatz aus Access Tabelle1 in Tabelle 2 kopiere
02.12.2012 15:22:38
Luschi
Hallo Marco,
in Deinem Vba-Code ist Einiges nicht korrekt:
AcsDbName = "D:\Projekt\AuftraglisteKunden.mdb"
pfad = ActiveWorkbook.Path & AcsDbName
Mit 'MsgBox pfad' wirst Du erkennen, daß hier etwas nicht stimmt.
Dann willst Du in eine 2. Access-Tabelle aus der 1. Tabelle etwas kopieren, ich interpretiere das mal mit anhängen.
Das muß man ADO auch mitteilen, ansonsten wird es in den 1. Datensatz (DS) der 2. Tabelle geschrieben.
Die Schreiboperation für jeden DS (nicht Datenfeld) muß mit der Update-Anweisung abgeschlossen _ werden:

For i = 1 To 21
rs_daten2.Fields(i) = rs_daten.Fields(i).Value
Next i
rs_daten2.Update
Die Seek-Methode hat 2 Parameter, wovon keiner der beiden woihl optional ist. Du benutzt nur einen.
Aus der Access-Hilfe - Seek-Methode (ADO)
Findet 'Seek' die gewünschte Zeile nicht, tritt kein Fehler auf, und die Zeile wird am Ende des Recordset-Objekts positioniert.
Man muß also überprüfen, ob etwas gefunden wurde.

If Not rs_daten.EOF Then
'Dein Übernahme-Code
Else
MsgBox "Nix gefunden !",16, "zur Information..."
End If
Die 'Do Until rs_daten.EOF'-Schleife ist eine Endlosschleife, da es keinen neuen Suchbefehl oder MoveNext-Befehl zum Weiterschalten des Datensatz-Zeigers im Recordset gibt.
Wenn Du eine Access-Demo-DB mit Testdaten hier bereitstellst, werde ich oder einer der vielen fleißigen Helfer das schon geradebiegen.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Datensatz aus Access Tabelle1 in Tabelle 2 kopiere
02.12.2012 16:33:23
Marco
Hallo Luschi
Besten Dank für Deinen Input.
Ich habe Seek entfernt und meinen Code mit "if not ..." angepasst und mit der Update-Anweisung abgeschlossen. Zudem habe ich für die Tabelle2, welche beim starten keine DS enthält, mit rs_daten2.AddNew ergänzt (nur Temporäre Daten enthält und wieder gelöscht werden) und nun funzt es bestens.
Nochmals Danke Euch alle
Gruss Marco

48 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige