AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Einfügen über externalTabelle funktioniert nicht richtig
Thema durchsuchen
Ansicht
Themen-Optionen

Einfügen über externalTabelle funktioniert nicht richtig

Ein Thema von blutigerAnfänger · begonnen am 27. Feb 2014 · letzter Beitrag vom 12. Sep 2014
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
blutigerAnfänger

Registriert seit: 23. Mär 2010
82 Beiträge
 
#1

Einfügen über externalTabelle funktioniert nicht richtig

  Alt 27. Feb 2014, 08:59
Datenbank: firebird • Version: 2 • Zugriff über: IB Komponente
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:
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;
Der Quelltext sieht zwar nicht sehr vertrauenserweckend aus, aber er läuft.

Ich habe mehrere Möglichkeiten für crlf gefunden, hier als smallint aber auch char(2) ist möglich. Verwirrend!
Code:
  ... TABLE dat_ext external file''c:\externalTables\Tabelle2.txt''(feld001 varchar(50),feld002 varchar(250), crlf smallint )';
Völlig egal ob smallint oder Char(2), das Ergebnis ist dasselbe.

Ich hoffe ihr könnt mir helfen.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: Einfügen über externalTabelle funktioniert nicht richtig

  Alt 27. Feb 2014, 09:23
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.
Gruß, Jo
  Mit Zitat antworten Zitat
borwin

Registriert seit: 14. Sep 2006
Ort: Rostock
72 Beiträge
 
Delphi 2007 Enterprise
 
#3

AW: Einfügen über externalTabelle funktioniert nicht richtig

  Alt 27. Feb 2014, 10:21
... 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
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#4

AW: Einfügen über externalTabelle funktioniert nicht richtig

  Alt 27. Feb 2014, 12:09
@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.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: Einfügen über externalTabelle funktioniert nicht richtig

  Alt 27. Feb 2014, 12:13
... 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.
Verstehe ich nicht: Wenn ich in Firebird Daten aus einem anderen DMBS importieren muß, mache ich das mit einem SQL-Script, entweder direkt aus der Delphi-Anwendung heraus oder eben mit IbExpert (kostenlos in der Personal-Version). Da braucht's kein Auffüllen mit Leerzeichen; die Daten werden genau so in die Firebird-DB eingetragen, wie sie im Quell-DMBS vorliegen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Einfügen über externalTabelle funktioniert nicht richtig

  Alt 27. Feb 2014, 12:13
Zitat:
1. Was ist eine "external Tabelle"? Meinst du eine Tabelle in einem anderen DMBS?
Eine externe Datei, welche wie als Tabelle eingebunden wird und auf die man per SQL-Befehle (meist lesend) zugreifen kann.
Markus Kinzler
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: Einfügen über externalTabelle funktioniert nicht richtig

  Alt 27. Feb 2014, 12:17
Zitat:
1. Was ist eine "external Tabelle"? Meinst du eine Tabelle in einem anderen DMBS?
Eine externe Datei, welche wie als Tabelle eingebunden wird und auf die man per SQL-Befehle (meist lesend) zugreifen kann.
Du meinst, man kann in eine Firebird-DB eine externe Datei einbinden, die dann von der Anwendung, die auf diese Datenbank zugreift, als gewöhnliche Tabelle angesehen wird?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Einfügen über externalTabelle funktioniert nicht richtig

  Alt 27. Feb 2014, 12:20
Jein, man kann mit dieser Tabelle nicht alles machen; es gibt bestimmte Einschränkungen
Markus Kinzler
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#9

AW: Einfügen über externalTabelle funktioniert nicht richtig

  Alt 27. Feb 2014, 12:31
Jein, man kann mit dieser Tabelle nicht alles machen; es gibt bestimmte Einschränkungen
Und schon wieder was dazugelernt: Von diesen external Tables hatte ich bislang noch nichts gehört. Nun hab ich aber einen (älteren) Text gefunden, der das erklärt.
  Mit Zitat antworten Zitat
blutigerAnfänger

Registriert seit: 23. Mär 2010
82 Beiträge
 
#10

AW: Einfügen über externalTabelle funktioniert nicht richtig

  Alt 27. Feb 2014, 13:30
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:
AAAAA  {45 Leerzeichen}  BBBBB {245 Leerzeichen}  Zeilenende
in externer Datei
Code:
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
Wie man an der Zahl der As und Bs erkennt werden Buchstaben verschluckt.

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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


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 05:50 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