AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

IBExpert Tipp gesucht

Ein Thema von haentschman · begonnen am 18. Jun 2011 · letzter Beitrag vom 18. Jun 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.298 Beiträge
 
Delphi 12 Athens
 
#1

IBExpert Tipp gesucht

  Alt 18. Jun 2011, 07:37
Guten Morgen...

Ich arbeite gerade an der Datenübernahme aus Paradox Tabellen in die neue FB Datenbank. Durch die "Erneuerung" sind auch die Strukturen ein wenig unterschiedlich.

Beispiel:
FB Tabelle, Feld ID_Lieferant(Integer aus Lieferantentabelle), der Datensatz in der Paradoxtabelle enthällt den Lieferanten als String.

In die FB Tabelle hab ich schon ein "OLD_LIEFERANT" hinzugefügt um bei der Übernahme die Zuordnungen nicht zu verlieren. Dieses Feld soll dann entfernt werden wenn die Zuordnungen zur Lieferantentabelle gesetzt sind.

Zur Frage:
Ich müßte jetzt jeden Datensatz durchlaufen (Schleife) und anhand des "OLD_LIEFERANT" die ID setzen. Läßt sich das im IBExpert realisieren oder muß ich ein Tool basteln ?

Danke für Info´s

Nachtrag: an eine SP die die ID einträgt hab ich schon gedacht. 2 Dinge halten mich noch davon ab. Ich kann die Reihenfolge der Tabellenübernahme im IBDataPump nicht beeinflussen. (Lieferantentabelle vor den anderen z.B.) Ich wollte die FB DB nicht zu sehr verändern (mußte schon diverse Trigger wegen NULL Werten im Source setzen)

Geändert von haentschman (18. Jun 2011 um 07:49 Uhr)
  Mit Zitat antworten Zitat
jobo

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

AW: IBExpert Tipp gesucht

  Alt 18. Jun 2011, 08:22
Ich kenne IBExpert nicht, aber egal mit welchem Werkzeug würde ich alle Daten, so wie sie sind (notfalls ohne Constraints/ Indizierung) 1:1 ins neue System schieben. (Ich weiß auch nicht, wie gut FB zwischen 2 DB übertragen kann) Wahlweise in die gleiche DB oder eine 2. gleichen Typs. Notfalls in ein Zwischenformat, das freundlicher zu meinem Lieblings-ETL Tool ist.
Im Zielsystem selbst hast Du jedenfalls dann die bekannten, gewohnten Möglichkeiten und stolperst über nichts.
Beim Beladen selbst würde ich nur auf Zeichencodierung achten.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.298 Beiträge
 
Delphi 12 Athens
 
#3

AW: IBExpert Tipp gesucht

  Alt 18. Jun 2011, 08:34
Danke für deinen Tipp...

es ist noch viel schlimmer als angenommen. Die ID des Processes, welche mir der Generator produziert, stimmt nicht mit der übernommenen "Nummer" welche als String vorliegt überein. Ich muß die Quelldatensätze nach einem Teilstring der "Nummer" sortieren.

Beispiel: OLD_PROCESS_NUMBER = 'BV-2009-5600' der übernommene Datensatz muß dann genau die ID 5600 erhalten weil die Positionen des Vorganges diese ID beinhalten. (ausnahmsweise ein Integer) Zusätzlich muß ich dann noch auf ID "Lücken" testen...usw.

Da mir die Sortierungen in IBPump diese Möglichkeit nicht bietet, komme ich um ein Tool nicht herum... denke ich.

PS: 1:1 Übernahme ist nicht möglich.

Geändert von haentschman (18. Jun 2011 um 08:38 Uhr)
  Mit Zitat antworten Zitat
jobo

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

AW: IBExpert Tipp gesucht

  Alt 18. Jun 2011, 08:39
Ich weiß nicht, ob Du mich richtig verstanden hast.
Ich meinte im wesentlichen, die Paradoxdaten wie sie sind, auf ein brauchbares System zu schieben und dort dann umzubauen.
Wenn Constraints und Indizes aus/weg sind, sollte es mit dem reinen "Upload" doch kein Problem geben.
Gruß, Jo
  Mit Zitat antworten Zitat
jobo

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

AW: IBExpert Tipp gesucht

  Alt 18. Jun 2011, 08:49
Zu dem "Vorgängerproblem"
Unter Oracle gibt es dazu Funktionen, Stichwort ist "Analytic Functions" für Firebird.
Ohne solche Spezialfunktionen kann man das in einer SP durchloopen und verarbeiten.

P.S.: Also "Analytic" oder "Window" Functions scheints in keiner Form zu geben, handgesrickte Lösungen habe ich auf die Schnelle auch nicht entdeckt.
Scheint alles für Version 3 vorgesehen.
Gruß, Jo

Geändert von jobo (18. Jun 2011 um 09:01 Uhr) Grund: Nachtrag
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: IBExpert Tipp gesucht

  Alt 18. Jun 2011, 08:58
Ich würde zudem auf einen künstlichen Schlüssel setzen und nicht das "Datenfeld" Lieferantennummer wählen
Markus Kinzler
  Mit Zitat antworten Zitat
jobo

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

