Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Controlar el post y edit de un TDBNavigator (https://www.clubdelphi.com/foros/showthread.php?t=4275)

Delphos 08-10-2003 16:29:58

Controlar el post y edit de un TDBNavigator
 
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

Código:

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.


La franja horaria es GMT +2. Ahora son las 17:01:34.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi