![]() |
Hallo Lemmy,
habe mich jetzt genau (ziemlich) an Dein Tutorial gehalten :
Code:
Der Precompiler meldet mir dann folgenden Fehler :
CREATE TABLE EXPdata EXTERNAL FILE 'D:\EXPdata.txt' (
NR char (5), BEZ char (25), CRLF smallint); COMMIT; INSERT INTO EXPdata SELECT nr,bez FROM KG8; COMMIT;
Code:
Die zu exportierende Table besteht nur aus ID,nr und Bez. Die ID lasse ich bewußt raus, siehe oben. Habe das ganze dann noch in A.Koschs Buch durchgelesen, leider nur 1 Seite, da siehts genauso aus, bis auf CRLF CHAR (2). Das wollte ich mal mit deinem Tuto vergleichen, aber jetzt steck ich fest.
Invalid token.
Dynamic SQL Error. SQL error code = -104. Token unknown - line 6, char 1. COMMIT. Gruß Hansa |
Hi Hansa,
ich weiß, ich erwähne in jedem meiner Tutos, auch wenns nicht angebracht ist :oops: , wie toll Scripte sind, doch auch ich führe SQL-Statements immer in Blöcken aus, ein Commit benutze ich so gut wie nie, dazu verwende ich die entsprechende IBCOnsole-Funktion. Die Anweisung
Code:
tutet ohne Probleme. Meine Inserts:
CREATE TABLE EXPdata EXTERNAL FILE 'D:\EXPdata.txt' (
NR char (5), BEZ char (25), CRLF smallint);
Code:
tuten auch, so dass in der Datei dann folgendes steht:
INSERT INTO EXPdata Values(1,'sad',2573);
Code:
:hello:
1 sad
2 sad 3 sad Dabei beachte man, dass der Text "sad" zusätzlich noch entsprechende Leerstellen hat, um auf 25 Zeichen zu kommen! Wenn Du exportieren willst, sollte folgendes gehen:
Code:
Die 2573 brauchst Du wie gesagt, dass es ne schöne Liste gibt. :witch:
INSERT INTO EXPdata SELECT nr, bez, 2573 FROM KG8;
|
Hi,
das COMMIT habe ich bei Kosch geklaut, man weiß ja nie. :mrgreen: Der nimmt außerdem statt 2573 ein CHAR (2), klingt eigentlich logischer. Gruß Hansa Ach so : hät ich fast vergessen ! Benutze im Moment IBexpert statt IBconsole, weil es wesentlich mehr Funktionen hat. Bei verschiedenen Scripten gibt es da Unterschiede. Könnte so was sein. Habe diese Frage an die weitergeleitet. :D |
Hi,
hier ist gleich schon die Antwort und die Frage auch : Zitat:
Gruß Hansa |
Hi,
den IBExpert habe ich mir auch schon ein paar mal angeschaut, der gefällt mir aber nicht so. Ich verwende ihn hauptsächlich für Metadatenextraktion... Grüße Lemmy |
Hi,
so, jetzt hat alles soweit geklappt, d.h. habe jetzt eine textdatei, in der meine 3 Kundengruppen richtig drin stehen. Aber was soll ich damit? Habe hier eine nicht-SQL Kundendatei (2000 Kunden), die habe ich zerpflückt und Satz für Satz in je eine Zeile reingeschrieben, genau wie in meiner DB definiert (also richtige Länge usw.). Sind so ca. 700KB. Die Daten aus der Textdatei will ich jetzt aber in die DB REIN kriegen nicht raus! Dachte, das sei genau so einfach, so etwa wie "INSERT FROM ExtTable INTO kunde" oder so. Über ein solches Konstrukt finde ich aber leider nichts. Heißt das nun, daß es so gar nicht geht und ich die mühsam erstellte, auf die DB angepaßte Textdatei, doch wieder Feld für Feld auseinanderbauen muß, um dann mit Values die Werte rein zu kriegen ? :bouncing4: Gruß Hansa |
Nein, jetzt musst Du mit "Create Table External File" diese Textdatei ansprechen und dabei die richtigen Datentypen sowie die richtigen Größen benutzen. Dann kannst Du mit "Insert into ... Select from External" die Daten in deine DB übernehmen....
Grüße Lemmy |
Hi Lemmy,
Gott sei Dank, das wäre ja ein Witz. Muß morgen alles überprüfen. :angle: Träume jetzt bald von EXTERNAL,Delphi 7, Interbase........ Gruß Hansa |
Hallo Lemmy,
Also lasse ich dieses Script ablaufen, erscheint im Grid der EXTERNAL Table D alles so wie es sein soll :
Code:
Das CRLF besteht, wie der Name schon verrät aus CR und LF. Also sind in den Daten-Zeilen der Textdatai zwei Zeichen mehr drin, als Interbase eigentlich braucht. Das Smallint hat in Delphi auch zwei Byte, aber in Interbase ? Mit Smallint oder integer war alles nämlich verschoben.
CREATE TABLE D EXTERNAL 'D:\5.0\KUSQL' (
NR CHAR(5) NOT NULL, ANREDE STR30, NAME STR30 NOT NULL, STRASSE STR30, ORT STR30, CRLF CHAR(2) ); Aber das ist jetzt egal. Ich habe jedenfalls jetzt in der DB eine externe Table und muß deren Werte in die "richtige" Interbase-Table reinkriegen.
Code:
So geht es aber nicht. Da stimmt die Syntax irgendwie nicht. Meistens meckert er direkt nach select. Das größte Problem ist aber, daß die nr aus der Textdatei zwar in die External Table (als CHAR (5)) übernommen wird aber in der richtigen Table ist sie als integer definiert. Wie soll ich denn da den Typ umwandeln ?
INSERT INTO KUNDE8 SELECT FROM EXTERNAL...;
Gruß Hansa :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:05 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 by Thomas Breitkreuz