Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird-DB -> Tabellen nach CSV exportieren (https://www.delphipraxis.net/175853-firebird-db-tabellen-nach-csv-exportieren.html)

bernau 24. Jul 2013 10:06

Datenbank: firebird • Version: alle • Zugriff über: egal

Firebird-DB -> Tabellen nach CSV exportieren
 
Ich suche ein Tool, mit dem ich alle Tabellen einer DB in einem Rutsch in CSV-Daten exportieren kann. Jede Tabelle soll in eine eigene CSV-Datei exportiert werden. Soll ohne viel Aufwand geschehen. Ich möchte also nicht jede Tabelle einzeln per Hand exportieren, sondern alle auf einmal. Habe mir gedacht, bevor ich es selber schreibe, frage ich mal nach. ;-)

DeddyH 24. Jul 2013 10:59

AW: Firebird-DB -> Tabellen nach CSV exportieren
 
http://www.delphipraxis.net/103662-e...csv-datei.html

bernau 24. Jul 2013 13:01

AW: Firebird-DB -> Tabellen nach CSV exportieren
 
Danke. Schade, ich dachte es gibt schon etwas fertiges.

Aber OK. So viel Arbeit ist es nicht das selber zu schreiben.

Hansa 24. Jul 2013 15:09

AW: Firebird-DB -> Tabellen nach CSV exportieren
 
Zitat:

Zitat von bernau (Beitrag 1222492)
ich dachte es gibt schon etwas fertiges.

Was ist schon fertig ? :lol: Prinzipiell brauchst Du doch nur über die einzelnen Tabellen zu wandern. Das geht so : Dataset anlegen und auf die Systemtabelle der Table-Names zugreifen. Also z.B.:

Delphi-Quellcode:
  while not DbDS.Eof do begin
    TableName := DbDS.FieldByName ('RDB$RELATION_NAME').AsString;
// hier Daten den Tablename an weiteres Dataset zuweisen und Daten exportieren
    DetailDS.Close;
    DetailDS.SelectSQL.Text := 'select count (*) AS ANZAHL from ' + TableName;
    DetailDS.Open;
    Anzahl := DetailDS.FieldByName ('ANZAHL').AsString;
    DbDS.Next;
  end;
Müsste doch eigentlich so gehen. :gruebel:

IBExpert 24. Jul 2013 16:24

AW: Firebird-DB -> Tabellen nach CSV exportieren
 
solltest du ein IBExpert als Vollversion haben, dann geht das mit folgendem Code
im SQL Editor (D:\t\ ist hier nur standardpfad, den am besten anpassen).

Code:
execute ibeblock
as
begin
    for
    select trim(rdb$relations.rdb$relation_name)
    from rdb$relations
    where rdb$relations.rdb$relation_name not containing '$'
    into :tn
    do
    begin
      script='execute ibeblock
              as
              begin
                select * from '||:tn||' order by id as dataset MyDataset;
                ibec_ds_Export(MyDataset,__etCSV,''D:\t\'||:tn||'.csv'',''QuoteChar'');
                close dataset MyDataset;
              end';
      ibec_ExecSQLScript(ibec_GetDefaultConnection, script,'',nil);
    end
end
liesse sich mit ibescript.exe auch per Kommandozeile machen

Wichtig: Blobs lässt der weg, die machen im csv aber auch keinen sinn

bernau 24. Jul 2013 16:31

AW: Firebird-DB -> Tabellen nach CSV exportieren
 
Zitat:

Zitat von Hansa (Beitrag 1222530)
Zitat:

Zitat von bernau (Beitrag 1222492)
ich dachte es gibt schon etwas fertiges.

Was ist schon fertig ? :lol:

Ja, ja. Aber wozu sind wir Programmierer. Machen wir es halt eben selber. So viel Arbeit ist es wirklich nicht.

Perlsau 25. Jul 2013 01:36

AW: Firebird-DB -> Tabellen nach CSV exportieren
 
Zitat:

Zitat von Hansa (Beitrag 1222530)
Zitat:

Zitat von bernau (Beitrag 1222492)
ich dachte es gibt schon etwas fertiges.

Was ist schon fertig ? :lol: Prinzipiell brauchst Du doch nur über die einzelnen Tabellen zu wandern. Das geht so : Dataset anlegen und auf die Systemtabelle der Table-Names zugreifen. Also z.B.:
Müsste doch eigentlich so gehen. :gruebel:

Geht noch einfacher: Meiner Erfahrung nach verfügen alle DB-Connect-Komponenten über die Methode GetTableNames, die gewöhnlich eine Stringliste als Parameter erwarten und ein Boolean, der angibt, ob auch Systemtabellen übergeben werden sollen. Das ist dann mit einer Zeile Code erledigt:
Delphi-Quellcode:
IbConMain.GetTableNames(ListBox1.Items,False,False); // für IbDac von DevArt
FIBCon.GetTableNames(ListBox1.Items,False); // für FibPlus von Devrace
DatMod.ZeosCon.GetTableNames('',ListBox1.Items); // für Zeos
// usw.

