![]() |
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 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