Announcement

Collapse
No announcement yet.

ADO bei Memofeldern in Textdatei

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ADO bei Memofeldern in Textdatei

    Hallo,<br><br>

    ich habe beim Zugriff auf Textdateien per ADO folgendes Phänomen erlebt:<br><br>

    Reproduzierbar wird ein Feld in einer Textdatei (CSV-Format) nach dem 255. Zeichen abgeschnitten, in einer anderen Textdatei nicht.
    Es handelt sich um denselben Datensatz. Die beiden Dateien unterscheiden sich nur in der Reihenfolge: Der fragliche Datensatz taucht in der funktionierenden Datei früher auf!<br><br>

    Offenbar legt ADO den Feldtyp bei Textdateien nach Analyse der ersten paar Datensätze fest. Einmal für Text255 statt Memo entschieden, kann sich hieran auch dann nichts mehr ändern, wenn später ein längeres Feld folgt.<br><br>

    Bei Access kann man ein ähnliches Verhalten erkennen: Der Textimport-Assistent schlägt 255er Felder vor, wenn der Datensatz "zu spät" auftaucht. Bei "früh genug" schlägt er gleich Memo vor.
    Aber hier kann ich immerhin den vorgeschlagenen Datentyp ändern vor dem eigentlichen Import.<br><br>

    Daher meine Frage: Kann man irgendwie der Zugriffskomponente beibringen, bei einem konkreten Feld Memo zu nehmen?<br><br>

    Hier der Code:
    <code>myADODataset:=TADODataset.create(nil);
    myADODataset.ConnectionString:='Provider=Microsoft .Jet.OLEDB.4.0;Persist Security Info=False;Data Source='+ Dateipfad +';Extended Properties=Text';
    myADODataset.commandtext:='SELECT * FROM '+Dateiname;
    myADODataset.open;
    ZeigmirdenFeldinhalt:=vartostr(myADODataset[zickigesFeld]);</code><br><br>

    Danke für jeden Denkanstoss,<br><br>

    Alex

  • #2
    Offenbar ist das Problem noch niemandem bekannt...<br><br>

    Ich hatte irgendwie gehofft, auf die fielddef-Eigenschaften zugreifen zu können, aber bisherige Versuche sind fehlgeschlagen.<br><br>

    Vielleicht weiß jemand, ob und wie das geht?<br><br>

    Danke,
    Ale

    Comment


    • #3
      Brauchst Du wirklich Dataset-Funktionalität?

      Ansonsten lade die CSV-Datei doch mit einer eigenen Importerklasse ein. Damit hast Du 100% kontrolle und brauchst dich nicht mit eigenheiten der JET-Datenbank herumärgen. Diese wird von MS eh in den nächsten Jahren entsorgt

      Comment


      • #4
        Eine eigene Klasse zu schreiben wäre sicherlich möglich, aber zeitaufwändiger, als eine vorhandene Eigenschaft zu nutzen.
        (*Wenn* sie denn vorhanden ist???).<br><br>

        Dataset-Funktionalität brauche ich insofern, als dass mit einem einfachen Insert-Into-SQL-Statement die CSV-Quelldatei in eine Datenbank importiert wird (die kann vom Typ Access, MSSQL, Oracle oder PostgreSQL sein).
        Dabei kann der Anwender auswählen, welche Felder er berücksichtigen will (wenn er will, auch mehrfach dasselbe Feld). Daher bastle ich den SQL-String zur Laufzeit zusammen, das ist recht bequem.<br><br>

        Aber meinst du damit wirklich, es gibt keine Möglichkeit? Das kann ich mir bald nicht vorstellen: Wie macht Access das dann (s. Eröffnungsposting)?<br><br>

        Gruß,
        Ale

        Comment

        Working...
        X