![]() |
IBExpert Tipp gesucht
Guten Morgen... :hi:
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) |
AW: IBExpert Tipp gesucht
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. |
AW: IBExpert Tipp gesucht
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. |
AW: IBExpert Tipp gesucht
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. |
AW: IBExpert Tipp gesucht
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. |
AW: IBExpert Tipp gesucht
Ich würde zudem auf einen künstlichen Schlüssel setzen und nicht das "Datenfeld" Lieferantennummer wählen
|
AW: IBExpert Tipp gesucht
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. |
AW: IBExpert Tipp gesucht
Zitat:
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. |
AW: IBExpert Tipp gesucht
- 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) |
AW: IBExpert Tipp gesucht
Moin,
mit unserer ibeblock Script Sprache (nur verfügbar in der Vollversion bzw Trial) geht der Import recht hurtig, hier ein Beispielscript:
Code:
Damit hast du die Datentabelle 1 zu 1 in der Firebird DB, danach würde ich dann eine Prozedur
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 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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 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-2025 by Thomas Breitkreuz