![]() |
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. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Zitat:
|
AW: Einfügen über externalTabelle funktioniert nicht richtig
Code:
das ist die allererste Zeile der external Tabelle. Es fehlen bereits 2 Buchstaben aus dem String A (Feld 1)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 @ Perlsau Der Gedanke mit dem Trennzeichen ist gut, dennoch wo sollen bei den 2 fehlenden Buchstaben in der allerersten Zeile Trennzeichen herkommen? In den Vorschriften zur external Datei sollen Dateien mit fester Feldlänge verwendet werden. Genau das habe ich. Was in Feld 2 (mit BB gekennzeichnet) an fehlinterpretierbaren Trennzeichen stehen könnten, sollte durch die FeldGröße (250 Zeichen) aufgefangen werden. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Du hattest oben doch geschrieben:
Code:
Das heißt, du hast 5 Zeichen an Information, die mit den 245 Leerzeichen dahinter 250 Zeichen ergeben. Insgesamt hast du hier zwei Spalten.
AAAAA {45 Leerzeichen} BBBBB {245 Leerzeichen} Zeilenende
Nun hast du eine Zeile, in welcher sich plötzlich drei Spalten befinden, wobei die Gesamtanzahl der Länge der letzten beiden Spalten wiederum genau die 250 Zeichen ergeben. Das heißt: irgendwo in dieser Zeile steht ein Spaltentrennzeichen, das dort nicht hingehört, weshalb auch eine dritte Spalte (fehl-)interpretiert wird. Würde dort kein Spaltentrennzeichen stehen, dann würde die Zeile korrekt interpretiert werden. Zitat:
Trennzeichen kommen nicht von irgendwo her, sondern befinden sich in deiner externen Datei. Wenn ich derartige Probleme habe, dann untersuche ich die entsprechende Datei ganz genau, am besten via Debugging im Quellcode meines verarbeitenden Programms. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Liste der Anhänge anzeigen (Anzahl: 2)
@Perlsau
Also in Datei Tabelle2.txt steht meine originale TestTabelle. In Tabelle2export.txt ist die External Tabelle als Insert statement.(von IBExpert exportiert) Ich hoffe es hilft dir weiter. Wo in der exportierten Tabelle allerdings die Kommas herkommen wird wohl ein Geheimnis von Firebird bleiben. Ich vermute mal, daß sollen die ominösen Trennzeichen sein, welche nicht in der Original Datei vorhanden sind. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Zitat:
Delphi-Quellcode:
In der Original-Textdatei kommen etliche Kommas vor. Wenn die als Trennzeichen fungieren, kann das natürlich nicht klappen.
Procedure Einlesen;
Var MeineListe : TStringList; Datei, Fremdwort, Beschreibung : String; i,z : Integer; Begin If not OpenDialog.Execute then exit; Datei := OpenDialog.FileName; MeineListe := TStringList.Create; Try MeineListe.LoadFromFile(Datei); z := MeineListe.Count; If z > 0 then For i := 0 to z-1 DO Begin Beschreibung := Liste[i]; Fremdwort := Trim(Copy(Beschreibung,1,50); Delete(Beschreibung,1,50); DatenModul.Dataset.Append; DatenModul.Dataset.FieldByName('FREMDWORT').AsString := Fremdwort; DatenModul.Dataset.FieldByName('BESCHREIBUNG').AsString := Beschreibung; DatenModul.Dataset.Post; End; Finally MeineListe.Free; End; ShowMessage('Einlesen von "' + Datei + '" beendet ...'); End; Wie hattest du denn mit IbExpert die externe Datei eingebunden? |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Ich benutze IBExpert eigentlich nur um Ergebnisse anzusehen, die von Delphi Quelltext erzeugt wurden.
Nun eine Frage zu deinem Quelltext: Datenmodul?? Steht in den Interbasekomponenten nicht drin. Offenbar willst du jetzt einen anderen Weg als externalFile einschlagen? |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Zitat:
Zitat:
Es geht ja offenbar nicht darum, eine externe Datei zur ständigen Verfügung zu haben, wie das z.B. beim Einbinden einer external Table beabsichtigt ist, sondern um das Einlesen von Daten aus einer Textdatei in die Datenbank. Vermutlich willst du dir ein datenbankgestütztes Fremdwörterbuch bauen und dafür bereits vorhandene Fremdwort-Ressourcen verwenden. Das heißt, du willst die Inhalte nur einmal einlesen, danach benötigst du diese Textdatei nicht mehr. Anders wäre es, wenn du das ExternalFile benötigen würdest, weil irgend eine andere Anwendung diese External Table ständig aktualisiert. Bei External Table werden, soweit ich das verstanden habe, keine Kopien der Inhalte in der Datenbank angelegt, sondern das ExternalFile direkt als Speicher verwendet. Du aber möchtest die Daten der Textdatei in deiner Datenbank-Tabelle verfügbar haben. Übrigens fehlt in meiner Methode noch eine Prüfung, ob das aktuell einzufügende Fremdwort bereits in der Datenbank existiert. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Zitat:
Zitat:
Kurz gesagt es ist ein schnellerer Datenimport als das Einlesen jedes einzelnen Datensatzes per Insert...value... |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Zitat:
Bulk Insert bedeutet nichts anderes, als die Daten in einem Rutsch einzulesen. Das kannst du z.B. auch mit IbExpert machen, wenn du aus den Quelldaten zuvor eine entsprechende SQL-Datei erzeugst.
Delphi-Quellcode:
Und am Ende vor dem Freigeben der Liste:
MeineListe[i] := "insert into Fremdworttabelle (Fremdwort, Beschreibung) values (' + QuotedStr(Fremdwort) + ',' + QuotedStr(Beschreibung) + ');
Delphi-Quellcode:
Am Ende hast du eine Textdatei, die du direkt in IbExpert via Sql-Script einlesen kannst.
MeineListe.SaveToFile(Datei + '.sql');
Kurz: Es gibt viele Wege, um diese Daten in die Datenbank zu bekommen. Einen davon hab ich dir gezeigt. Zitat:
Könntest du vielleicht noch mitteilen, wieviele Datensätze insgesamt eingelesen werden sollen? Wenn es wirklich nur ein paar (tausend) sind, dann ist Bulk Insert quasi überdimensioniert. Meine oben gezeigte Methode würde dann vollkommen ausreichen. Bulk Insert hat zudem den Nachteil, daß du nicht ohne weiteres prüfen kannst, ob ein entsprechender Datensatz bereits existiert. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
@Perlsau
Also ich kann dir leider keine Quelle zeigen, dennoch bin ich mir sicher ähnliches gelesen zu haben.(Altersstarrsinn??) Ansonsten habe ich ja jetzt Material für ein paar Tage. Gute Nacht. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Zitat:
![]() MySQL: ![]() Oracle: ![]() Weiter habe ich jetzt nicht recherchiert. Das hat mit ständiger Verfügbarkeit usw. überhaupt nichts zu tun, sondern es geht tatsächlich um das schnelle Einlesen größerer Datenmengen aus einer externen Quelle. Auf der Zielseite braucht man natürlich SQL, aber für diesen Zweck ist es eben eine spezielle Syntax. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Danke, DeddyH, das erweitert meinen Horizont. :thumb:
|
AW: Einfügen über externalTabelle funktioniert nicht richtig
Hallo
@Perlsau #19 Du wolltest wissen, um wieviele Datensätze es geht: 100.000 Stck. und mehr. Dein Quelltext in Abwandlung funktioniert einwandfrei und rasendschnell. Wesentlich langsamer ist das Einlesen des SQL Scripts in IBExpert. Ich habe das mit der kompletten Tabelle ausprobiert und IBExpert benötigt 3 Minuten zum Einlesen von ca.100.000 Datensätzen.
Delphi-Quellcode:
Gibt es eine Möglichkeit, außerhalb der ZEOS Komponenten welche ich nicht nutze, den Script einzulesen und auszuführen?.
Procedure TForm1.Einlesen();
Var MeineListe, HilfsListe, ZielListe : TStringList; Datei, Fremdwort, Beschreibung : String; i,z : Integer; Begin MeineListe := TStringList.Create; Try MeineListe.LoadFromFile('kurz.txt'); z := MeineListe.Count; ZielListe:= TStringList.Create; HilfsListe:= TStringList.Create; try For i := 0 to z-1 DO Begin HilfsListe.Text := StringReplace(MeineListe[i], #9, sLineBreak, [rfReplaceAll]); Beschreibung := HilfsListe[1]; Fremdwort := HilfsListe[0]; ZielListe.Add('Insert into Tabelle2 (Fremdwort,Beschreibung) values (' + QuotedStr(HilfsListe[0]) + ',' + QuotedStr(HilfsListe[1]) + ');'); end; Finally MeineListe.Free; ZielListe.SaveToFile('ziel.sql'); HilfsListe.Free; ZielListe.Free; End; finally end; end;
Delphi-Quellcode:
Hier hab bereits nach der ersten Zeile Error Code -104 Token unknown -line 2, Column 1 Insert.
procedure TForm1.LadezielsqlClick(Sender: TObject);
begin with IBQuery1 do begin Active:=False; SQL.Clear; SQL.LoadFromFile('ziel.sql'); ExecSQL; IBTransaction1.Commit; end; end; Ach im Übrigen wir sind jetzt sehr weit weg von meiner Ausgangsfrage. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Hallo
@Perlsau Nach der Neuinstallation der IBX Komponenten, habe ich jetzt die IBScript Komponente zur Verfügung. Und damit folgende Lösung erbastelt.
Delphi-Quellcode:
Um meine 100.000 Datensätze einzulesen, brauche ich jetzt ca. 2,5 Minuten. IBExpert brauchte 3 Minuten.
procedure TForm1.LadezielsqlClick(Sender: TObject);
var startzeit, stopzeit : TDateTime; i:Integer; begin startzeit :=Now; ibdb1.Open; IBScript.Script.LoadFromFile('ziel.sql'); IBScript.ExecuteScript; IBTransaction1.Commit; stopzeit :=Now; Panel1.Caption :='SuchZeit : '+ FormatDateTime('nn:ss:zzz', StopZeit - StartZeit) ; end; Nochmals external Tabellen: Nach langen Herumprobieren hab ich die Lösung: Falsch ist:
Delphi-Quellcode:
Richtig ist:
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 char(2) )'; Active:=true; IBTransaction1.Commit; end; end;
Delphi-Quellcode:
Der Unterschied: char statt varchar.
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 char(50), FELD002 CHAR(250), crlf char(2) )'; Active:=true; IBTransaction1.Commit; end; end; Zeitliche Verbesserung des Datenimports: SQLScript : 2,5 Minuten, ExternalTabelle : weniger als 5 Sekunden. Dank an Borwin der das schon in #3 erkannt hat. Dennoch, auf diese Art und Weise habe ich eine weitere Importmöglichkeit, InsertScript, in Erstellung und Nutzung kennengelernt. Danke Perlsau. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Erneut external Dateien
Delphi-Quellcode:
Dies ist der richtige Code für die Erstellung eines external Files, bestehend aus 2 Spalten von Strings.
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 char(50), FELD002 CHAR(250), crlf char(2) )'; Active:=true; IBTransaction1.Commit; end; end; Frage: Wie sieht der Code aus für 4 Spalten, bestehend aus 2 Spalten Strings, 1er Spalte Integer und 1er Spalte ID (Autoinc)? Mittlerweile habe ich diesen fehlerhaften Code:
Delphi-Quellcode:
Soweit wie ich inzwischen weiß, wird die Spalte ID(Autoinc) erst nach dem Import der Daten ausgefüllt. Die Tabelle muß aber diese Spalte enthalten.
sql.Clear;
sql.Text := 'Create TABLE dat_ext external file''c:\db\import.txt''( checkbox integer ,name CHAR(50), bezeichnung CHAR(250), crlf CHAR(2) )'; Active:=true; IBTransaction1.Commit; Active:=False; sql.Clear; sql.Text := 'Insert into Tabelle2 SELECT checkbox , name, bezeichnung from dat_ext '; Active:=true; IBTransaction1.Commit;
Code:
Fehler: da kann ich sagen siehe Beitrag #10
sql.text := 'CREATE TABLE Tabelle2 (checkbox INTEGER, name VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE DE_DE, bezeichnung VARCHAR(250) CHARACTER SET ISO8859_1 COLLATE DE_DE , ID INTEGER)';
Kann Firebird externalFiles überhaupt mit Integer Feldern erstellen? Es sind viele teils widersprüchliche Ergebnisse zu finden, nur großteils Englisch. Ich hoffe auf Eure Hilfe. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Externe Tabellen sind nicht dazu da, die Daten in einer endgültigen Form zu enthalten. Sie dienen nur zum Import. Du beschreibst also mit dem 'CREATE TABLE' nur den Aufbau deiner Datei und importierst sie dann in eine andere Tabelle, wobei Du die notwendigen Transformationen vornimmst (Char => Integer, Float, DateTime etc.). Aus diesem Grund ist es auch überflüssig und falsch, einen Autoinc Wert in der externen Tabelle vorhalten zu wollen.
|
AW: Einfügen über externalTabelle funktioniert nicht richtig
Zitat:
String --> CHAR --> VARCHAR INTEGER --> ??? --> INTEGER Also Ich habe eine Tabelle mit 3 Feldern (Integer, String, String). Die Stringfelder werden als CHAR bezeichnet und in der endgültigen Firebird Tabelle zu VARCHAR transformiert. Wie mache ich das mit Integer? INTEGER zu CHAR gibt es Konversionsfehler und INTEGER mit Längenbezeichnung zB. INTEGER(10) ist Blödsinn. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Zitat:
Ich möchte noch ergänzen, dass das Bedürfnis nach einer eindeutigen ID natürlich legitim ist. Was und wie Du aber auch immer importierst, die zu importierenden Daten sollten über solch ein eindeutiges Merkmal bereits verfügen, notfalls über mehrere Felder und idealer Weise auch gegenüber den bereits importierten Daten. Ansonsten holst Du Dir die Leichen reihenweise in den Keller. Schau Dir mal Literatur zum Thema ETL an. Ganz grob: Daten temporär in der DB bereitstellen (z.B. via ExternalTable) Daten aufbereiten (z.B. Dubletten entfernen, plus Rückmeldung / Log) Daten dann mit System-/Produktivdaten abgleichen und ggF. importieren. Dabei gehst Du sehr wahrscheinlich Satz für Satz durch die neuen Daten und schaust wo und wie Du sie unterbringst. (Wiederum mit Rückmeldung bzw. Log für automatisierte Prozesse) Konvertierung: Es ist stark anzunehmen, dass Deine CSV Daten im Klartext dort stehen und Integer bspw nicht 2 oder 4 Byte binär codiert sind. Also Integer auch als Varchar einlesen mit Längenangabe entsprechend dem CSV. P.S.: Wenn Du aus der DB dann auf die "integer" Daten zugreifst, musst Du konvertieren. Also beim Insert in die Zieltabelle z.B.. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:
Also am besten mit einem 2ten Integer Feld (in dem bereits die Autoinc enthalten ist)?? zum 2ten Absatz: Nenn mir doch mal eine deutschsprachige Literatur zum Thema ETL (externalTabelle?), welche möglichst einfach gehalten ist. Vielleicht gibt's da noch etwas was ich bei meiner Recherche übersehen habe. zum 3tenAbsatz (Konvertierung): Anbei zwei Screenshots, beide zeigen die Ergebnisse der external Tabelle aus IBexpert personnel. Der eine Screenshot zeigt das Importergebnis von CHAR, der andere das Importergebnis von VARCHAR an beide mit Länge 10. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Und wie sieht die Datei aus?
|
AW: Einfügen über externalTabelle funktioniert nicht richtig
Zitat:
ETL beschreibt den Vorgang ExtractLoadTransform oft verwendet in Datawarehouse Systemen: ![]() Sieht so aus, als ob Deine Längenangaben nicht zur CSV Datei passen. Feld-Trennzeichen wird mitgelesen oder so. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
|
AW: Einfügen über externalTabelle funktioniert nicht richtig
CSV? Ich lese immer CSV... Kann Firebird das denn? So wie ich das verstanden habe, muss die Textdatei feste Breiten haben... Oder geht das etwa? :gruebel:
|
AW: Einfügen über externalTabelle funktioniert nicht richtig
Zitat:
Mein Hinweis mit den micht berücksichtigten Spaltentrennzeichen war dementsprechend daneben. Aber die Datei ist ja offenbar fixed length. Sollte also in Ordnung sein. Eine Zeile 310 Bytes, mit Umbrauch 312. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Irgendwie sieht das so aus, das der Import eine Datei ohne Zeilenumbrüche erwartet.
Mach doch alle Zeilenumbrüche aus der Datei raus oder mach ein 4tes Feld Länge 2, dass die Zeielnumbruchzeichen aufnimmt. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Ich hab's geschafft. Zwei Fehler:
1. Fehler: Im Vorbereitungsprogramm, welches die fixe Länge erzeugt, hat sich beim Kopieren ein falscher Index eingeschlichen. Deswegen war die External Tabelle so ziemlich durcheinandergeraten. Korrigiert. Externe Tabelle funktioniert nachwievor nur mit Char (kein Varchar, kein Integer o.A.) 2.Fehler Die FirebirdZieltabelle hatte wie beschrieben 4 Felder, (Checkbox Integer, Name Varchar, Bezeichnung Varchar, und ID Integer. Das ID Integer Feld gelöscht und der Import läuft fehlerfrei. Danke an Alle. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Zitat:
SQL-Code:
insert into <Tabelle>(...) select cast( checkbox as Integer), ... from dat_ext
|
AW: Einfügen über externalTabelle funktioniert nicht richtig
Irgendwie klingt es ja auch logisch, dass bei einer festen Breite auch der Datentyp eine feste Breite hat ;)
|
AW: Einfügen über externalTabelle funktioniert nicht richtig
Das Problem mit dem ID Feld hat sich auch erledigt.
Das nachträgliche Einfügen der ID Tabelle funktioniert zwar, aber der Trigger und der Generator lassen sich nicht zum laufen bringen(Trigger nicht einmal erzeugen). Das Problem läßt sich durch das Einfügen eines zusätzlichen Feldes (ID) im Vorbereitungsprogramm umgehen. Fügt zwar ein "statisches" ID Feld ein, ist aber für den Zweck völlig egal. |
AW: Einfügen über externalTabelle funktioniert nicht richtig
Wieso willst Du in einer externen Tabelle denn überhaupt so eine ID haben?
Nochmal: Die 'EXTERNAL TABLE' Funktionalität ist dazu da, um auf externe Dateien zugreifen zu können. Du sollst die tunlichst in eine andere Tabelle überführen, wo Du dann deine Trigger, AutoInc-Spalten, Integer, Numeric, foobars und sonst was für Datentypen hast. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:00 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