AW: IBExpert Tipp gesucht

  Alt 18. Jun 2011, 09:03
Da muss ich Markus Recht geben, eine technische ID ist angesagt.
Aber wenn ich das richtig verstanden habe, werden die alten Paradoxdaten nicht komplett neu eingerichtet, sondern in ein bestehendes(?), jüngeres System übertragen? Also hat er evtl. keine Wahl.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.298 Beiträge
 
Delphi 12 Athens
 
#8

AW: IBExpert Tipp gesucht

  Alt 18. Jun 2011, 09:20
Zitat:
Ich meinte im wesentlichen, die Paradoxdaten wie sie sind, auf ein brauchbares System zu schieben und dort dann umzubauen.
...soweit bin ich ja schon. Es geht ja quasi um das Umbauen.
Konkretes Beispiel wie oben ... wie mache ich aus einem Lieferanten (String) die ID aus der Lieferantentabelle.
Quelltabelle: Lieferant (String)
Zieltabelle: Lieferant (ID) aus Tabelle Lieferant, OLD_LIEFERANT (String)
um die Zuordnung mit zu übernehmen.

Ich habe keine Lust die 9000 Datensätze händisch zuzuordnen. Da jeder DS durchlaufen werden muß zielte die Ausgangsfrage auf Möglichkeiten von IBExpert hinaus.

PS: ich habe ein Zeitfenster von ca. 10 Stunden für die Übernahme und Anpassung da jeden Tag neue Daten ins alte System kommen. Ist die Übernahme erfolgreich wird sofort auf dem neuen weitergearbeitet.

Geändert von haentschman (18. Jun 2011 um 09:30 Uhr)
  Mit Zitat antworten Zitat
jobo

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

AW: IBExpert Tipp gesucht

  Alt 18. Jun 2011, 09:34
- Eine neue Spalte für die technische ID in der Lieferantentabelle
- die mit einer Sequence/Generator füllen (die auch später weiterverwendet wird/werden kann)
- identische Spalte in alle Kindtabellen einfügen (ohne Sequence/ohne Index)
- Dann auf die Kindtabellen updates mit
set [neue FK Spalte]=[neuerPKWert aus Lieferantentabelle]
Where [Kindtablelle.alterStringKey=Lieferantentabelle.Alt erStringKey]

- dann Index und FK Constraints anlegen/aktivieren.

Falls das DM komplex ist, eine SP verwenden, in einem Cursor alle Werte aufbauen und in der Schleife gezielt updaten (vlt löst man hier direkt das Vorgängerproblem)
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
646 Beiträge
 
FreePascal / Lazarus
 
#10

AW: IBExpert Tipp gesucht

  Alt 18. Jun 2011, 10:39
Moin,

mit unserer ibeblock Script Sprache (nur verfügbar in der Vollversion bzw Trial) geht der Import recht hurtig, hier ein Beispielscript:

Code:
EXECUTE ibeblock
AS
BEGIN
   cbb = 'execute ibeblock (RecNo integer)
          as
          begin
            if (ibec_mod(RecNo, 100) = 0) then
              ibec_Progress(RecNo || '' records copied into'||:tabname||'...'');
          end';
 
   OdbcCon = ibec_CreateConnection(__ctODBC, 'Driver={Microsoft Paradox Driver (*.db )};DriverID=538;Fil=Paradox 5.X;DefaultDir=C:\paradox\DATEN\;Dbq=C:\paradox\DATEN\;CollatingSequence=ASCII;');

   DB = ibec_CreateConnection(__ctFirebird,
                              'DBName="localhost:C:\firebird\daten.fdb";
                               ClientLib=fbclient.dll;
                               user=SYSDBA; password=masterke; names=ISO8859_1; sqldialect=3');
   try
     use DB;

     for
       select tabname from imp_tab into :tabname
       do
       begin
         RecCount = ibec_CopyData(OdbcCon, DB, 'IMP$'||:tabname,
                                  'SELECT * FROM '||:tabname,
                                  'CommitAfter=1000; EmptyTable; CreateTable; DontQuoteIdents',
                                  cbb);
     
       end
   finally
     ibec_CloseConnection(DB);
     ibec_CloseConnection(OdbcCon);
   END;
 END
Damit hast du die Datentabelle 1 zu 1 in der Firebird DB, danach würde ich dann eine Prozedur
schreiben, mit der die Daten dann von den Paradox Tabellen auf Basis neuer IDs, die man ja schon in den
Firebird Tabellen speichern kann, verteilt werden.

Wenn das einmal fertig ist kannst du den Import jederzeit wieder anschmeissen und das dauert bei 9000
records sicherlich weit weniger als dein Zeitfenster erlaubt.

Das Script stammt aus einem Kundenprojekt, bei dem wir ca. tausende Paradox Tabellen importieren mussten,
und zwar in hunderten Kundeninstallationen unbeaufsichtigt.

Wichtig ist das der Paradox ODBC Treiber installiert sein muss, der ist beim MS Office Paket aber mit
dabei. Wenn das schon mal lief, dann beim 2. Durchlauf das CreateTable Flag rausnehmen, weil
sonst die Tabellen erneut angelegt werden udn Fehler kommen.
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:07 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