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
jobo

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

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.874 Beiträge
 
Delphi 11 Alexandria
 
#2

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
 
#3

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.429 Beiträge
 
Delphi 12 Athens
 
#4

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
 
#5

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
695 Beiträge
 
FreePascal / Lazarus
 
#6

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
Firebird 5 Update und Know-how Workshop – 28.8.-29.08.2025 64546 Mörfelden - Walldorf
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

AW: IBExpert Tipp gesucht

  Alt 18. Jun 2011, 10:48
Zitat:
- Eine neue Spalte für die technische ID in der Lieferantentabelle
- ist vorhanden und jeder Lieferant hat seine neue ID via Generator
Zitat:
- identische Spalte in alle Kindtabellen einfügen (ohne Sequence/ohne Index)
- ist vorhanden
Zitat:
- Dann auf die Kindtabellen updates mit
set [neue FK Spalte]=[neuerPKWert aus Lieferantentabelle]
Where [Kindtablelle.alterStringKey=Lieferantentabelle.Alt erStringKey]
- so soll es sein... aber für jeden Datensatz einzeln
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: IBExpert Tipp gesucht

  Alt 18. Jun 2011, 10:50
Du kannst natürlich auch einen Subquery verwenden, welcher den entsprechenden Wert ermittelt
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:16 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