Datenbank: SQLite • Version: 1.0 • Zugriff über: Firedac
CSV Textdatei in Memtable laden und mit Query abfragen
Hi,
Ich steh mal wieder auf Kriegsfuß mit den Batchmove komponenten oder der Memtable, da bin ich mir tatsächlich nicht ganz sicher :? Ich möchte folgendes Erreichen: Ich habe CSV Dateien (Der Aufbau und die Zusammensetzung sind hier egal, das einzige was zählt, sie sind Syntaktisch korrekt) die CSV Dateien möchte ich am Schluss in der Form im Programm haben, dass ich Sie mit Standard SQL abfragen kann. Es soll keine Zusätzliche Connection zu einem externen DBMS nötig sein, also habe ich folgedes versucht, das eigentlich auch soweit schon funktioniert. BatchmoveTextReader --> Liest CSV BatchmoveDatasetWriter --> Schreibt in Memtabale FDconnection, LocalSQL und SQLitePhysLink --> Kümmern sich brav darum die Memtable im Speicher zur Verfügung zu stellen FDQuery --> Quatscht brav mit der Memtable über die LocalSQL Anbindung Batchmove --> Kümmer sich um dasd "Felder Raten" und die Anlage der korrepondierenden Felder in der Memtable Mein Problem ist folgendes, beim ersten mal ausführen von FDBatchmove.GuessFormat und FDBtchmove.Execute werden automatisch in der Memtable die Fielddefs erstellt. Leider bekomme ich diesen Prozess im Code nicht wiederholt, so dass ich als nächstes eine andere Datei einlesen kann. Ich bekomme dann die unterschiedlichsten Fehlermeldungen. Entweder, dass die Quell und Zielfelder nicht passen, das die Datenmenge nicht offen ist, dass die Datenmenge nicht initialisiert ist... ich dreh mich irgendwie im Kreis. Die Frage ist also, wie bekomme ich die Batchmove komponenten dazu überredet, bei einem 2. durchlauf, die Felder in meiner Memtable wieder neu zu erstellen? |
AW: CSV Textdatei in Memtable laden und mit Query abfragen
Hast du poClearDest oder poClearDestNoUndo in den BatchMove Options aktiv?
Eventuell musst du die Zieltabelle auch vorher löschen. |
AW: CSV Textdatei in Memtable laden und mit Query abfragen
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Uwe,
danke für den Hinweis, dass hat zum Teil schon geholfen. Kannst du mir einen kleinen Gefallen tun :oops: Ich habe in den Anhang eine Zip gepackt mit einem kleinen Programm das mein derzeitiges Problem verdeutlicht. In der Zip sind auch 2 CSV Dateien mit drin. Ich verstehen nicht waum der Import nicht funktioniert. Die GuessFormat Funktion gibt einfach keine Feldbezeichnungen zurück und ich verstehe nicht warum. Ich befürchte langsam seh ich vor lauter Wald keine Bäume mehr. grüß PJM |
AW: CSV Textdatei in Memtable laden und mit Query abfragen
Damit GuessFormat die erste Zeile als Feldnamen interpretiert, müssen diese entweder groß geschrieben werden oder es müssen bei den Feldwerten auch nicht-String Werte gefunden werden.
Im Allgemeinen sollte man auf GuessFormat lieber verzichten, da das Ergebnis nicht wirklich stabil ist. Wenn man das Format kennt, trägt man es besser im Reader.DataDef korrekt ein. |
AW: CSV Textdatei in Memtable laden und mit Query abfragen
Zitat:
|
AW: CSV Textdatei in Memtable laden und mit Query abfragen
Zitat:
Delphi-Quellcode:
// When a value is upper-cased, this is a "good" sign, that
// the value is field name if not CheckSet(sItem, ['A'..'Z', '_'], ['A'..'Z', '0'..'9', '_', '#', '$']) then lFieldNamesUC := False; ... // Final guess about first line DataDef.WithFieldNames := lFieldNames and (not lAllStrings or lFieldNamesUC); Zitat:
Delphi-Quellcode:
with TFDBatchMoveTextReader.Create(lBatchmove) do
... with TFDBatchMoveDataSetWriter.Create(lBatchmove) do |
AW: CSV Textdatei in Memtable laden und mit Query abfragen
[QUOTE=Uwe Raabe;1513741]
Zitat:
Delphi-Quellcode:
:gruebel: wie kommst du an die Source. Bei mir ist nach dem interface ( IFDBatchMoveReader = interface(IFDBatchMoveDriver) ) Schluss.:pale:
// When a value is upper-cased, this is a "good" sign, that
// the value is field name if not CheckSet(sItem, ['A'..'Z', '_'], ['A'..'Z', '0'..'9', '_', '#', '$']) then lFieldNamesUC := False; ... // Final guess about first line DataDef.WithFieldNames := lFieldNames and (not lAllStrings or lFieldNamesUC); Ich befürchte ich stell mich grad richtig doof dran :oops: |
AW: CSV Textdatei in Memtable laden und mit Query abfragen
Zitat:
Delphi-Quellcode:
->
TFDBatchMoveTextReader
Delphi-Quellcode:
.
GuessFormat
Übrigens: Du setzt dort nach dem Create zwar die DataDef-Eigenschaften, die werden aber bei GuessFormat wieder überschrieben. Du solltest also das GuessFormat nach dem Setzen von FileName aber vor den Einstellungen von DataDef aufrufen. |
AW: CSV Textdatei in Memtable laden und mit Query abfragen
Zitat:
Über die Sinnhaftigkeit der Definition, was eine Überschrift ist, lässt sich sicher streiten, aber das hat mir schon mal sehr weiter geholfen. Vielen Dank, Top-Hilfestellung wie immer :thumb: Ps.: Danke für den Hinweis mit den DataDef Eigenschaften. Hatte ich zwischenzeitlich sogar schon geändert und die Eigenschaft sogar um eine kleine Helper Class erweitert, damit ich mir das Geschachtel bei der Prüfung auf Nil spare.
Delphi-Quellcode:
type
TFDTextFieldHelper = class helper for TFDTextField private function getter: TFDTextDataType; procedure setter(const Value: TFDTextDataType); published property DataTypeNilSafe: TFDTextDataType read getter write setter; end; .... { TFDTextFieldHelper } function TFDTextFieldHelper.getter: TFDTextDataType; begin if Self <> nil then result := Self.DataType end; procedure TFDTextFieldHelper.setter(const Value: TFDTextDataType); begin if Self <> nil then Self.DataType := Value; end; ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:53 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