PDA

Vollständige Version anzeigen : CSV Textimport via Schema.ini


thevirus
17.10.2011, 16:17
Hallo zusammen,
das Thema ist zwar schon mehrmals im Forum besprochen worden, jedoch immer anders. Ich muss einige Access Anwendungen von 2002 auf 2010 konvertieren und habe dabei CSV Datenimport Probleme die sich wie folgt darstellen:

unter A2002 haben ich folgenden Import (funktioniert 100%) DoCmd.RunSQL "DROP TABLE BO"
DoCmd.TransferText acImportDelim, , "BO", pfad & "\BO.csv", True
Unter A2010 werden alle mit Semikolon getrennten Spalten in eine geschrieben und der Import ist defekt. Nun habe ich in vielen Foren geschaut und es gibt mehrere Lösungen wobei aber keine bei mir funktioniert.

Ich habe nun eine Schema.ini erzeugt die so aussieht:
[BO.csv];
ColNameHeader = True;
CharacterSet = ANSI;
Format = TabDelimited
Col1=mit_id Integer
Col2=die_id Integer...

Die Schema Datei habe ich im gleichen Pfad wie die CSV abgelegt!

Anpassungen CODE
DoCmd.TransferText acImportDelim,"Schema.ini" , "BO", pfad & "\BO.csv", True=> Fehler
Änderung der von ,"Schema.ini" in:
Schema
pfad & "Schema.ini" bzw ohne ini
=> es wird immer der Fehler geschrieben das man die Datei nicht finden würde

weiterer Versuch - Änderung der Methode: (dabei soll wohl auch die Schema.ini im Verzeichnis genutzt werden)
Dim strSQL As String
strSQL = "SELECT * INTO BO " & _
"FROM [Text; Database=" & pfad & ";].["BO.csv"];"
CurrentDb.Execute strSQL, dbFailOnError
CurrentDb.TableDefs.Refresh
jedoch ohne Erfolg >>> immer alles in eine Spalte !?

Hat jemand eine Idee ?
vielen Dank
Jens

Atrus2711
17.10.2011, 16:25
Hi,

hast du mal probiert, die Datei einmaligmanuell zu importieren und dabei eine Importspezifikation anzulegen? Die kannst du dann beim VBA-Import nutzen. Die Schema.ini hab ich nicht mehr im Kopf, weiß nicht mehr, ob es die in Ac2010 überhaupt noch gibt...

ebs17
17.10.2011, 16:29
In Access gibt es seit geraumer Zeit (mindestens mit Acc2000) Importspezifikationen für Importe/Exporte mit Textdateien. Diese machen das gleiche wie eine Schema.ini, lassen sich aber bedeutend einfacher handhaben:
=> Erstellung per Hand über Assistent (http://www.ardiman.de/datenbanken/grundlagen/tabellen.html#SEC2)
=> Erstellung per Code (http://www.vbarchiv.net/tipps/details.php?id=876)

Steffen0815
17.10.2011, 16:31
Hallo,
Schema.ini und Importspezifikation sind 2 völlig verschiedene Sachen.

unter A2002 haben ich folgenden Import (funktioniert 100%) Reiner Zufall (wie du jetzt siehst). Importiere niemals ohne (eigene) Spezifikation!!!
Wenn du feste Strukturen hast, solltest du nach meiner Meinung bei deiner bisherigen Methode bleiben und zusätzlich eine entsprechende Importspezifikation anlegen und im Code einbauen.

thevirus
17.10.2011, 16:56
Hallo zusammen,ich habe die Variante : Importassistent mit erstellen der Spezifikationsdatei durchgeführt. Diese Namen habe ich dann eingetragen:
DoCmd.TransferText acImportDelim, "BO" , "BO", pfad & "\BO.csv", True
und der Import funktioniert 100%.
Werde jetzt für jede Tabelle eine Spezifikationsdatei erstellen und diese einbinden.

Nur noch eine Frage: Die erstellten Spezifikationsdateien werden doch in der Access Anwendung gespeichert und nicht in irgendwelchen untiefen des Systems/Office/Registry ? Das heisst wenn ich die Access Datei auf andere Rechner verteile funktionieren die Spezifikationsdateien auch dort ?

vielen Dank schon mal für Euere Hilfe !

viele Grüße
Jens

Steffen0815
17.10.2011, 16:58
Hallo,
Die erstellten Spezifikationsdateien werden doch in der Access Anwendung gespeichertJa ;)

ebs17
17.10.2011, 17:00
Wenn Du den zweiten Link in #3 näher liest, lernst Du auch die zugehörigen Systemtabellen kennen.

Thomas Möller
17.10.2011, 17:12
Hallo Jans,

Nur noch eine Frage: Die erstellten Spezifikationsdateien werden doch in der Access Anwendung gespeichert und nicht in irgendwelchen untiefen des Systems/Office/Registry ?

Deine Vermutung ist abosut richtig. Die Informationen zu einer Importspezifikation werden direkt in der Datenbank gespeichert. Access verwendet dafür zwei Systemtabellen mit den Namen "MSysIMEXSpecs" und "MSysIMEXColumns".

CU

thevirus
17.10.2011, 17:33
Klasse !

vielen Dank an alle für die schnellen und kompetenten Antworten !!!

schöne Grüße
Jens

Louisleon
17.10.2011, 21:06
Hallo,

wie von Steffen0815 schon richtig gesagt haben Importspezifikation und Schema.ini nichts miteinander zu tun!
Die Schema.ini wird für einen DB-Import per ADO erfoderlich, sprich wenn Du eine Provider-Connection erstellst.
Die Importspezifikation ist für Deine "DoCmd.TransferText" Aktion erforderlich!
Ich würde der Provider-Connection in einer Datenbankumgebung den Vorzug geben!
Mehr dazu siehe hier:
Much ADO About Text Files (http://msdn.microsoft.com/en-us/library/ms974559.aspx)

oder auch diesen Thread:
CSV Datei jeden morgen automatisch importieren (http://ms-office-forum.net/forum/showthread.php?t=282745)

Gruß

LL