Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   'Not in edit mode' (https://www.clubdelphi.com/foros/showthread.php?t=76587)

y_a_p 10-11-2011 22:48:07

'Not in edit mode'
 
Hola estoy haciendo un sistema para un consultorio pediátrico, trabajo con BD SQL, motor Firebird y con Delphi, cuando hago un alta con este código:
Código Delphi [-]
begin
 Try
  DM.DSET_pacESTADO.Value:=0;
  DM.DSET_pacMESES.Value:=0;
  if (DM.DSET_pacAPELLIDO_Y_NOMBRE.Value='')then
   begin
    ShowMessage('Verifica que hay campos obligatorios que no están cargados');
    DM.DSET_pac.Cancel;
    DM.Transaccion.RollbackRetaining;
   end;
  if(DM.DSET_pacTIPO_DOCUMENTO.Value='')then
   begin
    ShowMessage('Verifica que hay campos obligatorios que no están cargados');
    DM.DSET_pac.Cancel;
    DM.Transaccion.RollbackRetaining;
   end;
  if(DM.DSET_pacNUMERO_DOCUMENTO.Value='')then
   begin
    ShowMessage('Verifica que hay campos obligatorios que no están cargados');
    DM.DSET_pac.Cancel;
    DM.Transaccion.RollbackRetaining;
   end;
  if(DM.DSET_pacFECHA_DE_NACIMIENTO.Value=null)then
   begin
    ShowMessage('Verifica que hay campos obligatorios que no están cargados');
    DM.DSET_pac.Cancel;
    DM.Transaccion.RollbackRetaining;
   end;

  if(DM.DSET_pacSEXO.Value='')then
   begin
    ShowMessage('Verifica que hay campos obligatorios que no están cargados');
    DM.DSET_pac.Cancel;
    DM.Transaccion.RollbackRetaining;
   end;
  if(DM.DSET_pacDIRECCION.Value='')then
   begin
    ShowMessage('Verifica que hay campos obligatorios que no están cargados');
    DM.DSET_pac.Cancel;
    DM.Transaccion.RollbackRetaining;
   end;
  if(DM.DSET_pacNUM_DIR.Value=0)then
   begin
    ShowMessage('Verifica que hay campos obligatorios que no están cargados');
    DM.DSET_pac.Cancel;
    DM.Transaccion.RollbackRetaining;
   end;
  if(DM.DSET_pacPROFESIONAL.Value=null)then
   begin
    ShowMessage('Verifica que hay campos obligatorios que no están cargados');
    DM.DSET_pac.Cancel;
    DM.Transaccion.RollbackRetaining;
   end;
  DM.DSET_pacID_PROF.Value:=DM.DSET_profID_PROF.Value;
  DM.DSET_pacID_COBER.Value:=DM.DSET_cob_medID_COBER.Value;
  DM.DSET_pacID_LOC.Value:=DM.DSET_locID_LOC.Value;
  DM.DSET_num.Edit;
  DM.DSET_numTIPO.Value:='H';
  DM.DSET_numCOMENTARIO.Value:='HISTORIA CLINICA';
  DM.DSET_numNUMERO.Value:=DM.DSET_numNUMERO.Value + 1;
  DM.DSET_pacNUMERO_HISTORIA_CLINICA.Value:=DM.DSET_numNUMERO.Value;
  DM.DSET_pac.Post;
  DM.DSET_num.Post;
  DM.Transaccion.CommitRetaining;
  DM.DSET_pac.Append;
  ape_nom_pac_a.SetFocus;
 except
  ShowMessage('No se puede ingresar un registro en blanco');
  DM.DSET_pac.Cancel;
  DM.Transaccion.RollbackRetaining;
 end;
end;
Donde DM= Data Module, DSET_pac= tabla paciente.
El problema que tengo es que cuando lo quiero correr me tira el error: 'Not in edit mode' y no puedo localizar en donde está el error, desde ya muchas gracias por la ayuda y en caso de alguna duda estoy dispuesta a responder por si no se entiende mi pregunta.

Casimiro Noteví 10-11-2011 22:59:11

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración.

Y recuerda poner el código entre etiquetas, ejemplo:



.

oscarac 10-11-2011 23:03:18

esta tabla... donde colocas el edit???

Dm.dSET_pac.EDIT ????? donde????
Código Delphi [-]
DM.DSET_pac.Post;

para determinar la linea con error puedes colocar un break point y desde ahi ejecutyar presionando la tecla F8

y_a_p 10-11-2011 23:07:56

Olvide especificarles que en el OnShow del form tengo un append...

oscarac 10-11-2011 23:11:44

entonces ejecuta el programa con f8 y ahi vas revisando paso a paso

ecfisa 10-11-2011 23:23:14

Hola.

Probá agregando esta línea:
Código Delphi [-]
begin
 Try
  DM.DSET.Edit; // poner en modo edición antes de asignar valores
  DM.DSET_pacESTADO.Value:=0;
  DM.DSET_pacMESES.Value:=0;
  ...

Un saludo.

MartinS 11-11-2011 00:14:54

A simple vista creo que si el programa no ingresa en alguno de los condicionales no hay inconvenientes pero si llegara a entrar en solo uno cancelas la edicion
Código Delphi [-]
 
if(DM.DSET_pacPROFESIONAL.Value=null)then
   begin
    ShowMessage('Verifica que hay campos obligatorios que no están cargados');
    DM.DSET_pac.Cancel;
    DM.Transaccion.RollbackRetaining;
   end;
y luego queres asignar un valor a un Dataset cerrado para edicion

Código Delphi [-]
  DM.DSET_pacID_PROF.Value:=DM.DSET_profID_PROF.Value;
  DM.DSET_pacID_COBER.Value:=DM.DSET_cob_medID_COBER.Value;
  DM.DSET_pacID_LOC.Value:=DM.DSET_locID_LOC.Value;
entonces ahi salta el error...

completa todos los campos y hace un seguimiento como sugiere oscarac (F8) y otro sin completar alguno para ver los resultados y veremos....

y_a_p 11-11-2011 18:27:02

Hola desde ya muchas gracias por responder, si se hacer el seguimiento con el F8 y de hecho lo he intentado hacer, pero directamente ni correr el programa... Muchas gracias!

oscarac 11-11-2011 18:32:23

Cita:

Empezado por y_a_p (Mensaje 418268)
Hola desde ya muchas gracias por responder, si se hacer el seguimiento con el F8 y de hecho lo he intentado hacer, pero directamente ni correr el programa... Muchas gracias!

disculpar... pero mi no saber que tu querer decir con esta frase... :confused:

y_a_p 14-11-2011 20:17:32

Que no funciona el ejecutable porque cuando lo corro al programa me tira el error antes de de que se ejecute...

Caral 14-11-2011 20:26:22

Hola
La tabla DSET_pac no esta abierta, por eso envia el error.
No puedes introducir datos a una tabla cerrada.
Aqui:
Código Delphi [-]
Try
  DM.DSET_pacESTADO.Value:=0;
  DM.DSET_pacMESES.Value:=0;
Estas diciendo que el estado y esl mes son iguales a 0, pero no esta abierta la tabla.
De ahi en eadelante se quieren indicar datos sin mostrar ni linea ni contenido y comparacion.
Osea, asi no funciona.
Saludos

y_a_p 14-11-2011 20:38:42

Muchísima gracias por todas sus ayudas, pero ya lo solucione, el error me tiraba aquí:
Código Delphi [-]
DM.DSET_pacEDAD.Value:=YearsBetween(Now, DM.DSET_pacFECHA_DE_NACIMIENTO.Value);
 DM.DSET_pacMESES.Value:=MonthsBetween(Now, DM.DSET_pacMESES.Value);
porque yo quería modificar la tabla DSET_pac dentro de un evento OnChange de un DBEdit y no había puesto la tabla en modo de edición, la solución es:
Código Delphi [-]
 DM.DSET_pac.Edit;
 DM.DSET_pacEDAD.Value:=YearsBetween(Now, DM.DSET_pacFECHA_DE_NACIMIENTO.Value);
 DM.DSET_pacMESES.Value:=MonthsBetween(Now, DM.DSET_pacMESES.Value);
y luego me marco otra vez el mismo error pero haciendo el seguimiento, me faltaba poner en edición la tabla (DSET_pac):
Código Delphi [-]
Try
  DM.DSET_pacESTADO.Value:=0;
  DM.DSET_pacMESES.Value:=0;
  if (DM.DSET_pacAPELLIDO_Y_NOMBRE.Value='')then
   begin
    ShowMessage('Verifica que hay campos obligatorios que no están cargados');
    DM.DSET_pac.Cancel;
    DM.Transaccion.RollbackRetaining;
   end;
  if(DM.DSET_pacTIPO_DOCUMENTO.Value='')then
   begin
    ShowMessage('Verifica que hay campos obligatorios que no están cargados');
    DM.DSET_pac.Cancel;
    DM.Transaccion.RollbackRetaining;
   end;
  if(DM.DSET_pacNUMERO_DOCUMENTO.Value='')then
   begin
    ShowMessage('Verifica que hay campos obligatorios que no están cargados');
    DM.DSET_pac.Cancel;
    DM.Transaccion.RollbackRetaining;
   end;
  if(DM.DSET_pacFECHA_DE_NACIMIENTO.Value=null)then
   begin
    ShowMessage('Verifica que hay campos obligatorios que no están cargados');
    DM.DSET_pac.Cancel;
    DM.Transaccion.RollbackRetaining;
   end;

  if(DM.DSET_pacSEXO.Value='')then
   begin
    ShowMessage('Verifica que hay campos obligatorios que no están cargados');
    DM.DSET_pac.Cancel;
    DM.Transaccion.RollbackRetaining;
   end;
  if(DM.DSET_pacDIRECCION.Value='')then
   begin
    ShowMessage('Verifica que hay campos obligatorios que no están cargados');
    DM.DSET_pac.Cancel;
    DM.Transaccion.RollbackRetaining;
   end;
  if(DM.DSET_pacNUM_DIR.Value=0)then
   begin
    ShowMessage('Verifica que hay campos obligatorios que no están cargados');
    DM.DSET_pac.Cancel;
    DM.Transaccion.RollbackRetaining;
   end;
  if(DM.DSET_pacPROFESIONAL.Value=null)then
   begin
    ShowMessage('Verifica que hay campos obligatorios que no están cargados');
    DM.DSET_pac.Cancel;
    DM.Transaccion.RollbackRetaining;
   end;
  DM.DSET_pac.Edit;
  DM.DSET_pacID_PROF.Value:=DM.DSET_profID_PROF.Value;
  DM.DSET_pacID_COBER.Value:=DM.DSET_cob_medID_COBER.Value;
  DM.DSET_pacID_LOC.Value:=DM.DSET_locID_LOC.Value;
  DM.DSET_num.Edit;
  DM.DSET_numTIPO.Value:='H';
  DM.DSET_numCOMENTARIO.Value:='HISTORIA CLINICA';
  DM.DSET_numNUMERO.Value:=DM.DSET_numNUMERO.Value + 1;
  DM.DSET_pacNUMERO_HISTORIA_CLINICA.Value:=DM.DSET_numNUMERO.Value;
  DM.DSET_pac.Post;
  DM.DSET_num.Post;
  DM.Transaccion.CommitRetaining;
  DM.DSET_pac.Append;
  ape_nom_pac_a.SetFocus;
 except
  ShowMessage('No se puede ingresar un registro en blanco');
  DM.DSET_pac.Cancel;
  DM.Transaccion.RollbackRetaining;
 end;
end;
lo que agrege y me realiza bien todo lo que deseo.
Pero igual agradezco su tiempo...


La franja horaria es GMT +2. Ahora son las 21:53:17.

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