PDA

Ver la Versión Completa : Controlar el post y edit de un TDBNavigator


Delphos
08-10-2003, 16:29:58
Hola foro

Alguien me puede decir como se puede controlar el que no se pueda grabar o editar un registro que no tengan todos los campos rellenados.

Trabajo con un TADOTable, los tipicos DBEdit y un TDBNavigator

Porque no funciona esto

procedure TfrmArticulos.DBNavigator1BeforeAction(Sender: TObject;
Button: TNavigateBtn);
begin
//if (frmPrincipal.TablaArticulos.State = dsInsert) or (frmPrincipal.TablaArticulos.State = dsEdit) then
// begin
if (dbNombre.Text = '') or (dbDescripcion.Text = '') or
(dboCategoria.Text = '') or (dbPrecio.Text = '') or
(dboLocal.Text = '') then
begin
ShowMessage('Registro no guardado: Debe Rellenar todos los campos');
frmPrincipal.TablaArticulos.Cancel;

end;
// end;
end;

Ademas lo que esta comentado es porque no me reconoce la propiedad dsInsert ni dsEdit me dice que variable no declarada.

El codigo de arriba no funciona cuando intento añadir un registro o editar algun existente me dice que no estoy en estado dsInsert o dsEdit.

Se os ocurre algo, porque tendria que volver modificar tres formularios para controlar esto y es un faenon.

Muchas Gracias por adelantado.

Salu2.

roman
08-10-2003, 16:49:07
Creo que el lugar más adecuado para verificar la validez de los datos antes de insertarlos en la base de datos es en el evento OnBeforePost del Dataset.

// Saludos

roman
08-10-2003, 18:26:52
Releí la pregunta.

Además de lo que ya te comenté antes, tu código no funciona precisamente porque quitaste la línea que verifica que el DataSet esté en modo de edición o inserción. El error lo provoca el método Cancel.

Para que reconozca las constantes dsInsert y dsEdit debes añadir la unidad DB a la cláusula uses de la unidad en donde esté el código.

// Saludos

sanxpue
08-10-2003, 18:53:03
Porque no funciona esto

procedure TfrmArticulos.DBNavigator1BeforeAction(Sender: TObject;Button: TNavigateBtn);
begin
// if (frmPrincipal.TablaArticulos.State = dsInsert) or (frmPrincipal.TablaArticulos.State = dsEdit) then
//begin
if (dbNombre.Text = '') or (dbDescripcion.Text = '') or
(dboCategoria.Text = '') or (dbPrecio.Text = '') or
(dboLocal.Text = '') then
begin
ShowMessage('Registro no guardado: Debe Rellenar todos los campos');
frmPrincipal.TablaArticulos.Cancel;

end;
// end;
end;


Pues por que en lugar de reconocer

if (dbNombre.Text = '') or (....

deberias de mandar

if (frmPrincipal.TablaArticulos.FieldByName('Nombre').AsString = '') Or (.....

Delphos
08-10-2003, 20:41:26
Vale asunto solucionado.

Muchas gracias de nuevo.

Salu2.