AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi CSV via ADO einlesen
Thema durchsuchen
Ansicht
Themen-Optionen

CSV via ADO einlesen

Ein Thema von Stormy · begonnen am 29. Jun 2009 · letzter Beitrag vom 7. Jul 2009
Antwort Antwort
Stormy

Registriert seit: 8. Okt 2005
Ort: LPZ
73 Beiträge
 
Delphi 6 Enterprise
 
#1

CSV via ADO einlesen

  Alt 29. Jun 2009, 10:36
Datenbank: ODBC • Zugriff über: ADO
Hallo,

habe gerade eine Problem mit dem einlesen einer CSV Datei.
Mein ConnectionString=Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=_File;Extensions=asc,csv,tab,txt;
Das funktioniert auch soweit schonman gut. Das Problem ist das wenn ich via GetFieldNames die Feldnamen der Tabelle (CSV)
ausgebe ich nur das erste Feld (Artikelnummer) erhalte. In Wirklichkeit sind es aber über 10 Felder die in der ersten Zeile der
CSV definiert sind. Gibt es eine ADO-Option welche ich mit dem ConnectionString übergebe die sagt das die ganze erste Zeile
in der CSV die Tabellennamen enthält? Oder muss ich das irgendwie anders definieren? Ich habe es schon mit HDR=Yes bzw No versucht
bzw. den ConnectionString=Provider=Microsoft.Jet.OLEDB.4.0; Data Source=_Filename;Extended Properties=text;HDR=Yes;FMT=Delimited; getestet aber bekomme dann immer die Fehlermeldung "Nicht erkennbares Datenbankformat" oder "Installierbares ISAM nicht gefunden"
nicht gefunden. Aber eigentlich müsste der richtige Weg ja der über den MS Text Driver sein wie oben erwähnt.

Ich hoffe jemand versteht mein Problem und kann mir helfen.

Danke im Voraus!


Gruß
Stormy
  Mit Zitat antworten Zitat
Stormy

Registriert seit: 8. Okt 2005
Ort: LPZ
73 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: CSV via ADO einlesen

  Alt 29. Jun 2009, 12:56
Was ich vergessen habe - meine Schema.ini die sich im selben Verzeichniss befindet wie die CSV ist folgendermaßen aufgebaut:

[artikelfull.csv]
Format=Delimited(,)
TextDelimiter="
ColNameHeader=True
MaxScanRows=0
CharacterSet=OEM

Laut MSDN sollte ColNameHeader dafür zuständig sein das die erste Zeile in der CSV die Spaltennamen enthält.
Aber warum bekomme ich nur die erste Spalte (Artikelnummer) ausgegeben wenn die erste Zeile doch noch 8 weitere Felder enthält?

Ich bin Ratlosund wäre für Hilfe dankbar!


Gruß
Stormy
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#3

Re: CSV via ADO einlesen

  Alt 29. Jun 2009, 12:58
wie sieht denn deine CSV-Datei aus?
  Mit Zitat antworten Zitat
Stormy

Registriert seit: 8. Okt 2005
Ort: LPZ
73 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: CSV via ADO einlesen

  Alt 29. Jun 2009, 13:18
Hi,

also um mal die ersten beiden Zeilen zu zeigen:

1.Zeile
"Artikelnummer","Beschreibung","Modul","Artikelhau ptgruppe","Artikeluntergruppe","Verkaufsgarantieco de","Verfügbar Distribution","VK-Preis","Herstellercode","Herstellername","Referenz nummer","Textbaustein","Auslauf","S","EAN-Code","Dateiname","UVP (brutto)","Verfügbarer Bestand CP","Nächste Verfügbarkeit CP","Nächste Verfügbare Menge CP","artikeltext_plain","artikeltext_html","Brutto gewicht","Artikelkurzbeschreibung","artikeltext_dr uck"

2.Zeile...
"1000899","TERRA PC-BUSINESS 5000 iE8400 VB>XPP","PC TERRA","PC-BUSINES","","G36","0","449","WMT","WMT AG","1000899","Ja","Nein","","4039407008209","B100 7666.JPG","619","0","24.09.2008","100+"...usw. usf.

