![]() |
Datenbank: firebird • Version: 2 • Zugriff über: IB Komponente
Einfügen über externalTabelle funktioniert nicht richtig
Hallo
ich möchte eine external Tabelle in eine Firebird Tabelle überführen. Der Quelltext den ich mir zusammengestückelt habe funktioniert fehlerfrei(laut Compiler). Das Ergebnis ist niederschmetternd. Es gibt keine Feldtrennung, jeweils 2 Buchstaben verschwinden(egal ob Feld1 od.Feld2), Datensatzendezeichen werden nicht erkannt.
Delphi-Quellcode:
Der Quelltext sieht zwar nicht sehr vertrauenserweckend aus, aber er läuft.
procedure TForm1.btn2Click(Sender: TObject);
begin //IBDatabase1.DatabaseName := 'c:\db\test.fdb'; with IBQuery1 do begin Active:=False; sql.Clear; sql.Text := 'DROP TABLE tabelle2' ; Active:=true; IBTransaction1.Commit; sql.clear; Active:=false; sql.text := 'CREATE TABLE TABELLE2 (FELD001 VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE DE_DE, FELD002 VARCHAR(250) CHARACTER SET ISO8859_1 COLLATE DE_DE)'; Active:=true; IBTransaction1.Commit; end; ibdb1.Close; end; procedure TForm1.btn3Click(Sender: TObject); begin with IBQuery1 do begin Active:=False; sql.Clear; sql.Text := 'Create TABLE dat_ext external file''c:\externalTables\Tabelle2.txt''(feld001 varchar(50),feld002 varchar(250), crlf smallint )'; Active:=true; IBTransaction1.Commit; end; end; procedure TForm1.btn4Click(Sender: TObject); begin with IBQuery1 do begin Active:=False; sql.Clear; sql.Text := 'Insert into Tabelle2 SELECT FELD001 , FELD002 from dat_ext '; Active:=true; IBTransaction1.Commit; end; end; procedure TForm1.btn5Click(Sender: TObject); begin with IBQuery1 do begin Active:=False; sql.Clear; sql.Text := 'drop table dat_ext '; Active:=true; IBTransaction1.Commit; end; end; Ich habe mehrere Möglichkeiten für crlf gefunden, hier als smallint aber auch char(2) ist möglich. Verwirrend!
Code:
Völlig egal ob smallint oder Char(2), das Ergebnis ist dasselbe.
... TABLE dat_ext external file''c:\externalTables\Tabelle2.txt''(feld001 varchar(50),feld002 varchar(250), crlf smallint )';
Ich hoffe ihr könnt mir helfen. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Kann man bei firebird keine Zeilentrennzeichen definieren?
Weißt Du, welche es wirklich sind? Stammt das File aus einem Unix oder (Win-)DOS System? Würde ich mal mit Hex Editor untersuchen und das Manual von external Tables studieren. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
... so auf die Schnelle eine Hinweiss.
Der Import verlangt immer feste Längen. Das geht am besten mit CHAR Feldern. Dort werden immer Werte mit der definierten Länge eingetragen. Rest wird mit Leerzeichen aufgefüllt Auch das Feld crlf muss ein Charfeld sein. Gruß Borwin |
AW: Einfügen über externalTabelle funktioniert nicht richtig
@blutigerAnfänger:
Ich hab da ein paar Fragen zu deinem Problem: 1. Was ist eine "external Tabelle"? Meinst du eine Tabelle in einem anderen DMBS? 2. Wenn sich diese "external Tabelle" in einem anderen DMBS befindet, kannst du mit deiner Delphi-Anwendung darauf zugreifen? 3. Wenn sich diese "external Tabelle" in einem anderen DMBS befindet, kannst du mit einem entsprechenden Dateimanager diese Tabelle exportieren, z.B. als CSV-Datei? 4. Wieso verwendest du in deiner Anwendung nicht aussagekräftige Bezeichner? Button1 sagt überhaupt nichts darüber aus, wozu der Button verwendet wird. Dasselbe gilt für deine Spalten-Bezeichner in der Datenbank. Durch die Verwendung sog. sprechender Bezeichner erhöhst du die Übersicht und Lesbarkeit deines Quellcodes. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Zitat:
|
AW: Einfügen über externalTabelle funktioniert nicht richtig
Zitat:
|
AW: Einfügen über externalTabelle funktioniert nicht richtig
Zitat:
|
AW: Einfügen über externalTabelle funktioniert nicht richtig
Jein, man kann mit dieser Tabelle nicht alles machen; es gibt bestimmte Einschränkungen
|
AW: Einfügen über externalTabelle funktioniert nicht richtig
Zitat:
![]() |
AW: Einfügen über externalTabelle funktioniert nicht richtig
In der Zwischenzeit habe ich mir IBExpertPersonal aufgespielt und festgestellt:
1. Die externe Datei wird erstellt und befüllt. 2. Die Zieltabelle (Tabelle2) wird ordnungsgemäß befüllt(mit dem Mist der in der externen Datei steht.) Zu 1. habe ich ein schematisches Beispiel: original
Code:
in externer Datei
AAAAA {45 Leerzeichen} BBBBB {245 Leerzeichen} Zeilenende
Code:
Wie man an der Zahl der As und Bs erkennt werden Buchstaben verschluckt.
AAA {43 Leerzeichen} BB {8 Leerzeichen} Spaltentrenner(IBExpert) B {240 Leerzeichen} Zeilenende
A steht für den zB.Buchstaben aus dem String in Feld 1 B analog Also ist offensichtlich bei der Überführung in die externe Datei bereits ein Fehler aufgetreten. Mir ist aber keine andere Möglichkeit bekannt um mit externen Dateien zu arbeiten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz