Announcement

Collapse
No announcement yet.

Paradox-Tabelle nach Interbase konvertieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Paradox-Tabelle nach Interbase konvertieren

    hallo,

    ich möchte eine ältere Paradox-Anwendung auf Interbase umstellen. die PDox5-Tabellen sollen hierfür 1:1 auf Interbase umgesetzt werden. mit der Datenbankoberfläche scheint es nicht zu funktionieren (Tools/Tabellenoperationen/Hinzufügen) - der liegt es daran, dass in einigen der PDox-Tabellen autoinc-Felder verwendet wurden (+-Felder)? Was muss ich bei Memo- und formatierten Memo(RTF)-Feldern beachten?

    hartmut.

  • #2
    Hallo,

    die technische Umsetzung des Datenimports ist nur das kleinste Problem. Generell kann man sagen, das sich beim Konvertieren der Datenstruktur einer datensatzorientierten ISAM-Datenbank wie Paradox in eine mengenorientierte SQL-Datenbank wie InterBase spürbare Veränderungen ergeben werden. Falls die Enterprise-Version von Delphi zur Verfügung steht, würde ich zuerst das Tool <b>Data Pump</b> einsetzen. Dieses Tool baut für die meisten Paradox-Besonderheiten InterBase-Gegenstücke wie zum Beispiel <b>Trigger</b> oder <b>CHECK</b>-Constraints ein, so dass auch in Paradox definierte Eingabeprüfungen etc. wirksam werden. Trotzdem würde ich dieses Rohgerüst niemals so verwenden, sondern Änderungen/Erweiterungen von Hand unterbringen.

    Für AutoInc-Felder von Paradox muss man beim InterBase auf einen <b>GENERATOR</b> zugreifen.
    <pre>
    CREATE GENERATOR Gen_ProNr;
    SET GENERATOR Gen_ProNr TO 1000;
    </pre>
    Der Generator-Wert wird dann in einem Trigger zugewiesen:
    <pre>
    CREATE TRIGGER Set_ProNr FOR ProMain BEFORE INSERT AS
    BEGIN
    IF (NEW.ProNr IS NULL) THEN NEW.ProNr = GEN_ID(Gen_ProNr,1);
    END
    </pre>
    Oder man setzt gleich eine <b>Stored Procedure</b> ein, um den neuen Datensatz anzulegen - in diesem Fall kann der neue Generatorwert direkt eingesetzt werden:
    <pre>
    CREATE PROCEDURE PROCINSERTKUNDE (
    KDNVORNAME VARCHAR(15),
    KDNNAME VARCHAR(20),
    KDNSTR VARCHAR(25),
    KDNHNR VARCHAR(5),
    ORT_ID INTEGER) AS
    BEGIN
    INSERT INTO kunden (KDNNR,KDNVORNAME,KDNNAME,ORT_ID,KDNSTR,KDNHNR)
    VALUES (GEN_ID(genkdnnr,1), :KDNVORNAME, :KDNNAME,
    :ORT_ID, :KDNSTR, :KDNHNR);
    END
    </pre>

    Bei den BLOb-Daten bietet der InterBase die optionale Unterschiedung zwischen binären Daten und Text-Daten an, so das ich jeweils einen eigenen DOMAIN-Datentyp dafür anlege:
    <pre>
    CREATE DOMAIN TTextBLOB AS BLOB SUB_TYPE 1;

    CREATE DOMAIN TBinBLOB AS BLOB SUB_TYPE 0;
    </pre>
    Ansonsten gibt es bei den BLObs keine Besonderheiten, sowohl TTable als auch TQuery können mit BLObs umgehen.

    P.S: Beispiele um weitere Hintergrundinfos sind in meinem Buch <b>Client/Server Datenbankentwicklung mit Delphi</b> zu finden

    Comment

    Working...
    X