Announcement

Collapse
No announcement yet.

Insert dauert sehr lange

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

  • Insert dauert sehr lange

    Hallo!<p>Ich setze Delphi 5 SP1, IBX 4.52 und Interbase 6.01 (läuft auf einem anderen Rechner (Win98)) ein. Wenn ich einen Datensätz in meine Tabelle (enthölt 6880 Datensätze) dann dauert das nach einem Post ca. 5-7 Sekunden. Speichern von Änderungen, sind dann sehr schnell. Noch ein paar Dinge die ich habe: TIBDataset mit Generatorfield bei neuem Datensatz auf ID, TIBTransaction = Schnappschuß, Im OnAfterPost-Ereignis führe ich einen CommitRetaining durch.<p>Metadaten der Tabelle:<p>/* Domain definitions */
    CREATE DOMAIN "TBOOLEAN" AS CHAR(1) CHARACTER SET ISO8859_1
    CHECK (VALUE IN ('J','N')) NOT NULL;
    CREATE DOMAIN "TEMAIL" AS VARCHAR(40) CHARACTER SET ISO8859_1;
    CREATE DOMAIN "TFLOAT" AS NUMERIC(15, 2);
    CREATE DOMAIN "THOMEPAGE" AS VARCHAR(128) CHARACTER SET ISO8859_1;
    CREATE DOMAIN "TID" AS INTEGER
    DEFAULT 0 NOT NULL;
    CREATE DOMAIN "TKLEINERSTR" AS VARCHAR(20) CHARACTER SET ISO8859_1;
    CREATE DOMAIN "TKUNDENNAME" AS VARCHAR(128) CHARACTER SET ISO8859_1;
    CREATE DOMAIN "TLFDNUMMER" AS VARCHAR(15) CHARACTER SET ISO8859_1;
    CREATE DOMAIN "TMEMOBLOB" AS BLOB SUB_TYPE TEXT SEGMENT SIZE 80 CHARACTER SET ISO8859_1;
    CREATE DOMAIN "TNORMSTRING" AS VARCHAR(80) CHARACTER SET ISO8859_1;
    CREATE DOMAIN "TPLZ" AS CHAR(5) CHARACTER SET ISO8859_1;
    CREATE DOMAIN "TVERKNUEPFUNG" AS INTEGER
    DEFAULT 0;

    /* Table: ADRESSE, Owner: SYSDBA */

    CREATE TABLE "ADRESSE"
    (
    "ID" "TID",
    "LFDNUMMER" "TLFDNUMMER",
    "KUNDENNAME" "TKUNDENNAME",
    "ANREDE" "TKLEINERSTR",
    "TITEL" "TKLEINERSTR",
    "FIRMENNAME" "TNORMSTRING",
    "SDXFIRMENNAME" "TKLEINERSTR",
    "NACHNAME" "TNORMSTRING",
    "SDXNACHNAME" "TKLEINERSTR",
    "VORNAME" "TNORMSTRING",
    "SDXVORNAME" "TKLEINERSTR",
    "STRASSE" "TNORMSTRING",
    "PLZ" "TPLZ",
    "ORT" "TNORMSTRING",
    "LAND" "TNORMSTRING",
    "TELEFON" "TNORMSTRING",
    "TELEFAX" "TNORMSTRING",
    "MOBIL" "TNORMSTRING",
    "EMAIL" "TEMAIL",
    "HOMEPAGE" "THOMEPAGE",
    "RABATT" "TFLOAT",
    "ZAHLUNGSZIEL" "TID",
    "ANFAHRTSZONE" VARCHAR(5) CHARACTER SET ISO8859_1,
    "ISTKUNDE" "TBOOLEAN",
    "ISTLIEFERANT" "TBOOLEAN",
    "BEMERKUNGEN" "TMEMOBLOB",
    "LETZTEAENDERUNG" TIMESTAMP,
    "AENDERUNGBENUTZER" "TID",
    "MANDANT" "TVERKNUEPFUNG",
    PRIMARY KEY ("ID")
    );
    SET TERM ^ ;

    /* Triggers only will work for SQL triggers */

    CREATE TRIGGER "ADRESSE_AFTERUPDATE" FOR "ADRESSE"
    ACTIVE AFTER UPDATE POSITION 0
    AS
    BEGIN
    UPDATE Kassenbuch SET Adresse = NEW.ID WHERE Adresse = OLD.ID;
    END
    ^

    CREATE TRIGGER "ADRESSE_BEFOREDELETE" FOR "ADRESSE"
    ACTIVE BEFORE DELETE POSITION 0
    AS
    BEGIN
    UPDATE Kassenbuch SET Adresse = 0 WHERE Adresse = OLD.ID;
    END
    ^

    COMMIT WORK ^
    SET TERM ;^ <br><br><p>Kann mir jemand weiterhelfen?<p>Gruss Andreas

  • #2
    Hi <br>
    also ich benutze immer TIBUpdateSQL und setze über eine SP im NewRecord Ereignis den Primary Key des neuen Datensatzes.
    Dann CommitRetaining klappt ohne verzögerung auch bei 50.000 D

    Comment


    • #3
      Hallo,

      was protokolliert TIBSQLMonitor mit, macht sich hier ein auffälliges Verhalten bemerkbar (wie zum Beispiel erneutes Abfordern <b>aller</b> Datensätze der Tabelle nach jedem Post)?

      Zu den <i>Entwickler Tagen 2001</i> habe ich ein IBX-Beispielprojekt vorgestellt, das den Zeitbedarf beim Einfügen von 1000 Datensätzen über die verschiedenen Wege vergleicht:
      <pre>
      Zugriffsweg Zeitbedarf in Ticks (Millisekunden)
      BDE SQL Links (TTable) 892
      BDE SQL Links (TQuery) 240
      IBX (TIBTable) 2404
      IBX (TIBQuery) 851
      IBX (TIBDataSet) 1372
      IBX (TIBSQL) 120
      </pre>
      Es stellt sich nun die Frage, wie die konkrete Implementierung in Ihrem Fall aussieht?

      Comment


      • #4
        Hallo!<p>Er hat immer alle Datensätze (6880) Stück nach dem Post oder Cancel gefetcht. Ich habe das Problem gelöst, indem ich vor dem Insert (und Öffnen der Tabelle) die SQL-Anweisung SELECT * FROM ADRESSEN WHERE ID = 0 setze. Danach habe ich keine Geschwindigkeitsprobleme mehr. Danke für die schnelle Hilfe.<p>Was mich jetzt noch interessiert ist, warum die BDE beim Speichern der Datensätze schnelle ist als TIBDataset?<p>Andreas Brüc

        Comment


        • #5
          Hallo,

          weil die "alten" VCL-Klassen sowie die BDE die gröbsten "Fehler" des Entwicklers still und heimlich hinter den Kulissen korrigiert haben. IBX ist nicht so fürsorglich :-

          Comment

          Working...
          X