Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: KlaSur am Oktober 06, 2023, 12:19:26

Titel: Import von Txt dateien in Access
Beitrag von: KlaSur am Oktober 06, 2023, 12:19:26
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


Titel: Re: Import von Txt dateien in Access
Beitrag von: MzKlMu am Oktober 06, 2023, 12:40:20
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.
Titel: Re: Import von Txt dateien in Access
Beitrag von: PhilS am Oktober 06, 2023, 12:53:58
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.
Titel: Re: Import von Txt dateien in Access
Beitrag von: markusxy am Oktober 06, 2023, 16:32:55
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.
Titel: Re: Import von Txt dateien in Access
Beitrag von: KlaSur am Oktober 11, 2023, 10:08:29
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

Titel: Re: Import von Txt dateien in Access
Beitrag von: PhilS am Oktober 11, 2023, 10:31:09
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.
Titel: Re: Import von Txt dateien in Access
Beitrag von: ebs17 am Oktober 11, 2023, 11:45:03
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.

Titel: Re: Import von Txt dateien in Access
Beitrag von: KlaSur am Oktober 11, 2023, 14:38:40
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
Titel: Re: Import von Txt dateien in Access
Beitrag von: PhilS am Oktober 11, 2023, 14:53:37
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.

Titel: Re: Import von Txt dateien in Access
Beitrag von: MzKlMu am Oktober 11, 2023, 14:59:06
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
Titel: Re: Import von Txt dateien in Access
Beitrag von: KlaSur am Oktober 11, 2023, 16:12:41
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
Titel: Re: Import von Txt dateien in Access
Beitrag von: MzKlMu am Oktober 11, 2023, 19:10:01
Hallo,
Neue Datenquelle, wieso ?

Bei mir ist das so:
Externe Daten >> Textdatei

Welche Access Version hast Du ?
Titel: Re: Import von Txt dateien in Access
Beitrag von: ebs17 am Oktober 11, 2023, 20:04:31
Zitatwir arbeiten hier mit der Runtime-Version von Access
Zum Programmieren sollte aber eine Vollversion verwendet werden. In der Runtime ist die Entwicklungsumgebung abgeschaltet.
Titel: Re: Import von Txt dateien in Access
Beitrag von: KlaSur am Oktober 12, 2023, 10:02:36
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)
Titel: Re: Import von Txt dateien in Access
Beitrag von: PhilS am Oktober 12, 2023, 10:37:22
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.
Titel: Re: Import von Txt dateien in Access
Beitrag von: KlaSur am Oktober 12, 2023, 11:28:35
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
Titel: Re: Import von Txt dateien in Access
Beitrag von: MzKlMu am Oktober 12, 2023, 11:36:16
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".
Titel: Re: Import von Txt dateien in Access
Beitrag von: PhilS am Oktober 12, 2023, 11:47:11
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).
Titel: Re: Import von Txt dateien in Access
Beitrag von: PhilS am Oktober 12, 2023, 11:56:36
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
Titel: Re: Import von Txt dateien in Access
Beitrag von: KlaSur am Oktober 12, 2023, 13:22:37

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). 
Titel: Re: Import von Txt dateien in Access
Beitrag von: KlaSur am Oktober 12, 2023, 14:08:10
Danke PhilS,

daran lag es ;D ! Jetzt started der Assi wieder. Werd bei den Pc's mal den beschriebenen "Repair" durchführen.
Titel: Re: Import von Txt dateien in Access
Beitrag von: KlaSur am Oktober 13, 2023, 08:57:10
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
Titel: Re: Import von Txt dateien in Access
Beitrag von: PhilS am Oktober 13, 2023, 10:12:55
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.
Titel: Re: Import von Txt dateien in Access
Beitrag von: MzKlMu am Oktober 13, 2023, 10:49:39
Hallo,
siehe auch:

https://www.access-o-mania.de/forum/index.php?topic=26809.0

Darin Beitrag #5.
Titel: Re: Import von Txt dateien in Access
Beitrag von: KlaSur am Oktober 17, 2023, 14:49:24
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
Titel: Re: Import von Txt dateien in Access
Beitrag von: PhilS am Oktober 17, 2023, 15:15:29
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.



Titel: Re: Import von Txt dateien in Access
Beitrag von: KlaSur am Oktober 17, 2023, 16:44:13
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