Announcement

Collapse
No announcement yet.

Sekundärindizes bei Paradox

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

  • Sekundärindizes bei Paradox

    Hallo,

    Umg.: Delphi 6 Ent. UP2, BDE 5.2, Paradox

    Eine Tabelle hat folgende Struktur:<br>
    -ID INTEGER<br>
    -Beschreibung VARCHAR(80)

    Auf dem Feld Beschreibung liegt ein eindeutiger Sekundärindex.

    Versucht nun der Benutzer einen neuen Datensatz mit einer bereits vorhandenen Beschreibung zu posten, dann fange ich diesen Fehler wie folgt ab:<pre><code>
    procedure TMyDataModule.MyTablePostError(
    DataSet: TDataSet;
    E: EDatabaseError; var Action: TDataAction);
    var
    iDBIError: Integer;
    begin
    if (E is EDBEngineError) then begin
    iDBIError := (E as EDBEngineError).Errors[0].ErrorCode;
    case iDBIError of
    9729: // Key Violation
    begin
    MessageDlg(...);
    DataSet.Cancel;
    SysUtils.Abort;
    end;
    end;
    end;
    end;
    </pre></code>

    Funktioniert beim ersten Mal sehr gut. Der MessageDlg erscheint, man klickt auf Ok und versucht es sofort erneut. Verheerende Wirkung: Man kann Datensätze mit Beschreibungen anlegen, die bereits existieren. Es erscheint kein MessageDlg mehr.
    Wo liegt das Problem? Oder sollte ich diese Art Fehler anders abfangen?

  • #2
    Wenn der Sekundärindex wirklich auf eindeutig gestellt ist, müsste sich die Tabelle eigentlich von selbst gegen solche Eintragungen wehren können, ansonsten ist der Index ja defekt?! Wann kommt denn Deine Routine zum Tragen?<p>
    <pre>Table1.Append;
    try
    ...
    Table1.Post;
    except
    on e: Exception do begin
    Table1.Cancel;
    ShowMessage('Fehler: ' + e.Message);
    end; // on
    end;<pre><p>
    Schöne Grüße, Mario Noac
    Schöne Grüße, Mario

    Comment


    • #3
      Für die Bearbeitung der Tabelle habe ich eine eigene Form und beim FormCloseQuery-Event prüfe ich auf Änderungen und dann erfolgt der Post(). Der Aufruf Post() erfolgt nicht innerhalb eines try-except-Bloaks.

      Das Abfangen des Fehlers steht im Datenmodul beim OnPostError-Event. Ich glaube, dass Borland innerhalb seiner Demos eine ähnliche Umsetzung aufzeigt.

      Seltsam ist nur, dass es beim ersten Mal funktioniert, d.h. mein MessageDlg wird angezeigt. Aber ab dann...

      Danke<br>
      Stepha

      Comment

      Working...
      X