Access datenbank importieren, zuvor konvertieren

ich arbeite derzeit daran eine accessdatenbank zu importieren.

bei access start geht ein formular auf, in dem man in den explorer zugreifen kann und sich einen pfad einer datei in ein textfeld importiert. ich bin soweit das sich der pfad nun im textfeld befindet und schaffe es nicht dieses nun weiterzuverarbeiten, zb in einem makro!

die datei in diesem pfad soll dann automatisch als .txt umbenannt werden und dann automatisch in eine bestehende datenbank importiert werden…

kann mir jemand einen tipp geben, wie ich den pfad aus dem textfeld weiterverarbeite? und vielleicht ein tipp für die weitere vorgehensweise?

vielen dank!!!

Dominik

Hallo, Dominik!

bei access start geht ein formular auf, in dem man in den
explorer zugreifen kann und sich einen pfad einer datei in ein
textfeld importiert. ich bin soweit das sich der pfad nun im
textfeld befindet und schaffe es nicht dieses nun
weiterzuverarbeiten, zb in einem makro!

Das wird dann das einfachste. Wenn Du Code in dem Formular schreibst, welcher die weitere Verarbeitung übernimmt, kannst Du im Formular über

Me.txtMeinTextfeldMitPfad

darauf zugreifen, also z. B. das umbenennen mit

Name Me.txtMeinTextfeldMitPfad &"\Dateiname.mdb", Me.txtMeinTextfeldMitPfad &"\Dateiname.txt"

Greifst Du von außerhalb des Formulars zu, läuft das ähnlich: Statt „Me“ verwendest Du den expliziten Verweis auf das Formular: Forms(„MeinFormular“).txtMeinTextfeldMitPfad. Also gleiches Beispiel wie oben:

Name Forms("MeinFormular").txtMeinTextfeldMitPfad &"\Dateiname.mdb", Forms("MeinFormular").txtMeinTextfeldMitPfad &"\Dateiname.txt"

die datei in diesem pfad soll dann automatisch als .txt
umbenannt werden und dann automatisch in eine bestehende
datenbank importiert werden…

Die Umbenennung bewirkt aber keine Konvertierung. Hier stellt sich die Frage, was Du aus der Datenbank konvertieren willst. Einiges geht, vieles nicht. Tabellen und Abfragen kannst Du exportieren. Formulare, Makros, Berichte etc. nicht wirklich (sinnvoll).

Bevor ich mich hier auslasse, wie der Export einer Tabelle nach Text (Suche unter DoCmd.TransferText) genau funktioniert, solltest Du klären, ob das überhaupt notwendig ist. Warum sollte eine Datenbank nach Text und dann wieder in eine Datenbank gepackt werden? Eigentlich sollte der direkte Weg von Datenbank zu Datenbank möglich sein.

kann mir jemand einen tipp geben, wie ich den pfad aus dem
textfeld weiterverarbeite? und vielleicht ein tipp für die
weitere vorgehensweise?

Wie gesagt: Was genau willst Du importieren? Nur eine Tabelle? Alle Tabellen? (Vorsicht: Es gibt diverse Tabellen, die nicht sinnvoll zu importieren sind, weil sie die Datenbank beschreiben, in der sie liegen. Bei Access fangen diese Systemtabellen mit MSys an.)

Du bist jetzt wahrscheinlich weniger schlau als vorher. Aber präzisiere mal, was Du genau wohin importieren willst, dann wird Dir sicherlich geholfen werden können. (Ggf. auch/eher im Access-Forum fragen, wenn Du mit Access-VB, also VBA, arbeitest.)

Gruß, Manfred

erstmal danke für die nette antwort!!!

ich möchte eine allplan nemetschekdatei in access importieren. allplan ist ein zeichenprogramm für architekten und damit kann man kostendaten exportieren. diese dateien werden als .xca und xls abgespeichert und kann man nicht direkt in access importieren. wenn man diese aber zuvor konvertiert in .txt ist es möglich sie einfach einzulesen. das möchte ich automatisieren!

in einem abfragenden formular…

Function Dateiauswahl() As String

Dim sFilter As String
'// --------------------------------------------------------------------------
'// Strukturvariable vom Typ OPENFILENAME erzeugen
'// --------------------------------------------------------------------------
Dim uOFN As OPENFILENAME
'// --------------------------------------------------------------------------
'// Strukturgröße und Elternfenster setzen
'// --------------------------------------------------------------------------
uOFN.nStructSize = Len(uOFN)
uOFN.hwndOwner = GetActiveWindow()
'// --------------------------------------------------------------------------
'// Filter setzen und Index auf 2 (Datenbanken) setzen
'// Format: „Name“ \n „Ext.“ \n „Name“ \n „Ext.“ … \n\n
'// --------------------------------------------------------------------------
sFilter = „Alle Dateien (*.*)“ & vbNullChar & „*.*“ & vbNullChar & _
„Allplan-Dateien(*.xca)“ & vbNullChar & „*.xca“ & vbNullChar & _
„Text-Dateien(*.txt)“ & vbNullChar & „*.txt“ & vbNullChar & _
„Excel-Dateien (*.xls)“ & vbNullChar & „*.hxls“
sFilter = sFilter & vbNullChar & vbNullChar

uOFN.sFilter = sFilter
uOFN.nFilterIndex = 2
'// --------------------------------------------------------------------------
'// Dialogtitel setzen
'// --------------------------------------------------------------------------
uOFN.sDlgTitle = „Bitte wählen Sie eine ihnen sympatische Datei aus:“
'// --------------------------------------------------------------------------
'// Flags setzen
'// --------------------------------------------------------------------------
uOFN.Flags = OFS_FILE_OPEN_FLAGS
'// --------------------------------------------------------------------------
'// Speicher für sFile und sFileTitle reservieren
'// --------------------------------------------------------------------------
uOFN.sFile = Space$(256) & vbNullChar
uOFN.nFileSize = Len(uOFN.sFile)
uOFN.sFileTitle = Space$(256) & vbNullChar
uOFN.nTitleSize = Len(uOFN.sFileTitle)
'// --------------------------------------------------------------------------
'// Funktion aufrufen und auswerten
'// --------------------------------------------------------------------------
If GetOpenFileName(uOFN) Then

Dateiauswahl = Left(uOFN.sFile, InStr(uOFN.sFile, vbNullChar) - 1)

Else
MsgBox „Sie haben tatsächlich abgebrochen!“, vbInformation
End If

End Function

so weit bin ich nun und würde gerne die zu suchende datei umbennen in eine .txt datei…habt ihr eine idee?

viele grüsse, Dominik

Hallo Dominik

uOFN.sDlgTitle = „Bitte wählen Sie eine ihnen sympatische Datei aus:“

SCNR: sympat h ische

If GetOpenFileName(uOFN) Then
Dateiauswahl = Left(uOFN.sFile, InStr(uOFN.sFile, vbNullChar) - 1)
Else
MsgBox „Sie haben tatsächlich abgebrochen!“, vbInformation
End If
so weit bin ich nun und würde gerne die zu suchende datei
umbennen in eine .txt datei…habt ihr eine idee?

Dateiauswahl = Left(uOFN.sFile, InStr(uOFN.sFile, vbNullChar) - 1) **& ".txt"**

Ich weiss nicht, was du mit dem Umbennen bewirken willst? Wenn du die Datei einfach nur umbenennst - also so wie ich oben „.txt“ anhängen - dann wird sie ja nicht konvertiert! Sprich: Der Inhalt ist genau identisch zum Zustand vor dem Umbenennen, und ob die Datei nun „BlaBla.xyz“ oder „BlaBla.xyz.txt“ heisst macht doch keinen Unterschied.
Was willst du denn hinterher mit der Datei machen… „Importieren“? Wie stellst du dir das vor und warum muss die Datei dafür „.xyz“ heissen?

Gruss
Peter

hallo peter,

aus einer bsp.xca oder bsp.xls, soll eine bsp.txt werden und dann könnte ich sie importieren.

vielleicht wäre es gut wenn ich diese datei erst in dem entsprechenden ordner abspeicher als .txt?

Hallo Dominik

aus einer bsp.xca oder bsp.xls, soll eine bsp.txt werden und
dann könnte ich sie importieren.

Ich habe ja vorher schon gefragt: Wie willst du die Datei denn eigentlich importieren?
Wenn du das mal kurz erklären könntest, würde ich evtl. auch verstehen, warum du sie unbedingt umbenennen willst.

vielleicht wäre es gut wenn ich diese datei erst in dem
entsprechenden ordner abspeicher als .txt?

Oh, jetzt merke ich, dass ich dir die eigentliche Anweisung zum Umbennen der Datei in meiner letzten Antwort unterschlagen habe. Der Befehl, um Dateien umzubenennen, lautet in VBA Name AlterName As Neuername , also z.B.:

Name "C:\Temp\bsp.xca" As "C:\Temp\bsp.txt"

Aber wie schon gesagt: Der Inhalt und das Format der Datei ändert sich davon um kein einziges Bit…

Gruss
Peter

Hallo, Dominik!

Rechner rechnet gerade, hab mal kurz Zeit… Wenn Du tatsächlich eine xls hast und dies tatsächlich eine Excel-Datei ist, dann binde Dir in Dein Projekt den Verweis auf Excel ein, erzeuge/starte eine Excel-Instanz, öffne die ausgewählte Datei (mit Workbooks.Open) und speichere sie als Textdatei (mit Workbooks.SaveAs mit passendem xlFileFormat) ab. Das sollte gehen; dann hast Du eine konvertierte Datei. Ob Du die dann direkt einlesen kannst, müsstest Du überprüfen. Aber im Falle einer richtigen Excel-Datei könntest Du auch diese direkt nach Access bringen.

Ist irgendwie alles etwas vage, insofern vielleicht noch einmal ein kurzer Abriss:

  1. Eingangsformat: Kannst Du von Deinem Programm aus die ausgewählte Datei öffnen und/oder interpretieren? Oder liegt sie in einem bekannten Fremdformat (z. B. Excel) vor? Oder liegt sie in einem gänzlich kryptischen Format vor?

  2. Wenn bekanntes Fremdformat: Fremdprogramm öffnen, Datei öffnen, konvertiert abspeichern (Excel: Siehe Excel-Objekt, Workbooks-Auflistung, Workbook-Objekt, Workbooks.Open, Workbooks.SaveAs in der [Excel-VBA-]Hilfe)
    Wenn Du selbst öffnen und interpretieren kannst: Daten einlesen und als Textfile schreiben (siehe FreeFile, Open, Print#Dateinr in der normalen VB[A]-Hilfe).
    Wenn Du nicht öffnen kannst und das Format kryptisch ist und die Fremdanwendung nicht per DDE, OLE oder sonstwie offen gelegter API oder ähnlichen zugreifbar ist: Leider „No chance!“.

  3. Wenn Du dann Deine Textdatei hast: Importieren und weiter verarbeiten - aus was eigentlich? Ist Deine Anwendung Access oder VB?

Gruß, Manfred

Hallo Dominik,
ich verstehe noch nicht ganz, was Du vor hast glaube ich.

Kann es sein, daß Du8 nicht mehr willst, als eine Exceltabelle in eine Access-tabelle zu importieren? Das kann Access ohne den Umweg über ein Textdokument.

  • Access starten, neue DB (oder die DB in die Tabelle soll auswählen)
  • Klicke dann ‚Datei‘/‚Externe Daten‘/‚Importieren‘
  • wähle bei Dateityp Excel (.xls)
  • wechsle dann in das Verzeichnis mit der Datei, wähle die aus und klicke auf importieren.

Dann kannst/mußt Du noch einige Angaben machen, z.B. daß die oberste Zeile die Feldnamen enthält, daß ein Primärschlüssel verwendet werden soll, oder nicht. … Und die Excel-Tabelle ist in Deiner Access-Datenbank.

Oder brauchst Du das öfter und willst es automatisieren?

gruß, Rainer

Const OFN_READONLY As Long = &H1
Const OFN_EXPLORER As Long = &H80000
Const OFN_LONGNAMES As Long = &H200000
Const OFN_CREATEPROMPT As Long = &H2000
Const OFN_NODEREFERENCELINKS As Long = &H100000
Const OFN_OVERWRITEPROMPT As Long = &H2
Const OFN_HIDEREADONLY As Long = &H4
Const OFS_FILE_OPEN_FLAGS As Long = OFN_EXPLORER _
Or OFN_LONGNAMES _
Or OFN_CREATEPROMPT _
Or OFN_NODEREFERENCELINKS
Const OFS_FILE_SAVE_FLAGS As Long = OFN_EXPLORER _
Or OFN_LONGNAMES _
Or OFN_OVERWRITEPROMPT _
Or OFN_HIDEREADONLY
Type OPENFILENAME
nStructSize As Long
hwndOwner As Long
hInstance As Long
sFilter As String
sCustomFilter As String
nCustFilterSize As Long
nFilterIndex As Long
sFile As String
nFileSize As Long
sFileTitle As String
nTitleSize As Long
sInitDir As String
sDlgTitle As String
Flags As Long
nFileOffset As Integer
nFileExt As Integer
sDefFileExt As String
nCustData As Long
fnHook As Long
sTemplateName As String
End Type

Declare Function GetActiveWindow Lib „user32.dll“ () As Long
Declare Function GetOpenFileName Lib „comdlg32.dll“ Alias _
„GetOpenFileNameA“ _
(pOpenfilename As OPENFILENAME) As Long
Declare Function GetSaveFileName Lib „comdlg32.dll“ Alias _
„GetSaveFileNameA“ _
(pOpenfilename As OPENFILENAME) As Long
Declare Function GetShortPathName Lib „kernel32.dll“ Alias _
„GetShortPathNameA“ _
(ByVal lpszLongPath As String, _
ByVal lpszShortPath As String, _
ByVal cchBuffer As Long) As Long

Function Dateiauswahl() As String

Dim sFilter As String
'// --------------------------------------------------------------------------
'// Strukturvariable vom Typ OPENFILENAME erzeugen
'// --------------------------------------------------------------------------
Dim uOFN As OPENFILENAME
'// --------------------------------------------------------------------------
'// Strukturgröße und Elternfenster setzen
'// --------------------------------------------------------------------------
uOFN.nStructSize = Len(uOFN)
uOFN.hwndOwner = GetActiveWindow()
'// --------------------------------------------------------------------------
'// Filter setzen und Index auf 2 (Datenbanken) setzen
'// Format: „Name“ \n „Ext.“ \n „Name“ \n „Ext.“ … \n\n
'// --------------------------------------------------------------------------
sFilter = „Alle Dateien (*.*)“ & vbNullChar & „*.*“ & vbNullChar & _
„Allplan-Dateien(*.xca)“ & vbNullChar & „*.xca“ & vbNullChar & _
„Text-Dateien(*.txt)“ & vbNullChar & „*.txt“ & vbNullChar & _
„Excel-Dateien (*.xls)“ & vbNullChar & „*.hxls“
sFilter = sFilter & vbNullChar & vbNullChar

uOFN.sFilter = sFilter
uOFN.nFilterIndex = 2
'// --------------------------------------------------------------------------
'// Dialogtitel setzen
'// --------------------------------------------------------------------------
uOFN.sDlgTitle = „Bitte wählen Sie eine ihnen sympathische Datei aus:“
'// --------------------------------------------------------------------------
'// Flags setzen
'// --------------------------------------------------------------------------
uOFN.Flags = OFS_FILE_OPEN_FLAGS
'// --------------------------------------------------------------------------
'// Speicher für sFile und sFileTitle reservieren
'// --------------------------------------------------------------------------
uOFN.sFile = Space$(256) & vbNullChar
uOFN.nFileSize = Len(uOFN.sFile)
uOFN.sFileTitle = Space$(256) & vbNullChar
uOFN.nTitleSize = Len(uOFN.sFileTitle)
'// --------------------------------------------------------------------------
'// Funktion aufrufen und auswerten
'// --------------------------------------------------------------------------
If GetOpenFileName(uOFN) Then

Dateiauswahl = Left(uOFN.sFile, InStr(uOFN.sFile, vbNullChar) - 1) & „.txt“

Else
MsgBox „Sie haben tatsächlich abgebrochen!“, vbInformation
End If

End Function

Danke erstmal für die netten benühungen!!!

am ende hab ich jetzt an meine .xls ein txt angefügt. was die datei im explorer verändert aber nicht in access einlesbar macht. wie kann ich aus meiner datei pfad.xls eine umbennenung auf pfad.txt machen. dann klappts bei mir immer mit dem import nach access. ich schreib dann nur einen importcode in ein formular und dann ist sie an eine bestehende datenbanktabelle angefügt.

also wie bennen ich diesen pfad um?

vielen dank an euch

Hallo,

am ende hab ich jetzt an meine .xls ein txt angefügt. was die
datei im explorer verändert aber nicht in access einlesbar
macht. wie kann ich aus meiner datei pfad.xls eine umbennenung
auf pfad.txt machen. dann klappts bei mir immer mit dem import
nach access. ich schreib dann nur einen importcode in ein
formular und dann ist sie an eine bestehende datenbanktabelle
angefügt.

also wie bennen ich diesen pfad um?

Noch einmal. Umbenennen nützt nichts!

Du mußt die Datei konvertieren, nicht umbenennen.
Mit dem Umbenennen sorgst Du nur dafür, daß Excel die Datei nicht von selbst erkennt, am Format ändert das aber nichts.
Du kannst Z.B. die Tabelle mit Excel öffnen und per ‚Speichern unter‘ als Textdatei abspeichern. Das ist aber keine Änderung der Endung, sondern ein Konvertieren! Eine einfache Änderung der Endung ist nutzlos!

Gruß, Rainer

es hat funktioniert danke für eure HILFE!!!