Hi,
Die Probleme reißen nicht ab
Beim Erzeugen eines neuen Datensatzes mit Relation verbundenen Tabellen tritt beim speichern
folgender Fehler auf
Fehler-Meldung: Ausführung misslungen, Validation error für column FI_STAMM_ID,
value "***null***" aufgetreten.
Das Feld FI_STAMM_ID soll später über eine Combobox gefüllt werden aber zuerst nur mit 0.
Testweise habe ich mit 156 vorbelegt(ID in verbundener Tabelle), aber gleicher Fehler.
Für einen Tip wäre ich sehr dankbar.
Gruß Rudolf Terppe
cmdSEL1.CommandText := 'SELECT a.ID, a.BEZ, a.USERS, a.LOGIN, a.FI_STAMM_ID, '+
' b.ID, b.BEZ FROM FI_STAMM_U a, FI_STAMM b WHERE '+
'a.FI_STAMM_ID = b.ID' ;
// INSERT-Anweisung
cmdINS := BdpCommand.Create;
cmdINS.CommandType := CommandType.Text;
cmdINS.CommandText := 'INSERT INTO FI_STAMM_U ('+
'ID ,'+
'BEZ ,'+
'USERS ,'+
'LOGIN ,'+
'FI_STAMM_ID ,'+
'INFO ,'+
'DTNAME ,'+
'ENGNAME ,'+
'MEMO ,'+
'GUELTIG '+
')VALUES('+
' ? ,'+
' ? ,'+
' ? ,'+
' ? ,'+
' ? ,'+
' ? ,'+
' ? ,'+
' ? ,'+
' ? ,'+
' ? )';
cmdINS.Connection := Fcon;
cmdINS.Parameters.Add(BdpParameter.Create('@p1',Bd pType.Int32, 0, 'ID'));
cmdINS.Parameters.Add(BdpParameter.Create('@p2',Bd pType.&String, 100, 'BEZ'));
cmdINS.Parameters.Add(BdpParameter.Create('@p3',Bd pType.&String, 8, 'USERS'));
cmdINS.Parameters.Add(BdpParameter.Create('@p4',Bd pType.DateTime, 0, 'LOGIN'));
cmdINS.Parameters.Add(BdpParameter.Create('@p5',Bd pType.Int32, 0 , 'STAMM_ID'));
cmdINS.Parameters.Add(BdpParameter.Create('@p6',Bd pType.&String, 100, 'INFO'));
cmdINS.Parameters.Add(BdpParameter.Create('@p7',Bd pType.&String, 100, 'DTNAME'));
cmdINS.Parameters.Add(BdpParameter.Create('@p8',Bd pType.&String, 100, 'ENGNAME'));
cmdINS.Parameters.Add(BdpParameter.Create('@p9',Bd pType.Blob, 80, 'MEMO'));
cmdINS.Parameters.Add(BdpParameter.Create('@p10',B dpType.&String, 1, 'GUELTIG'));
Fdad1.InsertCommand := cmdINS;
Dann beim Neuanlegen eines Datensatzes
procedure frmTFI_STAMM_U.Neu;
var frmMain: frmTMain;
b: TFI_STAMM_U;
iRow: Integer;
begin
b := TFI_STAMM_U.Create;
frmMain := frmTMain.Create;
StatusBar.Text := 'Neuer Datensatz !';
FcurMan.EndCurrentEdit; //Bindung lösen
FcurMan.SuspendBinding;
edtID.Clear;
edtBEZ.Clear;
edtUSERS.Clear;
edtLOGIN.Clear;
edtFI_STAMM_ID.Clear;
b.neue_ID;
Fdrv := Fdv.AddNew; //DataRowView
Fdrv.BeginEdit; //vorbelegen
Fdrv['ID'] := b.ID;
Fdrv['BEZ'] := '*';
Fdrv['USERS'] := frmMain.userApp;
Fdrv['LOGIN'] := TDateTime.Now;
Fdrv['FI_STAMM_ID'] := 156;
Fdrv.EndEdit;
FcurMan.CancelCurrentEdit; // Bindung wieder herstellen
FcurMan.ResumeBinding;
Fdv.Sort := 'ID';
iRow := Fdv.Find(b.ID);
DataGrid.CurrentRowIndex := iRow; //Zeile vorn markieren
DataGrid.Select(iRow); //Zeile ganz markieren
RefreshStatusBar(sender, e);
frmMain.mmTrue; //Mainmenü, ToolButtons, frmVb-cm-ContextMenü
frmMain.Free;
b.Free;
end;
Die Probleme reißen nicht ab
Beim Erzeugen eines neuen Datensatzes mit Relation verbundenen Tabellen tritt beim speichern
folgender Fehler auf
Fehler-Meldung: Ausführung misslungen, Validation error für column FI_STAMM_ID,
value "***null***" aufgetreten.
Das Feld FI_STAMM_ID soll später über eine Combobox gefüllt werden aber zuerst nur mit 0.
Testweise habe ich mit 156 vorbelegt(ID in verbundener Tabelle), aber gleicher Fehler.
Für einen Tip wäre ich sehr dankbar.
Gruß Rudolf Terppe
cmdSEL1.CommandText := 'SELECT a.ID, a.BEZ, a.USERS, a.LOGIN, a.FI_STAMM_ID, '+
' b.ID, b.BEZ FROM FI_STAMM_U a, FI_STAMM b WHERE '+
'a.FI_STAMM_ID = b.ID' ;
// INSERT-Anweisung
cmdINS := BdpCommand.Create;
cmdINS.CommandType := CommandType.Text;
cmdINS.CommandText := 'INSERT INTO FI_STAMM_U ('+
'ID ,'+
'BEZ ,'+
'USERS ,'+
'LOGIN ,'+
'FI_STAMM_ID ,'+
'INFO ,'+
'DTNAME ,'+
'ENGNAME ,'+
'MEMO ,'+
'GUELTIG '+
')VALUES('+
' ? ,'+
' ? ,'+
' ? ,'+
' ? ,'+
' ? ,'+
' ? ,'+
' ? ,'+
' ? ,'+
' ? ,'+
' ? )';
cmdINS.Connection := Fcon;
cmdINS.Parameters.Add(BdpParameter.Create('@p1',Bd pType.Int32, 0, 'ID'));
cmdINS.Parameters.Add(BdpParameter.Create('@p2',Bd pType.&String, 100, 'BEZ'));
cmdINS.Parameters.Add(BdpParameter.Create('@p3',Bd pType.&String, 8, 'USERS'));
cmdINS.Parameters.Add(BdpParameter.Create('@p4',Bd pType.DateTime, 0, 'LOGIN'));
cmdINS.Parameters.Add(BdpParameter.Create('@p5',Bd pType.Int32, 0 , 'STAMM_ID'));
cmdINS.Parameters.Add(BdpParameter.Create('@p6',Bd pType.&String, 100, 'INFO'));
cmdINS.Parameters.Add(BdpParameter.Create('@p7',Bd pType.&String, 100, 'DTNAME'));
cmdINS.Parameters.Add(BdpParameter.Create('@p8',Bd pType.&String, 100, 'ENGNAME'));
cmdINS.Parameters.Add(BdpParameter.Create('@p9',Bd pType.Blob, 80, 'MEMO'));
cmdINS.Parameters.Add(BdpParameter.Create('@p10',B dpType.&String, 1, 'GUELTIG'));
Fdad1.InsertCommand := cmdINS;
Dann beim Neuanlegen eines Datensatzes
procedure frmTFI_STAMM_U.Neu;
var frmMain: frmTMain;
b: TFI_STAMM_U;
iRow: Integer;
begin
b := TFI_STAMM_U.Create;
frmMain := frmTMain.Create;
StatusBar.Text := 'Neuer Datensatz !';
FcurMan.EndCurrentEdit; //Bindung lösen
FcurMan.SuspendBinding;
edtID.Clear;
edtBEZ.Clear;
edtUSERS.Clear;
edtLOGIN.Clear;
edtFI_STAMM_ID.Clear;
b.neue_ID;
Fdrv := Fdv.AddNew; //DataRowView
Fdrv.BeginEdit; //vorbelegen
Fdrv['ID'] := b.ID;
Fdrv['BEZ'] := '*';
Fdrv['USERS'] := frmMain.userApp;
Fdrv['LOGIN'] := TDateTime.Now;
Fdrv['FI_STAMM_ID'] := 156;
Fdrv.EndEdit;
FcurMan.CancelCurrentEdit; // Bindung wieder herstellen
FcurMan.ResumeBinding;
Fdv.Sort := 'ID';
iRow := Fdv.Find(b.ID);
DataGrid.CurrentRowIndex := iRow; //Zeile vorn markieren
DataGrid.Select(iRow); //Zeile ganz markieren
RefreshStatusBar(sender, e);
frmMain.mmTrue; //Mainmenü, ToolButtons, frmVb-cm-ContextMenü
frmMain.Free;
b.Free;
end;
Comment