Announcement

Collapse
No announcement yet.

TDBNavigator und Fat-Server-Prinzip

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

  • TDBNavigator und Fat-Server-Prinzip

    Hallo.

    Ich bin absoluter Neuling sowohl in Delphi als auch in Interbase, habe aber angefangen eine IB-Datenbank zur späteren C/S-Anwendung im Fat-Server-Prinzip anzulegen.
    Nun sollen einige NOT-NULL-Felder vorerst direkt über einen Trigger BEFORE INSERT mit Daten gefüllt werden. In Delphi habe ich zur Bearbeitung einfach einen DB-Navigator angegeben. Will ich jedoch damit einen neuen Datensatz abspeichern, erhalte ich die Fehlermeldung, daß das Feld xy gefüllt sein muß. Der SQL-Monitor zeigt mir an, daß noch gar kein Zugriff auf die Datenbank erfolgt ist.

    Wie erreiche ich also das Ausführen der Trigger und damit das Vermeiden dieses Fehlers?
    Kann mir jemand kurz und knapp den Hintergrund von DBNavigator erklären?

    Danke,
    Heike

  • #2
    Hallo,

    die TDBNavigator-Komponente hat mit dem Problem nichts zu tun. Ich gehe einmal davon aus, das eine TTable-Instanz als Datenmenge verwendet wird. Die InterBase-Tabelle könnte dabei folgendermassen aussehen:

    <pre>
    CREATE TABLE KUNDEN (
    KDNNR INTEGER NOT NULL,
    KDNVORNAME VORNAME NOT NULL,
    KDNNAME NACHNAME NOT NULL,
    ORT_ID REF_ID NOT NULL,
    KDNSTR VARCHAR(25),
    KDNHNR VARCHAR(5),
    SDXVORNAME CHAR(5) NOT NULL,
    SDXNAME CHAR(5) NOT NULL
    )
    </pre>
    Wenn man nun für die TTable-Instanz über den Feld-Editor <b>persistente TFields</b> anlegt, sieht man, das Delphi hinter den Kulissen für jede NOT NULL-Tabellenspalte die Eigenschaft <b>Required = True</b> zugewiesen hat. Und daher kann Delphi bereits sein Veto einlegen, bevor der Zugriff auf die Datenbank erfolgt.
    <pre>
    object Table1: TTable
    Active = True
    DatabaseName = '_IB'
    TableName = 'KUNDEN'
    Left = 56
    Top = 16
    object Table1KDNNR: TIntegerField
    FieldName = 'KDNNR'
    Required = True
    end
    object Table1KDNVORNAME: TStringField
    FieldName = 'KDNVORNAME'
    Required = True
    Size = 15
    end
    object Table1KDNNAME: TStringField
    FieldName = 'KDNNAME'
    Required = True
    end
    object Table1ORT_ID: TIntegerField
    FieldName = 'ORT_ID'
    Required = True
    end
    object Table1KDNSTR: TStringField
    FieldName = 'KDNSTR'
    Size = 25
    end
    object Table1KDNHNR: TStringField
    FieldName = 'KDNHNR'
    Size = 5
    end
    object Table1SDXVORNAME: TStringField
    FieldName = 'SDXVORNAME'
    FixedChar = True
    Size = 5
    end
    object Table1SDXNAME: TStringField
    FieldName = 'SDXNAME'
    FixedChar = True
    Size = 5
    end
    end
    </pre>
    Um das Problem zu lösen, reicht es aus, im Objektinspektor die Eigenschaft <b>Required</b> für die betroffenen Tabellenspalten auf FALSE zu setzen. Der Datensatz kann dann erfolgreich gepostet werden, da der fehlende Wert durch den InterBase-Trigger ergänzt wird

    Comment

    Working...
    X