<B>Trigger-Problem mit IB6 unter Win 2000 Prof ?!</B>
Ich hoffe das mir jemand (Herr Kosch?) weiterhelfen kann.<BR>
Ich versuche mit Delphi 6 EP eine Datenbankoberfläche "ähnlich" Access für Schulungszwecke zu entwerfen.<BR>
Das Anlegen der Database und der Tabellen funktioniert.<BR>
Ich möchte aber auch die Möglichkeit von AutoInc nutzen.<BR>
<BR>
<BR>
Und genau da liegt mein Problem.<BR>
<BR>
Ich habe bisher folgenden Quelltext benutzt, der soweit auch funktioniert.<BR>
<BR>
================================================== =====================<BR>
<B>procedure TDM_Form.NewDatabaseExecute(Sender: TObject);</B><BR>
<B>begin</B><BR>
IBTransaction.Active := False;<BR>
IBDatabase.Close;<BR>
<B>if</B> FileExists(Neu_Form.NewDBDialog.FileName) <B>then</B> DeleteFile(Neu_Form.NewDBDialog.FileName);<BR>
IBDatabase.DatabaseName := Neu_Form.NewDBDialog.FileName;<BR>
IBDatabase.Params.Add('User "SYSDBA"');<BR>
IBDatabase.Params.Add('Password "1"');<BR>
IBDatabase.CreateDatabase;<BR>
<BR>
IBSQL.Transaction.StartTransaction;<BR>
IBSQL.SQL.Clear;<BR>
<BR>
//Generator (Zähler) für Tab_User_Forms erzeugen<BR>
IBSQL.SQL.Text :='Create Generator Gen_FormID';<BR>
IBSQL.ExecQuery;<BR>
<BR>
//Tabelle User_Forms erzeugen<BR>
IBSQL.SQL.Clear;<BR>
IBSQL.SQL.Add('Create Table Tab_UserForms');<BR>
IBSQL.SQL.Add('(ID Integer');<BR>
IBSQL.SQL.Add(',FormName CHAR(100)');<BR>
IBSQL.SQL.Add(',FormPosition CHAR(15)');<BR>
IBSQL.SQL.Add(',FormColor CHAR(15)');<BR>
IBSQL.SQL.Add(',FormDaten CHAR(20))');<BR>
IBSQL.ExecQuery;<BR>
<BR>
IBSQL.SQL.Clear;<BR>
IBSQL.SQL.Add('Create Trigger Set_FormID For Tab_UserForms Active Before Insert Position 0 AS');<BR>
IBSQL.SQL.Add('BEGIN');<BR>
IBSQL.SQL.Add('New.ID = GEN_ID(Gen_FormID,1);');<BR>
IBSQL.SQL.Add('END');<BR>
<BR>
IBSQL.ExecQuery;<BR>
<BR>
IBSQL.Transaction.Commit;<BR>
<B>end;</B><BR>
<BR>
================================================== =====================<BR>
Das Problem liegt aber darin, das ich das ID-Feld nicht mit "Not Null"<BR>
deklarieren kann wenn ich die Trigger-Werte nutzen möchte.<BR>
Denn wenn ich "Not Null" benutze, sagt der Client (IB-Console / Delphi-Programm...) das das Feld FormID einen Wert haben muß.<BR>
Wenn ich "Not Null" weg lasse funktioniert es zwar, das ist aber nicht das was ich will.<BR>
<BR>
Das Feld FormID soll durch den IBServer vergeben werden und muß Read Only sein.<BR>
<BR>
<BR>
Ingo Schreiber
<BR>
<BR>
Ich hoffe das mir jemand (Herr Kosch?) weiterhelfen kann.<BR>
Ich versuche mit Delphi 6 EP eine Datenbankoberfläche "ähnlich" Access für Schulungszwecke zu entwerfen.<BR>
Das Anlegen der Database und der Tabellen funktioniert.<BR>
Ich möchte aber auch die Möglichkeit von AutoInc nutzen.<BR>
<BR>
<BR>
Und genau da liegt mein Problem.<BR>
<BR>
Ich habe bisher folgenden Quelltext benutzt, der soweit auch funktioniert.<BR>
<BR>
================================================== =====================<BR>
<B>procedure TDM_Form.NewDatabaseExecute(Sender: TObject);</B><BR>
<B>begin</B><BR>
IBTransaction.Active := False;<BR>
IBDatabase.Close;<BR>
<B>if</B> FileExists(Neu_Form.NewDBDialog.FileName) <B>then</B> DeleteFile(Neu_Form.NewDBDialog.FileName);<BR>
IBDatabase.DatabaseName := Neu_Form.NewDBDialog.FileName;<BR>
IBDatabase.Params.Add('User "SYSDBA"');<BR>
IBDatabase.Params.Add('Password "1"');<BR>
IBDatabase.CreateDatabase;<BR>
<BR>
IBSQL.Transaction.StartTransaction;<BR>
IBSQL.SQL.Clear;<BR>
<BR>
//Generator (Zähler) für Tab_User_Forms erzeugen<BR>
IBSQL.SQL.Text :='Create Generator Gen_FormID';<BR>
IBSQL.ExecQuery;<BR>
<BR>
//Tabelle User_Forms erzeugen<BR>
IBSQL.SQL.Clear;<BR>
IBSQL.SQL.Add('Create Table Tab_UserForms');<BR>
IBSQL.SQL.Add('(ID Integer');<BR>
IBSQL.SQL.Add(',FormName CHAR(100)');<BR>
IBSQL.SQL.Add(',FormPosition CHAR(15)');<BR>
IBSQL.SQL.Add(',FormColor CHAR(15)');<BR>
IBSQL.SQL.Add(',FormDaten CHAR(20))');<BR>
IBSQL.ExecQuery;<BR>
<BR>
IBSQL.SQL.Clear;<BR>
IBSQL.SQL.Add('Create Trigger Set_FormID For Tab_UserForms Active Before Insert Position 0 AS');<BR>
IBSQL.SQL.Add('BEGIN');<BR>
IBSQL.SQL.Add('New.ID = GEN_ID(Gen_FormID,1);');<BR>
IBSQL.SQL.Add('END');<BR>
<BR>
IBSQL.ExecQuery;<BR>
<BR>
IBSQL.Transaction.Commit;<BR>
<B>end;</B><BR>
<BR>
================================================== =====================<BR>
Das Problem liegt aber darin, das ich das ID-Feld nicht mit "Not Null"<BR>
deklarieren kann wenn ich die Trigger-Werte nutzen möchte.<BR>
Denn wenn ich "Not Null" benutze, sagt der Client (IB-Console / Delphi-Programm...) das das Feld FormID einen Wert haben muß.<BR>
Wenn ich "Not Null" weg lasse funktioniert es zwar, das ist aber nicht das was ich will.<BR>
<BR>
Das Feld FormID soll durch den IBServer vergeben werden und muß Read Only sein.<BR>
<BR>
<BR>
Ingo Schreiber
<BR>
<BR>
Comment