Hallo,
ich bin neu hier. Ich haben foldendes Problem. Ich habe einen VBA-Code laut Buch abgeschrieben:
Hier der Code :
Option Compare Database
Option Explicit
Sub TextdateiInDirektbereich()
Dim strTextzeile As String
Open Application.CurrentProject.Path & "P:/klaus1.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, strTextzeile
Debug.Print strTextzeile
Loop
Close #1
End Sub
Bei der Ausführung mit F5 gibt es eine Fehlermeldung
Laufzeitfehler 52
Dateinamen oder Nummer falsch
Das Laufwerk ist da und die Datei auch!
Kann mir da jemand helfen ?
Schöne Grüsse aus dem Münsterland
KlaSur
Hallo,
warum verwendest Du nicht die eingebaute Importfunktion von Access ?
Mit Deiner Version hast Du ja auch noch das Problem die Zeile in die einzelenen Access Felder zu übertragen.
Generell schließe ich mich der Anmerkung von MzKlMu an. In der großen Mehrheit der Fälle ist es sinnvoller die eingebaute Text-Import-Funktionalität von Access zu verwenden (DoCmd.TransferText).
Zitat von: KlaSur am Oktober 06, 2023, 12:19:26Open Application.CurrentProject.Path & "P:/klaus1.txt" For Input As #1
Für den Dateipfad/-name solltest du einen Backslash anstatt des hier gezeigten Forward-Slash verwenden.
Außerdem ist es keine so gute Idee die Dateinummer hardcodiert in den Programmcode zu schreiben. Man sollte besser mit der FreeFile Funktion (https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/freefile-function?f1url=%3FappId%3DDev11IDEF1%26l%3Den-US%26k%3Dk(vblr6.chm1008926)%3Bk(TargetFrameworkMoniker-Office.Version%3Dv16)%26rd%3Dtrue) die nächste freie Nummer abrufen und in einer Variable für die weitere Verwendung speichern.
Zitat von: KlaSur am Oktober 06, 2023, 12:19:26Application.CurrentProject.Path & "P:/klaus1.txt"
Der fehler wird die Verknüpfung der beiden Pfade sein.
Lass den ersten Teil einfach weg, dann sollte es funktionieren.
Danke für eure Stellungnahmen!
Habe es bei ChatGPt einmal eingestellt. Da hat es sofort ein VBA Code ausgeworfen. Da bin ich gerade dabei den entsprechend einzustellen.
Sub ImportTXT()
Dim db As Database
Dim rs As Recordset
Dim strFilePath As String
Dim strTableName As String
' Pfad zur TXT-Datei angeben
strFilePath = "P:\3.00-090-A009167_A_Matze1.txt"
' Name der Zieltabelle angeben
strTableName = "Versuch"
' Datenbank öffnen
Set db = CurrentDb
' Tabelle erstellen oder leeren, falls sie bereits existiert
On Error Resume Next
db.TableDefs.Delete strTableName
On Error GoTo 0
' Tabelle erstellen
db.Execute "CREATE TABLE " & strTableName & " (Menge Number, Dateiname Text, Titel Text, Manager Text, Stichworter Text, Firma Text, Material Text, Materialstarke Text)" ' Hier die Felder entsprechend anpassen
' Recordset öffnen
Set rs = db.OpenRecordset(strTableName)
' TXT-Datei einlesen und in die Tabelle importieren
Open strFilePath For Input As #1
Do Until EOF(1)
Line Input #1, strLine
' Daten in einzelne Felder aufteilen (hier wird davon ausgegangen, dass die Felder durch Tabulatoren getrennt sind)
arrFields = Split(strLine, vbTab)
' Neue Zeile im Recordset hinzufügen und Daten einfügen
rs.AddNew
rs.Fields("Feld1").Value = arrFields(0) ' Hier die Felder entsprechend anpassen
rs.Fields("Feld2").Value = arrFields(1)
rs.Fields("Feld3").Value = arrFields(2)
rs.Update
Loop
' Recordset und Datenbank schließen
rs.Close
db.Close
' Speicher freigeben
Set rs = Nothing
Set db = Nothing
MsgBox "Import abgeschlossen."
End Sub
Bei Set rs = db.OpenRecordset(strTableName) bleibt der Code stehen:
Fehlermeldung : Laufzeitfehler 13
Typen unverträglich
Die Versuch Tabelle wird mit den Fehler angelegt aber dann geht es nicht weiter.
Der Versuch die Access Importfunktion zu nutzen schlug leider Fehl, der hat nicht mal die Datei gefunden!!
Gruß KlaSur
Zitat von: KlaSur am Oktober 11, 2023, 10:08:29Bei Set rs = db.OpenRecordset(strTableName) bleibt der Code stehen:
Fehlermeldung : Laufzeitfehler 13
Typen unverträglich
Möglicherweise könntest du diesen Fehler beheben, wenn du dein Recordset explizit als DAO.Recordset deklarierst.
Dim rs As DAO.Recordset Zitat von: KlaSur am Oktober 11, 2023, 10:08:29Der Versuch die Access Importfunktion zu nutzen schlug leider Fehl, der hat nicht mal die Datei gefunden!!
?Das solltest du mal genauer erläutern bzw. den verwendeten Code herzeigen.
Dein Code von ChatGPT zeigt einen simplen import von Tabulator-getrennten Daten im CSV-Format. - Das kann man zwar
theoretisch so machen, aber der ganze Ansatz erscheint schon sehr befremdlich. Du solltest einen
richtig guten Grund haben das so zu lösen anstatt den eingebauten Text-Import von Access zu verwenden.
ZitatIch habe einen VBA-Code laut Buch abgeschrieben:
...
bei ChatGPt einmal eingestellt. Da hat es sofort ein VBA Code ausgeworfen
Sammelst Du Codes, um sie zu üben und sie irgendwann zu verstehen?
Oder geht es um einen effizienten und zielgerichteten Import?
Im zweiten Fall hätte man bereits eine oder mehrere Tabellen, in die Daten von außen zu importieren wären, weil man in seiner Datenbank einen Plan und darauf aufbauend ein Datenmodell hat.
Im nächsten Schritt würde man sich die Textdatei (Struktur und Daten) anschauen, um einen Plan zu entwickeln, wie man die Daten in die Tabelle(n) seiner DB bekommt.
Hallo PhilS,
Hallo Eberhard,
wir arbeiten hier mit der Runtime-Version von Access. Ich habe 2010-2011 ein Programm geschrieben was wir noch heute verwenden. Jetzt müssen wir es erweitern und dazu gehört der Import von TXT-Dateien die aus unserem Zeichenprogramm stammen. Wir wollen die Stücklisten in unsere Access Datenbank einfügen in schon vorhandene Tabellen. Dazu muss ich die Daten sehen und sie gezielt in die Tabellen schreiben. Das ist der Plan. Ich suche jetzt nach einer einfachen Möglichkeit um das zu erreichen.
Das ist so eine Datei (D:/ablage/TxtDatei.jpg)
Gruß KlaSur
Zitat von: KlaSur am Oktober 11, 2023, 14:38:40Dazu muss ich die Daten sehen und sie gezielt in die Tabellen schreiben. Das ist der Plan. Ich suche jetzt nach einer einfachen Möglichkeit um das zu erreichen.
Ein paar Hintergrundinformationen sind immer sinnvoll. Allerdings lese ich in deiner Erläuterung jetzt kein Argument dafür, nicht den eingebauten Text-Import von Access zu verwenden.
Wenn "muss ich die Daten sehen" hier der zentrale Punkt ist, kannst du mittels DoCmd.TranferText die Textdatei auch erstmal nur (vorübergehend) verknüpfen, und dann auf Basis der verknüpften Datei in Access Anfüge- und/oder Aktualisierungsabfragen ausführen, um gezielt zu bestimmen, welche Daten wohin geschrieben werden.
Hallo,
ZitatIch suche jetzt nach einer einfachen Möglichkeit
Nutze die Importfunktion von Access, das ist die einfachste Möglichkeit.
Zitat... schlug leider Fehl, der hat nicht mal die Datei gefunden!!
Dann hast Du was falsch gemacht.
Wenn es richtig gemacht wird, wird auch die Datei gefunden, garantiert.
Du musst also mal genau beschreiben, wie Du es versucht hast.
Normalerweise verknüpft man die TXT Datei nur und kann dann gezielt per Anfügeabfragen die Daten in eine (ggf. auch mehrere) Access Tabellen schreiben.
Nachtrag:
Wenn zwei im wesentlichen das Gleiche sagen, solltest Du doch mal darüber nachdenken. ;D
Jau, gebe ich euch Recht :-[ .
Also ich gehe über den Menupunkt Externe Daten - Neue Datenquelle - aus Datei - txt Datei -
Dateiname - Durchsuchen - P:\3.00-090-A009167_A_Matze.txt , Importieren Sie die Quelldaten in neue Tabelle , dann Abbruch "Der Assistent kann von ... nicht gefunden werden. Dieser Assistent wurde nicht installiert oder wurde eine falsche Einstellung in der Windows-Registrierung vorgenommen....
Gruß KlaSur
Hallo,
Neue Datenquelle, wieso ?
Bei mir ist das so:
Externe Daten >> Textdatei
Welche Access Version hast Du ?
Zitatwir arbeiten hier mit der Runtime-Version von Access
Zum Programmieren sollte aber eine Vollversion verwendet werden. In der Runtime ist die Entwicklungsumgebung abgeschaltet.
Morgen MzKlMu,
Morgen ebs17,
ich habe natürlich eine Vollversion. Die Access Version ist:"Microsoft® Access® für Microsoft 365 MSO (Version 2309 Build 16.0.16827.20130) 32 Bit "D:\Ablage\AccessImport.jpg (D:%5CAblage%5CAccessImport.jpg)
Zitat von: KlaSur am Oktober 11, 2023, 16:12:41Importieren Sie die Quelldaten in neue Tabelle , dann Abbruch "Der Assistent kann von ... nicht gefunden werden. Dieser Assistent wurde nicht installiert oder wurde eine falsche Einstellung in der Windows-Registrierung vorgenommen....
Das interpretiere ich so, dass der Text-Import-Assistent von Access nicht gefunden wird. Dieser Assistent ist nicht für den eigentlichen Import zuständig, sondern nur dafür, die Konfiguration (Import-Spezifikation) für den Import zu erstellen. - Theoretisch könnte man ohne diesen Assistenten auskommen, wenn man manuell die Konfiguration in den entsprechenden Tabellen einträgt. Praktisch ist das aber nicht sinnvoll machbar.
Ich empfehle dir, deine Access Installation zu reparieren oder, falls das nicht hilft, Access zu deinstallieren und dann neu zu installieren.
Das habe ich schon auf mehreren Pc versucht. Alle finden den Assi... nicht. Habe gerade nochmals händisch ein Update gemacht. Jetzt ist es diese Version : Microsoft® Access® für Microsoft 365 MSO (Version 2309 Build 16.0.16827.20166) 32 Bit
Hallo,
ZitatMenupunkt Externe Daten - Neue Datenquelle - aus Datei - txt Datei -
ich kann diese in #10 beschriebene Befehlsabfolge nicht nachvollziehen.
Bei mir ist das deutlich einfacher, nämlich so:
ZitatExterne Daten >> Textdatei
Es kann natürlich sein, dass das an den Versionen liegt (ich habe Access2016).
Zeige daher bitte mal ein Bild des Menübandes "Externe Daten".
Zitat von: MzKlMu am Oktober 12, 2023, 11:36:16Es kann natürlich sein, dass das an den Versionen liegt (ich habe Access2016).
Zeige daher bitte mal ein Bild des Menübandes "Externe Daten".
Die Beschreibung von
@KlaSur entspricht dem, was ich bei mir auch sehe:
2023-10-12_11h42_34.png
Ich denke, die Menü-Struktur ist hier nicht der relevante Punkt, sondern dass der Assistent nicht geladen werden kann. - Dazu habe ich im Moment keine weitere Idee, als die bereits geschriebenen (Installation reparieren/Deinstallation+Neuinstallation).
Zitat von: KlaSur am Oktober 12, 2023, 11:28:35Das habe ich schon auf mehreren Pc versucht. Alle finden den Assi... nicht. Habe gerade nochmals händisch ein Update gemacht.
Was genau hast du versucht? - Ein Update war nicht der relevante, empfohlene Punkt.
Ich meinte, dass du in Windows zu "Control Panel\All Control Panel Items\Programs and Features" navigierst, dort in der Liste der installierten Programme "Microsoft 365 Apps ...." auswählst und aus dem Kontextmenü "Change" (Ändern) anklickst und dann "Online Repair" startest.
2023-10-12_11h54_50.png
Ich werde es einmal ersuchen habe aber leider wenig Hoffnung, daß es damit erledit ist. Ich habe es schon an verschiedenen Pc's probiert aber alle scheinen den Assi nicht laden zu können (Pc ausserhalb Firmenlan damit die Firewall nichts blockt, Privat-Laptop).
Danke PhilS,
daran lag es ;D ! Jetzt started der Assi wieder. Werd bei den Pc's mal den beschriebenen "Repair" durchführen.
Guten Morgen,
jetzt habe ich eine ImportFunktion gespeichert "TxtImport". Wie komme ich an die Funktion und kann ihr Variablen übergeben, z.B. die einzulesende Datei und das Verzeichnis etc.
Gruß KlaSur
Zitat von: KlaSur am Oktober 13, 2023, 08:57:10Wie komme ich an die Funktion und kann ihr Variablen übergeben, z.B. die einzulesende Datei und das Verzeichnis etc.
Mit
DoCmd.TransferText (https://learn.microsoft.com/en-us/office/vba/api/access.docmd.transfertext) kannst du per VBA Textdateien importieren (oder verknüpfen!) und dabei deine gespeicherte Importspezifikation im
SpecificationName-Argument übergeben. - Wenn du dir mal kurz die verlinkte Doku dazu anschaust, sollte das eigentlich recht einfach zu realisieren sein.
Hallo,
siehe auch:
https://www.access-o-mania.de/forum/index.php?topic=26809.0
Darin Beitrag #5.
Hallo PhilS,
Hallo MzKlMu,
habe mir die Beschreibung von DoCmd.TransferText angeschaut aber komme nicht weiter. Ich habe die Textdatei mit der eingebauten Importfunktion durchgeführt. Das hat auch funktioniert. So jetzt will ich anstelle der Test1.txt die Test2.txt einlesen. Der Aufbau der beiden Dateien ist gleich. Wie spreche ich die Funktion an.
Das ist mein Code:
Dim VaImport As Variant
VaImport = "ImportTxt"
DoCmd.TransferText acImportDelim, VaImport, "C:\Datenbank\Test2.Txt", False
Und wenn man dann noch erst ab der 3 Zeile einlesen könnte währe es genial.
Gruß KlaSur
Zitat von: KlaSur am Oktober 17, 2023, 14:49:24DoCmd.TransferText acImportDelim, VaImport, "C:\Datenbank\Test2.Txt", False
Dein grundsätzliches Vorgehen ist schon richtig.
Allerdings fehlt in der obigen Zeile der Name der Zieltabelle:
DoCmd.TransferText acImportDelim, VaImport, "HierNameDerZieltabelle", "C:\Datenbank\Test2.Txt", False Zitat von: KlaSur am Oktober 17, 2023, 14:49:24Und wenn man dann noch erst ab der 3 Zeile einlesen könnte währe es genial.
Entweder könntest du die Textdatei nur verknüpfen und dann mit einer Anfügeabfrage in die eigentliche Zieltabelle schreiben. Dabei kannst du in der Anfügeabfrage über die Kriterien unerwünschte Datensätze ausschließen.
Oder, du kannst die Tabelle
MSysIMEXSpecs (Systemtabellen einblenden) öffnen und der per Hand in der Spalte
StartRow deiner Import-Spezifikation die gewünschte Startzeile der Datei eintragen. - Soweit ich weiß ist das nur über dieses manuelle Herumfummeln an der Import-Spezifikation möglich, aber nicht über den Assistenten.
Dann haben wir es!!
Das ist der Code:
Sub ImportTxt()
Dim VaImport As Variant
Dim StrEingabe As String
Dim StrPfad As String
StrPfad = "C:/Datenbank/"
StrEingabe = InputBox("Bitte geben sie die Datei an:")
StrPfad = StrPfad + StrEingabe
MsgBox (StrPfad)
VaImport = "ImportTxt" "erst einmal den Import durchführen und speichern unter Spezifikationen nicht vergessen"
'DoCmd.TransferText acImportDelim,VaImport , StrPfad, False
DoCmd.TransferText acImportDelim, VaImport, "Import", StrPfad, False
End Sub
Danke für eure Hilfe!!
KlaSur