Announcement

Collapse
No announcement yet.

Interbase und BDE --- Fehler???

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

  • Interbase und BDE --- Fehler???

    Hallo,

    ich steige momentan von Paradox auf interbase um und bin jetzt auf folgendes Problem gestoßen: <br>
    Die BDE schafft es nicht (mein datapump arbeitet mit BDE... bei D5 Pro ist ja das Borland Datapump nicht dabei :-( ) Datensätze in meine Tabellen einzufügen....

    Es bringt mir immer die Fehlermeldung "Error: A Non-Blob-Field required for this Operation"

    Dies Passiert aber auch bei tabellen, die keine Blob-Felder enthalten...????

    Ich arbeite mit D5 Pro und BDE 5.10.....

    Mit Marathon oder den IBX-Komponenten klappt hingegen alles wunderbar....

    Der Datenbank-Explorer von Borland schafft es auch nicht einen Datensatz einzufügen...was ich ehrlich gesagt traurig finde.....

    Meine Tabellen haben einen before-insert trigger, der dem Primärschlüssel-feld einen generator-wert übergibt und außerdem in ein feld den aktuellen zeitstempel. außerdem habe ich einige not-null-constraints und mehrere default werte für felder....liegt es daran???

    Bin für jede hilfe denkbar...

    Kaputnik

  • #2
    Hallo,

    falls der Datapump nicht zur Verfügung steht, gibt es mindestens zwei Alternativen: <br>
    1. Die <b>Datenbankoberfläche</b> kann eine Paradox-Tabelle in eine InterBase-Datenbank kopieren (wobei die Tabelle neu angelegt wird). <br>
    2. LOCAL SQL kann den Inhalt der Paradox-Tabelle in eine bereits vorhandene InterBase-Tabelle kopieren.

    Im folgenden Beispiel wird die InterBase-Tabelle "KUNDEN" aus dem <b>Datenbank-Explorer</b> heraus mit den Datensätzen aus der Paradox-Tabelle "Adressen" gefüllt (die InterBase-Tabelle wird über ihren BDE-Aliasnamen qualifiziert):
    <pre>
    INSERT INTO ":KonferenzWS_IB:KUNDENIMP" (KUNDENID, VORNAME, NACHNAME)
    SELECT p.KDNNR, p.N1, p.N2 FROM Adressen p
    </pre>
    Diese Anweisung wird nur dann fehlerfrei ausgeführt, wenn im Datenbank-Explorer der BDE-Alias der Pardox-Tabelle Adressen geöffnet und aktiv ist. Nur dann "kennt" die BDE die Syntax von Local SQL. Startet man hingegen die Anweisung aus der geöffneten InterBase-Datenbank heraus, so beschwert sich die BDE beim ersten Doppelpunkt über einen Syntaxfehler.

    Können die Daten in eine CSV-Datei (ASCII-Datei) exportiert werden, so stehen die <b>External Files</b> vom InterBase zur Verfügung:
    <pre>
    SET NAMES ISO8859_1;

    CONNECT "C:\Artikel\BorCon98\InterBase\Database\Workshop.g db"
    USER "SYSDBA" PASSWORD "masterkey";

    CREATE TABLE IMPORT_TMP
    EXTERNAL FILE "C:\Artikel\BorCon98\InterBase\Database\DATA3. TXT" (
    ID CHAR(10),
    KUNDE CHAR(30),
    BESTELLDATUM CHAR(15),
    BESTELLPREIS CHAR(15),
    VERSANDDATUM CHAR(15),
    BEMERKUNG CHAR(50));

    INSERT INTO IMPORT_TMP
    SELECT * FROM IMPORTTBL;

    COMMIT;

    DROP TABLE IMPORT_TMP;

    COMMIT;
    </pre>
    &#10

    Comment


    • #3
      Hallo, Andreas,

      Danke erstmals für die sehr prompte antwort......

      das mit der datenbankoberfläche und dem kopieren der Datenbank gehtleider nicht, da ich, wie oben beschrieben einen haufen regeln, default-werte und check-constraints.. benutze...was die datenbankoberfläche beim kopieren natürlich nicht berücksichtigt....

      und nachdem ich die datenbank kopiert habe, kann ich die gesamten regeln nicht nachträglich einfügen, ohne den inhalt wieder zu löschen.... außerdem benutze ich ausschließlich selbstdefinierte domänen, was natürlich auch nicht nachträglich zu ändern ist....

      d.h. es bleibt mir nichst anderes übrig, als zuerst die tabelle zu erstellen und dann über batchmove und mappings die daten zu kopieren....

      was mich hauptsächlich interressiert
      ist, warum die BDE meine Interbase-datenbank nicht mag??? die Fehlermeldung ist schon sehr verwirrend, und so besonders exotische Tabellen hab ich nun auch nicht angelegt...

      Comment


      • #4
        Hallo,

        man muss im ersten Schritt die Daten nicht in die originalen InterBase-Tabellen ablegen, sondern kann die Daten zuerst in temporär genutzten Hilfstabellen ablegen. Dann sind diese Daten schon in der InterBase-Datenbank, so das ein Einfügen in die "echten" Tabellen einfacher geht (Stored Procedure kann Anpassungen vornehmen etc.).

        Alle Default, Trigger und CHECK-Prüfungen sind auch dann wirksam, wenn die Daten über die Datenbankoberfläche oder den Datenbank-Explorer eingefügt werden.

        Die Fehlermeldung <i>"Error: A Non-Blob-Field required for this Operation" </i> deutet darauf hin, das BLOb-Daten übergeben werden sollen, aber die betreffende Tabellenspalte kein BLOb-Feld ist.

        Bis auf sehr wenige Ausnahmen kann die BDE uneingeschränkt auf eine InterBase-Datenbank zugreifen. Wie sieht die Struktur der Paradox-Tabelle aus, welche Feldtypen werden dort verwendet

        Comment


        • #5
          Hallo,
          dieser fehler tauch auch auf, wenn ich einfach nur über den datenbank-explorer einen Datensatz in die Tabelle einfügen will....obwohl gar kein Blob-feld in der Tabelle ist, also nicht nur beim kopieren.

          Die ursprungstabelle (paradox) enthält nur string und integer-felder--keine bools und keine blobs und zwei timestamp, in eineigen tabellen auch currency.... die zieltabelle ist leicht anders strukturiert (mehr felder), besteht aber im prinzip auch nur aus varchar und integer feldern und zwei timestamps und anstelle von currency numeric(9,4).

          Die Idee mit der zwischentabelle ist nicht schlecht....warum bin ich da selbst nicht drauf gekommen????

          Wie gesagt, die fehlermeldung irritiert mich sehr, da vor allem gar keine blobs beteiligt sind....liegt es vielleicht an den default-werten??

          Comment


          • #6
            Hallo,

            diese Fehlermeldung ist mir noch niemals untergekommen, also gehe ich davon aus, das es an der aktuellen Konfiguration vor Ort liegt. Kann die zusammen mit Delphi ausgelieferte Beispieldatenbank für den InterBase mit dem Datenbank-Explorer bearbeitet werden (zum Beispiel die Tabelle COUNTRY)

            Comment


            • #7
              Ganz Problemlos.....

              viele der Tabellen aus meinen Datenbanken können auch problemlos bearbeitet werden , aber bei einigen geht es nicht......

              Prinzipiell habe ich festgestellt, daß tabellen, die einen Blob subtype 1 (text) benutzen über die BDE bei mir meistens einen insert erlauben....

              Die anderen tabellen, die keinen insert erlauben, haben default-werte und check-constraints (z.B. domain boolean : smallint check (value in (0,1)) default 0

              ich vermute, daß die BDE mit solchen domänen-definitionen nicht klarkommt, und diese dann als blob interpretiert....ich werde wohl auch mal eine frage an die teamB jungs in den Inprise-foren schicken, die sind da ja näher dran als wir......

              Comment

              Working...
              X