Hansa 25. Jul 2013 01:44

AW: Firebird-DB -> Tabellen nach CSV exportieren
 
das CONTAINING $ muss noch erwähnt werden. Da muss man aufpasen. Würde mal sagen, dass wäre wichtig, damit die Systemtabellen ausgeblendet werden. 8-)

Perlsau 25. Jul 2013 01:47

AW: Firebird-DB -> Tabellen nach CSV exportieren
 
Zitat:

Zitat von Hansa (Beitrag 1222579)
das CONTAINING $ muss noch erwähnt werden. Da muss man aufpasen. Würde mal sagen, dass wäre wichtig, damit die Systemtabellen ausgeblendet werden. 8-)

Du meinst vermutlich bei der Zeos-Komponente? Meistens wird ja ein Boolean verwendet, um die Systemtabellen auszublenden, bei Zeos wird ein String-Pattern verlangt à la LIKE, wie ich gerade anderswo gelesen hatte. Wie man bei Zeos die Systemtabellen ausblendet, ist mir derzeit nicht bekannt.

Hansa 25. Jul 2013 01:53

AW: Firebird-DB -> Tabellen nach CSV exportieren
 
Ne, Zeos ist irrelevant, das $ dreht sich um RDB$.

Perlsau 25. Jul 2013 01:58

AW: Firebird-DB -> Tabellen nach CSV exportieren
 
Zitat:

Zitat von Hansa (Beitrag 1222581)
Ne, Zeos ist irrelevant, das $ dreht sich um RDB$.

Das verstehe ich jetzt nicht: hattest du denn nicht auf mein Posting geantwortet? Und wieso soll Zeos irrelevant sein?
Und noch eine Frage: wieso sollte man mehrere Zeilen an Code verschwenden, wenn man dasselbe Ziel doch mit einer einzigen Zeile via GetTableNames erreichen kann?

Hansa 25. Jul 2013 03:15

AW: Firebird-DB -> Tabellen nach CSV exportieren
 
Mann, Perlsau. 8-) Wenn Du Lust hast, dann benutze eben Zeos. Viel Vergnügen. Ich empfehle das allerdings nicht. Gettablenames heisst bei mir GetTableRelationNames (FIBPlus). Tja, was ist da besser ?

Perlsau 25. Jul 2013 03:29

AW: Firebird-DB -> Tabellen nach CSV exportieren
 
Zitat:

Zitat von Hansa (Beitrag 1222583)
Mann, Perlsau. 8-) Wenn Du Lust hast, dann benutze eben Zeos. Viel Vergnügen. Ich empfehle das allerdings nicht.

Was regst du dich so auf? Man darf doch schließlich noch fragen, wenn man etwas nicht versteht, oder? Übrigens setze ich Zeos ebenfalls nicht ein, sondern bin von FibPlus nach IbDac umgestiegen. Nicht unerwähnt bleiben soll jedoch, daß Zeos durchaus brauchbar und somit relevant ist für Hobbyprogrammierer, die nicht ständig Kohle übrig haben für Third Party Components ... so übel ist Zeos wirklich nicht, daß man es läppisch als "irrelevant" abtun sollte.

Zitat:

Zitat von Hansa (Beitrag 1222583)
Gettablenames heisst bei mir GetTableRelationNames (FIBPlus). Tja, was ist da besser ?

Das ist hier doch kein Wettbewerb!!! Und natürlich gibt es bei FibPlus auch GetTableNames mit den von mir bereits angeführten Parametern. Hatte es sogar extra kurz vor dem Posten getestet. Also erzähl mir doch nicht, es gäbe bei FibPlus keine Methode GetTableNames ...

Meine eigentliche Frage lautete jedoch: Wieso sollte es besser sein, diese Tabellen-Liste durch Auslesen der Firebird-Systemtabellen mit mehreren Zeilen Code zu erhalten, wenn man es auch mit einer Zeile erreichen kann, indem man GetTableNames verwendet? Du fühlst dich doch nicht etwa angepißt, weil mein Vorschlag mit GetTableNames eleganter und kürzer ist als deiner mit dem Auslesen der Systemtabellen? Vielleicht hattest du das ja gar nicht gekannt, bevor ich's dir erzählt habe, und hast deshalb die Idee mit dem Auslesen der Systemtabellen gebracht? Wäre doch keine Schande nicht :stupid:

IBExpert 25. Jul 2013 08:14

AW: Firebird-DB -> Tabellen nach CSV exportieren
 
Zitat:

Zitat von Hansa (Beitrag 1222581)
Ne, Zeos ist irrelevant, das $ dreht sich um RDB$.

ja, denn da das Script in IBExpert ausführbar ist und IBExpert nichts mit Zeos zu tun hat, hat das $ nichts mit Zeos zu tun. Was ich noch vergessen hab, ist auch die Views auszublenden, sofern vorhanden, daher müsste noch RDB$RELATIONS.RDB$RELATION_TYPE=0 ergänzt werden, da Views auch in der RDB$RELATIONS Tabelle zu finden sind


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:14 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