AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi External File (Import aus Textdatei in SQL-DB)
Thema durchsuchen
Ansicht
Themen-Optionen

External File (Import aus Textdatei in SQL-DB)

Ein Thema von Hansa · begonnen am 29. Sep 2002 · letzter Beitrag vom 2. Okt 2002
Antwort Antwort
Seite 2 von 2     12   
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#11
  Alt 1. Okt 2002, 11:37
Hallo Lemmy,

habe mich jetzt genau (ziemlich) an Dein Tutorial gehalten :

Code:
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;
Der Precompiler meldet mir dann folgenden Fehler :
Code:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 6, char 1.
COMMIT.
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.

Gruß
Hansa
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#12
  Alt 1. Okt 2002, 13:46
Hi Hansa,

ich weiß, ich erwähne in jedem meiner Tutos, auch wenns nicht angebracht ist , 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:
CREATE TABLE EXPdata EXTERNAL FILE 'D:\EXPdata.txt' (
  NR char (5),
  BEZ char (25),
  CRLF smallint);
tutet ohne Probleme. Meine Inserts:
Code:
INSERT INTO EXPdata Values(1,'sad',2573);
tuten auch, so dass in der Datei dann folgendes steht:

Code:
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:
INSERT INTO EXPdata SELECT nr, bez, 2573 FROM KG8;
Die 2573 brauchst Du wie gesagt, dass es ne schöne Liste gibt.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#13
  Alt 1. Okt 2002, 14:11
Hi,

das COMMIT habe ich bei Kosch geklaut, man weiß ja nie.
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.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#14
  Alt 1. Okt 2002, 14:25
Hi,

hier ist gleich schon die Antwort und die Frage auch :

Zitat:
> ich habe hier ein Script aus A.Koschs Buch "Interbase Datenbankentwicklung
> mit Delphi"
>
> CREATE TABLE ANG (
> PERSNR INTEGER NOT NULL,
> NAME VARCHAR(20));
> ALTER TABLE ANG
> ADD CONSTRAINT PK_ANG PRIMARY KEY(PERSNR);
>
> Mit IBexpert bringt er mir Fehlermeldungen, während es mit IBconsole
> einwandfrei durchläuft. Ähnliche Probleme gibt es mit EXTRNAL FILES.

I hope, you are using Script Executive to execute scripts?
If you are using SQL Editor for this you will get an error because SQL
Editor
executes only single statements, not scripts.
Muß leider weg, deshalb ungetestet. Aber eins weiß ich, habe den SQL-Editor benutzt. Auch ungetestet sage ich deshalb, daß er Recht hat.

Gruß
Hansa
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#15
  Alt 1. Okt 2002, 14:45
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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#16
  Alt 1. Okt 2002, 15:43
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 ?


Gruß
Hansa
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#17
  Alt 1. Okt 2002, 20:45
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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#18
  Alt 1. Okt 2002, 22:55
Hi Lemmy,

Gott sei Dank, das wäre ja ein Witz. Muß morgen alles überprüfen.

Träume jetzt bald von EXTERNAL,Delphi 7, Interbase........

Gruß
Hansa
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#19
  Alt 2. Okt 2002, 13:25
Hallo Lemmy,

Also lasse ich dieses Script ablaufen, erscheint im Grid der EXTERNAL Table D alles so wie es sein soll :

Code:
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)
);
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.

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:
INSERT INTO KUNDE8 SELECT FROM EXTERNAL...;
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 ?

Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:52 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