Cita:
Empezado por ecfisa
Hola.
Ah, correcto... y supongo que ya controlaste que tenga un valor ingresado. Pensé en esa columna por que era la que estaba señalizada en el mensaje de error.
Pero también podría ser cualquier otra que tenga su propiedad Required en True la que esté disparando la excepción y, como señaló orodriguezca, el problema se esté generando en otro lado.
Esa situación podría producirse cuando, por ejemplo, generas los campos en el IBDataSet y luego modificas (quitas) la restricción NOT NULL desde la bd. En ese caso tal vez te funcione volver a gererar las sentencias SQL de los IBDataSets que actuan en la relación.
Realmente es muy difícil tratar de reproducir la situación de error dado lo largo del código y los múltiples elementos que entran en juego.
Saludos
|
Ya hice las pruebas, hice lo q me sugierieron, revisé con el ShowMessage que el objeto edLecheria, tuviera datos en su propiedad Text y sí, si tiene.
Realice la verificacion de los campos del Maestro y el Detalle, dentro del DataSet respectivo y los campos que pertenecen a la PrimaryKey de la tabla, tenian en su propiedad Required=True, se lo cambie a False y ya no marco error al momento de realizar el Post al dataset del detalle, ahora lo marca en el ApplyUpdates.
Código Delphi
[-]procedure TfrmPBLCaptura.btnGuardarClick(Sender: TObject);
begin
try
dsPBLDetalle.DataSource:=nil;
try
ModDatos.dbFluida.ApplyUpdates( [dsPBLMaestro, dsPBLDetalle] );
finally
dsPBLDetalle.DataSource:=dSoPBLMaestro;
end;
ModDatos.trsFluida.CommitRetaining;
except
on E: Exception do
begin
Application.MessageBox('El o los registros no pueden ser grabados en este momento, probablemente el registro que estas consultando esta siendo editado por otro usuario','Error', mb_ok+mb_IconError);
ShowMessage(E.Message);
ModDatos.trsFluida.RollbackRetaining;
end;
end;
mskAnio.SetFocus;
end;
Código:
'validation error for column LECHER, value "*** null ***"'.
Quiere decir q entonces no se esta almacenando nada cuando se ejecuta este código:
Código Delphi
[-]
procedure TfrmPBLCaptura.btnAgregarClick(Sender: TObject);
begin
btnGuardar.Enabled:=True;
RegNuevo:=1;
dsPBLDetalle.Append;
dsPBLDetalle.FieldByName('LECHER').AsString:=edLecheria.Text; dsPBLDetalle.FieldByName('pbl_mes').AsInteger:=cbxMes.ItemIndex+1; dsPBLDetalle.FieldByName('pbl_anio').AsString:=mskAnio.Text;
dsPBLDetalle.FieldByName('id_pbl_tipo').AsInteger:=cbxTipoPBL.KeyValue;
dsPBLDetalle.FieldByName('id_pbl_causa').AsInteger:=cbxCausasPBL.KeyValue;
dsPBLDetalle.FieldByName('pbl_det_dias').AsString:=edDias.Text;
dsPBLDetalle.FieldByName('pbl_det_diferencia').AsString:=edDiferencia.Text;
dsPBLDetalle.Post;
AbrirDetalleGrid(Sender);
cbxTipoPBL.SetFocus;
end;
(Lo marcado con color son los campos de la llave primaria de la tabla DETALLE)
Sinceramente esta es la primera vez que trabajo Maestro-Detalle usando el enlace entre los dataset, mediante la propiedad DataSource.
Ahora por donde va la cosa???...
Gracias por su tiempo !. Saludos