Ich habe jetzt mal in der ersten Zeile die Kommata (,) gegen Semikomata ( ausgetauscht und siehe da es geht!
Aber leider habe ich keine Lust jedes mal die erste Zeile manuell zu ändern.
Wenn ich es mit dem Kommata versuche also auch in der Schema.ini Format=CSVDelimited setze dann erhalte ich den Fehler:
[Microsoft][ODBC Text Driver] Das Feldtrennzeichen für die angegebene Textdatei entspricht dem Dezimaltrennzeichen oder Texttrennzeichen.

Warum kann das Trennzeichen in der ersten Zeile nicht gleich dem Trennzeichen der folgenden Zeilen sein?
Ich sage doch explizit mit ColNameHeader=True das die erste Zeile die Feldnamen enthält also sollte er doch auch
ein Komma als Trennzeichen akzeptieren? Oder habe ich etwas vergessen?


Gruß
Stormy
  Mit Zitat antworten Zitat
Stormy

Registriert seit: 8. Okt 2005
Ort: LPZ
73 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: CSV via ADO einlesen

  Alt 29. Jun 2009, 13:30
Problem gelöst!
Man muss in die Schema.ini wenn die Werte durch Kommata getrennt sind noch einen zusätzlichen parameter setzen und zwar DecimalSymbol=."
Keine Ahnung wer sich das ausgedacht hat jedenfalls steht in der MSDN nichts davon. Habe den entsprechenden Tipp dafür eben von einem Kollegen bekommen.


Gruß
Stormy
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

Re: CSV via ADO einlesen

  Alt 29. Jun 2009, 14:11
Hallo Stormy,

so wie Deine Daten aufgebaut sind (alle Feldinhalte mit " eingeschlossen), sollte es wirklich egal sein. aber da auch so etwas möglich ist
..; 123,456 ; ... sollte man alles definieren was möglich ist, sonst bekommt man ein Problem.

(Über die MS-Logik wollen wir jetzt mal nicht diskutieren hier lesen)

Gruß
K-H
  Mit Zitat antworten Zitat
Stormy

Registriert seit: 8. Okt 2005
Ort: LPZ
73 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: CSV via ADO einlesen

  Alt 29. Jun 2009, 14:16
Ja da hast du wohl Recht nur sollte es bei Quoted Strings egal sein was dazwischen steht.
Genau die selbe Seite der MSDN habe ich auch schon Studiert.
Doch dort steht nur spärlich etwas über den Parameter "DecimalSymbol".
Naja jetzt läuft es endlich.


Gruß
Stormy
  Mit Zitat antworten Zitat
Stormy

Registriert seit: 8. Okt 2005
Ort: LPZ
73 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: CSV via ADO einlesen

  Alt 6. Jul 2009, 20:42
Abend zusammen,

habe noch ein Problem was die gleiche Sache betrifft und wollte daher
keinen neuen Thread auf machen.

Ich habe also eine CSV-Datei in dieser es auch Felder gibt welche mehr als
255 Zeichen enthalten. Also Artikelbeschreibungen welche gut und gerne mal 500-800 Zeichen lang sind.

Jetzt lese ich diese CSV via MS Text Driver in eine TADOTable ein was problemlos funktioniert.
Will ich aber jetzt die Datensätze wieder auslesen bekomme ich nur maximal 255 Zeichen lange
Strings zurück. Sprich alles was länger als 255 Zeichen war wird abgeschnitten.

Jetzt ist meine Frage: Wer ist der Übeltäter? Liegt es an der ADO-Komponente, an ODBC bzw. dem
MS Text Driver oder gar an etwas ganz anderem? An SQL kann es ja denke ich mal nicht liegen.
Hat vllt. etwas mit den Datentypen zu tun? Delphi Strings unterstützen ja bis zu ~2^31 Zeichen
aber wie ist das bei MS? Könnte es schon am MS Text Driver liegen der nur 255er Strings einließt?
Was gibt es für Alternativen bzw. Lösungen?

Danke schonmal im Voraus.


Gruß
Stormy
  Mit Zitat antworten Zitat
Stormy

Registriert seit: 8. Okt 2005
Ort: LPZ
73 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: CSV via ADO einlesen

  Alt 7. Jul 2009, 08:35
Ok, Problem gelöst!
Nach abermaligen lesen der Doku kam ich zu dem Schluss des es an der Schema.ini lag.


Gruß
Stormy
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz