Ir al contenido


Foto

Could not convert variant of type (Null) into type (Integer)


  • Por favor identifícate para responder
20 respuestas en este tema

#1 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 02 agosto 2011 - 04:26

saludos


tengo inconvenientes con un form que se llama frm_datosegreso
dentro del form tengo 4 DBLookupComboBox, cada uno esta conectado con un datasource con su respectivo query, todos los datos deben ser obligatorios, cuando no lleno ningun campo me sale una falla  Could not convert variant of type (Null) into type (Integer).

que puedo hacer para cuando no se llene ningun dato me salga un mensaje en vez de ese error???

este es el codigo que tengo dentro del form



delphi
  1. unit Frm_DatosEgreso;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, AdvGlowButton, ExtCtrls, Mask, DBCtrls, StdCtrls, Buttons, DB,
  8.   IBCustomDataSet, IBQuery,u_HistoriasClinicas,dm_NotaIngreso;
  9. type
  10.  
  11.    
  12.   TFrmDatosEgreso = class(TForm)
  13.     GBoxDatosEgresoUrgencia: TGroupBox;
  14.     Label21: TLabel;
  15.     Panel1: TPanel;
  16.     AdvGlowButton1: TAdvGlowButton;
  17.     AdvGlowButton2: TAdvGlowButton;
  18.     DsMotivoEgreso: TDataSource;
  19.     DsDestinoPaciente: TDataSource;
  20.     DsEstadoSalida: TDataSource;
  21.     DsDestino3047: TDataSource;
  22.     DsDxSalida: TDataSource;
  23.     q_Motivo: TIBQuery;
  24.     q_Destino: TIBQuery;
  25.     q_EstadoSalida: TIBQuery;
  26.     q_Destino3047: TIBQuery;
  27.     q_DxSalida: TIBQuery;
  28.     DsNuevoDestino3047: TDataSource;
  29.     DsNuevaSalida: TDataSource;
  30.     DsNuevoDestino: TDataSource;
  31.     DSHistoria: TDataSource;
  32.     dsHist: TDataSource;
  33.     DBEdit16: TDBEdit;
  34.     Label12: TLabel;
  35.     DBLookupComboBox5: TDBLookupComboBox;
  36.     Label6: TLabel;
  37.     DBLookupComboBox4: TDBLookupComboBox;
  38.     Label4: TLabel;
  39.     DBLookupComboBox3: TDBLookupComboBox;
  40.     Label51: TLabel;
  41.     DBLookupComboBox1: TDBLookupComboBox;
  42.     Label19: TLabel;
  43.     BtnBuscarDxSalida: TSpeedButton;
  44.     BtnBorrarDxSalida: TSpeedButton;
  45.     procedure BtnBuscarMotivoEgresoClick(Sender: TObject);
  46.     procedure BtnBorrarMotivoEgresoClick(Sender: TObject);
  47.     procedure BtnBuscarDestinoClick(Sender: TObject);
  48.     procedure BtnBuscarEstadoSalidaClick(Sender: TObject);
  49.     procedure BtnBuscarDestino3047Click(Sender: TObject);
  50.     procedure BtnBuscarDxSalidaClick(Sender: TObject);
  51.     procedure BtnBorrarDestinoClick(Sender: TObject);
  52.     procedure BtnBorrarEstadoSalidaClick(Sender: TObject);
  53.     procedure BtnBorrarDestino3047Click(Sender: TObject);
  54.     procedure BtnBorrarDxSalidaClick(Sender: TObject);
  55.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  56.     procedure FormDestroy(Sender: TObject);
  57.   private
  58.     { Private declarations }
  59.     Retorno : TDatosEgreso;
  60.     Fdm : TdmNotaIngreso;
  61.  
  62.     procedure LimpiarRegistro(Const Cueri : TIBQuery);
  63.     procedure UbicarRegistro(Const Cueri : TIBQuery; Const Registro : Integer);
  64.   public
  65.     { Public declarations }
  66.   end;
  67.  
  68.   function AsignarDatosDeEgresoDelPaciente(Var RegActuales : TDatosEgreso) : Boolean;
  69. var
  70.   FrmDatosEgreso: TFrmDatosEgreso;
  71.  
  72. implementation
  73.  
  74. uses Frm_SearchIB, Dm_Data;
  75.  
  76. {$R *.dfm}
  77.  
  78. function AsignarDatosDeEgresoDelPaciente(Var RegActuales : TDatosEgreso) : Boolean;
  79. var Frm : TFrmDatosEgreso;
  80.     Fdm : TdmNotaIngreso;
  81. begin
  82. Result := False;
  83. Frm := TFrmDatosEgreso.create(nil);
  84. Fdm := TdmNotaIngreso.Create(nil);
  85. try
  86.         //REQ 3988
  87.     frm.dsHist.DataSet := Fdm.t_Historia;
  88.     Fdm.t_historia.Open;
  89.     frm.DSHistoria.DataSet := Fdm.q_Egreso;
  90.     Fdm.q_Egreso.Open;
  91.     frm.DsNuevoDestino.DataSet := Fdm.q_NuevoDestino;
  92.     Fdm.q_NuevoDestino.Open;
  93.     frm.DsNuevaSalida.DataSet := Fdm.q_NuevoEsSalida;
  94.     Fdm.q_NuevoEsSalida.Open;
  95.     frm.DsNuevoDestino3047.DataSet := Fdm.q_NuevoDestino3047;
  96.     Fdm.q_NuevoDestino3047.Open;
  97.     // Frm.UbicarRegistro(Fdm.q_Egreso,RegActuales.MotivoEgreso);
  98.     //Frm.UbicarRegistro(Fdm.q_NuevoDestino,RegActuales.DestinoEgreso);
  99.     // Frm.UbicarRegistro(Fdm.q_NuevoEsSalida,RegActuales.EstadoEgreso);
  100.     //frm.UbicarRegistro(Fdm.q_NuevoDestino3047,RegActuales.Destino3047Egreso);
  101.     Frm.UbicarRegistro(Frm.q_DxSalida,RegActuales.DxEgreso);
  102.     Frm.ShowModal;
  103.  
  104.     if Frm.ModalResult = mrOk then
  105.  
  106.       begin
  107.       RegActuales.MotivoEgreso := Frm.DBLookupComboBox1.KeyValue ;                    // Frm.q_Motivo.Fields[0].AsInteger;
  108.       RegActuales.DestinoEgreso:= Frm.DBLookupComboBox3.KeyValue ;              //Frm.q_Destino.Fields[0].AsInteger;
  109.       RegActuales.EstadoEgreso := Frm.DBLookupComboBox4.KeyValue;            //Frm.q_EstadoSalida.Fields[0].AsInteger;
  110.       RegActuales.Destino3047Egreso := Frm.DBLookupComboBox5.KeyValue;    //Frm.q_Destino3047.Fields[0].AsInteger;
  111.       RegActuales.DxEgreso    := Frm.q_DxSalida.Fields[0].AsInteger;      // lo Comentado valida los registros por buscadores
  112.       Result := True;
  113.       end;
  114. finally
  115.   Frm.Free;
  116.   Fdm.Free;
  117. end;
  118. end;
  119.  
  120. procedure TFrmDatosEgreso.BtnBuscarMotivoEgresoClick(Sender: TObject);
  121. var Registro : integer;
  122. begin
  123. Registro := BuscarIb(Fdm.q_Egreso.Transaction,'MOTIVO_EGRESO','COD_MOTIVO','DES_MOTIVO','ID_MOTIVO');
  124. if Registro > 0 then
  125.   UbicarRegistro(Fdm.q_Egreso,Registro);
  126. end;
  127.  
  128. procedure TFrmDatosEgreso.UbicarRegistro(const Cueri: TIBQuery;
  129.   const Registro: Integer);
  130. begin
  131. Cueri.Close;
  132. Cueri.Params[0].AsInteger := Registro;
  133. Cueri.Open;
  134. end;
  135.  
  136. procedure TFrmDatosEgreso.BtnBorrarMotivoEgresoClick(Sender: TObject);
  137. begin
  138. LimpiarRegistro(Fdm.q_Egreso);
  139. end;
  140.  
  141. procedure TFrmDatosEgreso.BtnBuscarDestinoClick(Sender: TObject);
  142. var Registro : integer;
  143. begin
  144. Registro := BuscarIb(Fdm.q_NuevoDestino.Transaction,'DESTINO_SALIDA','COD_DESTINO_SALIDA','DES_DESTINO_SALIDA','ID_DESTINO_SALIDA');
  145. if Registro > 0 then
  146.   UbicarRegistro(Fdm.q_NuevoDestino,Registro);
  147. end;
  148.  
  149. procedure TFrmDatosEgreso.BtnBuscarEstadoSalidaClick(Sender: TObject);
  150. var Registro : integer;
  151. begin
  152. Registro := BuscarIb(Fdm.q_NuevoEsSalida.Transaction,'ESTADO_SALIDA','COD_ESTADO_SALIDA','DES_ESTADO_SALIDA','ID_ESTADO_SALIDA');
  153. if Registro > 0 then
  154.   UbicarRegistro(Fdm.q_NuevoEsSalida,Registro);
  155. end;
  156.  
  157. procedure TFrmDatosEgreso.BtnBuscarDestino3047Click(Sender: TObject);
  158. var Registro : integer;
  159. begin
  160. Registro := BuscarIb(Fdm.q_NuevoDestino3047.Transaction,'TBL_DESTINO_3047','CODIGO','DESCRIPCION','ID_DESTINO_3047');
  161. if Registro > 0 then
  162.   UbicarRegistro(Fdm.q_NuevoDestino3047,Registro);
  163.  
  164.  
  165. end;
  166.  
  167. procedure TFrmDatosEgreso.BtnBuscarDxSalidaClick(Sender: TObject);
  168. var Registro : integer;
  169. begin
  170. Registro := BuscarIb(q_DxSalida.Transaction,'Cie9_DetRips','Cod_Cie9','Des_Cie9','Id_Cie9');
  171. if Registro > 0 then
  172.   UbicarRegistro(q_DxSalida,Registro);
  173.  
  174.  
  175. end;
  176.  
  177. procedure TFrmDatosEgreso.LimpiarRegistro(const Cueri: TIBQuery);
  178. begin
  179. Cueri.Close;
  180. end;
  181.  
  182. procedure TFrmDatosEgreso.BtnBorrarDestinoClick(Sender: TObject);
  183. begin
  184. LimpiarRegistro(Fdm.q_NuevoDestino);
  185. end;
  186.  
  187. procedure TFrmDatosEgreso.BtnBorrarEstadoSalidaClick(Sender: TObject);
  188. begin
  189. LimpiarRegistro(Fdm.q_NuevoEsSalida);
  190. end;
  191.  
  192. procedure TFrmDatosEgreso.BtnBorrarDestino3047Click(Sender: TObject);
  193. begin
  194. LimpiarRegistro(Fdm.q_NuevoDestino3047);
  195. end;
  196.  
  197. procedure TFrmDatosEgreso.BtnBorrarDxSalidaClick(Sender: TObject);
  198. begin
  199. LimpiarRegistro(q_DxSalida);
  200. end;
  201.  
  202. procedure TFrmDatosEgreso.FormClose(Sender: TObject;
  203.   var Action: TCloseAction);
  204. begin
  205. Action := cafree;
  206. end;
  207.  
  208. procedure TFrmDatosEgreso.FormDestroy(Sender: TObject);
  209. begin
  210. FrmDatosEgreso := nil;
  211. end;
  212.  
  213. end.


  • 0

#2 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 02 agosto 2011 - 05:00

Me perdí un poco amigo FELIX... dices que te manda un error cuando no llenas ningún campo...

En qué momento te salta el error ?

Algo que puedes usar para "manejar" este tipo de errores es usar un bloque try...except para poder hacer lo que sea necesario en caso de un error...

Saludox ! :)
  • 0

#3 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 02 agosto 2011 - 05:15

me sale el error en el procedure, solo cuando no lleno ningun campo



delphi
  1. procedure TFrmDatosEgreso.FormClose(Sender: TObject;
  2.   var Action: TCloseAction);
  3. begin
  4. Action := cafree;
  5. end;


  • 0

#4 Jose_Augusto

Jose_Augusto

    Member

  • Miembros
  • PipPip
  • 35 mensajes

Escrito 02 agosto 2011 - 05:42

hola Felix,

Ese es el inconveniente de ese componente, cuando tu abres (open, active:= true) el dataset a donde esta asignado el dblookupcombobox, cuando el dataset es abierto en teoria el cursor se encuentra en el primer registro, pero el dblookup no refresca este evento y solo se habilita, es por eso que sigue apuntando al valor null.

en el campo de la base de datos tienes que tomar en cuenta si es requerido o no dicho campo, visto de otra manera, si aceptará valores nulos o no.

a mi me gusta utilizar este componente, la solución que encontré en primera es preguntar primero si el componente apunta al nulo. si es asi solicito que sea seleccionado un dato.

si no quiero hacer dicha validación lo que hago es forzar a que de entrada tenga un valor, como lo hago. de la siguente forma. cuando abro el dataset apunto el cursor a un registro ya sea el ultimo o el primero (dataset.last    o  dataset.first)  despues le asigno el campo llave al dblookup


delphi
  1. dblookupcombobox1.keyvalue:= datasetcampollave.asinteger;



asi, si al usuario se le olvida rellenarlo se va con datos por default, que es mi primer registro.

y la otra  es como comenta nuestro amigo. utiliza el try



delphi
  1. try
  2. RegActuales.MotivoEgreso := Frm.DBLookupComboBox1.KeyValue ; 
  3. except


espero te sirva esta informacion, cualquier duda estoy a tus ordenes, te recomiendo que utilices otros nombres a los componentes para que sea mas entendible el codigo.

  • 0

#5 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 03 agosto 2011 - 07:44

saludos
jose_augusto gracias por tu pronta respuesta, lo que entiendo es que con el codigo que me diste el dataset tomara el ultimo valor o el primero.

en el form el usuario debe llenar siempre los campos no debe dejar ninguno vacio, pero el error sale siempre y cuando no se llene ningun valor, caso contrario si queda un campo vacio el sistema vuelve a abrir el form para llenar nuevamente los datos 
  • 0

#6 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 03 agosto 2011 - 07:55

cuando ejecuta el programa paso a paso el error sale en la primera linea de la condicion



delphi
  1. if Frm.ModalResult = mrOk then
  2.         begin
  3.         RegActuales.MotivoEgreso := Frm.DBLookupComboBox1.KeyValue  ;                    // Frm.q_Motivo.Fields[0].AsInteger;
  4.         RegActuales.DestinoEgreso:= Frm.DBLookupComboBox3.KeyValue ;              //Frm.q_Destino.Fields[0].AsInteger;
  5.         RegActuales.EstadoEgreso := Frm.DBLookupComboBox4.KeyValue;            //Frm.q_EstadoSalida.Fields[0].AsInteger;
  6.         RegActuales.Destino3047Egreso := Frm.DBLookupComboBox5.KeyValue;    //Frm.q_Destino3047.Fields[0].AsInteger;
  7.         RegActuales.DxEgreso    := Frm.q_DxSalida.Fields[0].AsInteger;      // lo Comentado valida los registros por buscadores
  8.         Result := True;
  9.         end;
  10. finally
  11.   Frm.Free;
  12.   Fdm.Free;


  • 0

#7 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 03 agosto 2011 - 07:56

Si el problema está al cerrar el formulario (Aunque insisto no debería de ser), puedes hacer lo siguiente:

Solución No. 1 (Cerrar la Tabla)



delphi
  1. procedure TFrmDatosEgreso.FormClose(Sender: TObject;
  2.   var Action: TCloseAction);
  3. begin
  4.   //Cerramos la tabla antes de cerrar el formulario
  5.   if DataSet.Active then
  6.     DataSet.Close; //Cerramos la tabla donde DataSet es tu Tabla
  7.  
  8.   Action := caFree;
  9. end;



Solución No. 2 (Cancelar la Tabla si está en modo Edición o Insert)
 
 

delphi
  1. procedure TFrmDatosEgreso.FormClose(Sender: TObject;
  2.     var Action: TCloseAction);
  3.   begin
  4.     //Cancelamos la tabla antes de cerrar el formulario
  5.     if DataSet.State in [dsEdit, dsInsert] then
  6.       DataSet.Cancel; //Cancelamos los datos actuales puede NULL o distinto
  7.  
  8.     Action := caFree;
  9.   end;



Espero te sirva de algo.

Saludos.

  • 0

#8 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 03 agosto 2011 - 09:12

disculpa mi ingenuidad lo que pasa es que el codigo no es mio y es muy extenso.

te comento cada lookup esta conectado a su datasource, a su query  y a su datafield, todos los DBLookupComboBox estan conectados en la propiedad datasource a un dsHist  y en la propiedad database a un dmNotaIngreso.t_historia


DBLookupComboBox1      ds_motivoEgreso          Q_motivo                    MOTIVO_EGRESO

DBLookupComboBox3      ds_DestinoPaciente      Q_Destino                  DESTINO
 
DBLookupComboBox4      ds_Estado de salida      Q_Estado de salida    DIAGNOSTICO_EGRESO

DBLookupComboBox5      ds_destino                    Q_Destino                  TRASLADO






  • 0

#9 bigleaguer

bigleaguer

    Advanced Member

  • Miembros
  • PipPipPip
  • 66 mensajes

Escrito 03 agosto 2011 - 09:29

Lo que quieres hacer (cuando no se llene ningun dato salga un mensaje en vez de ese error) lo puedes lograr de la siguiente forma:




delphi
  1. if (VarIsNull(DBLookupComboBox1.KeyValue)) or (VarIsNull(DBLookupComboBox2.KeyValue)) or
  2.   (VarIsNull(DBLookupComboBox3.KeyValue)) or (VarIsNull(DBLookupComboBox4.KeyValue)) then
  3. begin
  4.   ShowMessage('Por favor seleccione un item de la lista...');
  5.   // ...
  6. end;


  • 0

#10 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 03 agosto 2011 - 09:46

manejando el try o el if qeu me acanban de decir o el codigo de enecumene  me sale un error

ACCES VIOLATION AT ADDRESS 00AFE12F IN MODULE 'HISTORIA_CLINICA.EXE'. READ OF ADRESS 00000144
  • 0

#11 bigleaguer

bigleaguer

    Advanced Member

  • Miembros
  • PipPipPip
  • 66 mensajes

Escrito 03 agosto 2011 - 10:05

En que parte estás colocando el IF ó Try?
  • 0

#12 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 03 agosto 2011 - 10:18

Ensaya con este código en el evento OnCloseQuery del from TfrmDatosEgreso:




delphi
  1. procedure TFrmDatosEgreso.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  2. begin
  3.   if ModalResult = mrOk then
  4.     CanClose :=
  5.       Frm.DBLookupComboBox1.KeyValue <> null and
  6.       Frm.DBLookupComboBox3.KeyValue <> null and
  7.       Frm.DBLookupComboBox4.KeyValue <> null and
  8.       Frm.DBLookupComboBox5.KeyValue <> null;
  9.       if not CanClose then
  10.       Shoowmessage('Faltan datos')
  11. end;






  • 0

#13 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 03 agosto 2011 - 10:53

wilson me funciona el codigo bn hasta que muestra el mensaje, cuando llega ahi sale el error
ACCES VIOLATION AT ADDRESS 00AFE12F IN MODULE 'HISTORIA_CLINICA.EXE'. READ OF ADRESS 00000144

con esta linea muestra el mensaje sin fallos pero me saca del form



delphi
  1. raise exception.create('Debe llenar todos los campos');



  • 0

#14 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 03 agosto 2011 - 11:14

Ensaya quitando el "frm", podría haber confilcto con los nombres.




delphi
  1. procedure TFrmDatosEgreso.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  2. begin
  3.   if ModalResult = mrOk then
  4.     CanClose :=
  5.       DBLookupComboBox1.KeyValue <> null and
  6.       DBLookupComboBox3.KeyValue <> null and
  7.       DBLookupComboBox4.KeyValue <> null and
  8.       DBLookupComboBox5.KeyValue <> null;
  9.       if not CanClose then
  10.       Shoowmessage('Faltan datos')
  11. end;




Preguntas: Ese form tiene un botón cancelar, para que el usuario pueda arrepentirse?
                  Ese Raise.Exception.Create  de donde apareció?
  • 0

#15 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 03 agosto 2011 - 11:54

Además del cambio del post anterior te propongo este otro cambio:




delphi
  1. unit Frm_DatosEgreso;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, AdvGlowButton, ExtCtrls, Mask, DBCtrls, StdCtrls, Buttons, DB,
  8.   IBCustomDataSet, IBQuery,u_HistoriasClinicas,dm_NotaIngreso;
  9. type
  10.  
  11.  
  12.   TFrmDatosEgreso = class(TForm)
  13.     GBoxDatosEgresoUrgencia: TGroupBox;
  14.     Label21: TLabel;
  15.     Panel1: TPanel;
  16.     AdvGlowButton1: TAdvGlowButton;
  17.     AdvGlowButton2: TAdvGlowButton;
  18.     DsMotivoEgreso: TDataSource;
  19.     DsDestinoPaciente: TDataSource;
  20.     DsEstadoSalida: TDataSource;
  21.     DsDestino3047: TDataSource;
  22.     DsDxSalida: TDataSource;
  23.     q_Motivo: TIBQuery;
  24.     q_Destino: TIBQuery;
  25.     q_EstadoSalida: TIBQuery;
  26.     q_Destino3047: TIBQuery;
  27.     q_DxSalida: TIBQuery;
  28.     DsNuevoDestino3047: TDataSource;
  29.     DsNuevaSalida: TDataSource;
  30.     DsNuevoDestino: TDataSource;
  31.     DSHistoria: TDataSource;
  32.     dsHist: TDataSource;
  33.     DBEdit16: TDBEdit;
  34.     Label12: TLabel;
  35.     DBLookupComboBox5: TDBLookupComboBox;
  36.     Label6: TLabel;
  37.     DBLookupComboBox4: TDBLookupComboBox;
  38.     Label4: TLabel;
  39.     DBLookupComboBox3: TDBLookupComboBox;
  40.     Label51: TLabel;
  41.     DBLookupComboBox1: TDBLookupComboBox;
  42.     Label19: TLabel;
  43.     BtnBuscarDxSalida: TSpeedButton;
  44.     BtnBorrarDxSalida: TSpeedButton;
  45.     procedure BtnBuscarMotivoEgresoClick(Sender: TObject);
  46.     procedure BtnBorrarMotivoEgresoClick(Sender: TObject);
  47.     procedure BtnBuscarDestinoClick(Sender: TObject);
  48.     procedure BtnBuscarEstadoSalidaClick(Sender: TObject);
  49.     procedure BtnBuscarDestino3047Click(Sender: TObject);
  50.     procedure BtnBuscarDxSalidaClick(Sender: TObject);
  51.     procedure BtnBorrarDestinoClick(Sender: TObject);
  52.     procedure BtnBorrarEstadoSalidaClick(Sender: TObject);
  53.     procedure BtnBorrarDestino3047Click(Sender: TObject);
  54.     procedure BtnBorrarDxSalidaClick(Sender: TObject);
  55.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  56.     procedure FormDestroy(Sender: TObject);
  57.   private
  58.     { Private declarations }
  59.     Retorno : TDatosEgreso;
  60.     Fdm : TdmNotaIngreso;
  61.  
  62.     procedure LimpiarRegistro(Const Cueri : TIBQuery);
  63.     procedure UbicarRegistro(Const Cueri : TIBQuery; Const Registro : Integer);
  64.   public
  65.     { Public declarations }
  66.   end;
  67.  
  68.   function AsignarDatosDeEgresoDelPaciente(Var RegActuales : TDatosEgreso) : Boolean;
  69. var
  70.   FrmDatosEgreso: TFrmDatosEgreso;
  71.  
  72. implementation
  73.  
  74. uses Frm_SearchIB, Dm_Data;
  75.  
  76. {$R *.dfm}
  77.  
  78. function AsignarDatosDeEgresoDelPaciente(Var RegActuales : TDatosEgreso) : Boolean;
  79. var Frm : TFrmDatosEgreso;
  80.     Fdm : TdmNotaIngreso;
  81. begin
  82. Result := False;
  83. Frm := TFrmDatosEgreso.create(nil);
  84. Fdm := TdmNotaIngreso.Create(nil);
  85. try
  86.         //REQ 3988
  87.     frm.dsHist.DataSet := Fdm.t_Historia;
  88.     Fdm.t_historia.Open;
  89.     frm.DSHistoria.DataSet := Fdm.q_Egreso;
  90.     Fdm.q_Egreso.Open;
  91.     frm.DsNuevoDestino.DataSet := Fdm.q_NuevoDestino;
  92.     Fdm.q_NuevoDestino.Open;
  93.     frm.DsNuevaSalida.DataSet := Fdm.q_NuevoEsSalida;
  94.     Fdm.q_NuevoEsSalida.Open;
  95.     frm.DsNuevoDestino3047.DataSet := Fdm.q_NuevoDestino3047;
  96.     Fdm.q_NuevoDestino3047.Open;
  97.     // Frm.UbicarRegistro(Fdm.q_Egreso,RegActuales.MotivoEgreso);
  98.     //Frm.UbicarRegistro(Fdm.q_NuevoDestino,RegActuales.DestinoEgreso);
  99.     // Frm.UbicarRegistro(Fdm.q_NuevoEsSalida,RegActuales.EstadoEgreso);
  100.     //frm.UbicarRegistro(Fdm.q_NuevoDestino3047,RegActuales.Destino3047Egreso);
  101.     Frm.UbicarRegistro(Frm.q_DxSalida,RegActuales.DxEgreso);
  102.    
  103.     //AQUI CAMBIOS POR WILSON
  104.     Result := Frm.ShowModal = mrOK;
  105.     if Result then
  106.       begin
  107.       RegActuales.MotivoEgreso := Frm.DBLookupComboBox1.KeyValue ;                    // Frm.q_Motivo.Fields[0].AsInteger;
  108.       RegActuales.DestinoEgreso:= Frm.DBLookupComboBox3.KeyValue ;              //Frm.q_Destino.Fields[0].AsInteger;
  109.       RegActuales.EstadoEgreso := Frm.DBLookupComboBox4.KeyValue;            //Frm.q_EstadoSalida.Fields[0].AsInteger;
  110.       RegActuales.Destino3047Egreso := Frm.DBLookupComboBox5.KeyValue;    //Frm.q_Destino3047.Fields[0].AsInteger;
  111.       RegActuales.DxEgreso    := Frm.q_DxSalida.Fields[0].AsInteger;      // lo Comentado valida los registros por buscadores
  112.     end;
  113.    
  114.     // FIN CAMBIOS POR WILSON
  115. finally
  116.   Frm.Free;
  117.   Fdm.Free;
  118. end;
  119. end;
  120.  
  121. procedure TFrmDatosEgreso.BtnBuscarMotivoEgresoClick(Sender: TObject);
  122. var Registro : integer;
  123. begin
  124. Registro := BuscarIb(Fdm.q_Egreso.Transaction,'MOTIVO_EGRESO','COD_MOTIVO','DES_MOTIVO','ID_MOTIVO');
  125. if Registro > 0 then
  126.   UbicarRegistro(Fdm.q_Egreso,Registro);
  127. end;
  128.  
  129. procedure TFrmDatosEgreso.UbicarRegistro(const Cueri: TIBQuery;
  130.   const Registro: Integer);
  131. begin
  132. Cueri.Close;
  133. Cueri.Params[0].AsInteger := Registro;
  134. Cueri.Open;
  135. end;
  136.  
  137. procedure TFrmDatosEgreso.BtnBorrarMotivoEgresoClick(Sender: TObject);
  138. begin
  139. LimpiarRegistro(Fdm.q_Egreso);
  140. end;
  141.  
  142. procedure TFrmDatosEgreso.BtnBuscarDestinoClick(Sender: TObject);
  143. var Registro : integer;
  144. begin
  145. Registro := BuscarIb(Fdm.q_NuevoDestino.Transaction,'DESTINO_SALIDA','COD_DESTINO_SALIDA','DES_DESTINO_SALIDA','ID_DESTINO_SALIDA');
  146. if Registro > 0 then
  147.   UbicarRegistro(Fdm.q_NuevoDestino,Registro);
  148. end;
  149.  
  150. procedure TFrmDatosEgreso.BtnBuscarEstadoSalidaClick(Sender: TObject);
  151. var Registro : integer;
  152. begin
  153. Registro := BuscarIb(Fdm.q_NuevoEsSalida.Transaction,'ESTADO_SALIDA','COD_ESTADO_SALIDA','DES_ESTADO_SALIDA','ID_ESTADO_SALIDA');
  154. if Registro > 0 then
  155.   UbicarRegistro(Fdm.q_NuevoEsSalida,Registro);
  156. end;
  157.  
  158. procedure TFrmDatosEgreso.BtnBuscarDestino3047Click(Sender: TObject);
  159. var Registro : integer;
  160. begin
  161. Registro := BuscarIb(Fdm.q_NuevoDestino3047.Transaction,'TBL_DESTINO_3047','CODIGO','DESCRIPCION','ID_DESTINO_3047');
  162. if Registro > 0 then
  163.   UbicarRegistro(Fdm.q_NuevoDestino3047,Registro);
  164.  
  165.  
  166. end;
  167.  
  168. procedure TFrmDatosEgreso.BtnBuscarDxSalidaClick(Sender: TObject);
  169. var Registro : integer;
  170. begin
  171. Registro := BuscarIb(q_DxSalida.Transaction,'Cie9_DetRips','Cod_Cie9','Des_Cie9','Id_Cie9');
  172. if Registro > 0 then
  173.   UbicarRegistro(q_DxSalida,Registro);
  174.  
  175.  
  176. end;
  177.  
  178. procedure TFrmDatosEgreso.LimpiarRegistro(const Cueri: TIBQuery);
  179. begin
  180. Cueri.Close;
  181. end;
  182.  
  183. procedure TFrmDatosEgreso.BtnBorrarDestinoClick(Sender: TObject);
  184. begin
  185. LimpiarRegistro(Fdm.q_NuevoDestino);
  186. end;
  187.  
  188. procedure TFrmDatosEgreso.BtnBorrarEstadoSalidaClick(Sender: TObject);
  189. begin
  190. LimpiarRegistro(Fdm.q_NuevoEsSalida);
  191. end;
  192.  
  193. procedure TFrmDatosEgreso.BtnBorrarDestino3047Click(Sender: TObject);
  194. begin
  195. LimpiarRegistro(Fdm.q_NuevoDestino3047);
  196. end;
  197.  
  198. procedure TFrmDatosEgreso.BtnBorrarDxSalidaClick(Sender: TObject);
  199. begin
  200. LimpiarRegistro(q_DxSalida);
  201. end;
  202.  
  203. procedure TFrmDatosEgreso.FormClose(Sender: TObject;
  204.   var Action: TCloseAction);
  205. begin
  206. Action := cafree;
  207. end;
  208.  
  209. procedure TFrmDatosEgreso.FormDestroy(Sender: TObject);
  210. begin
  211. // FrmDatosEgreso := nil;
  212. end;
  213.  
  214. end.




Edito: Si te sigue sacando el Access Violation, intenta quitando o comentando la línea (FrmDatosEgreso := nil) del evento OnDestroy del formulario;


Saludos
  • 0

#16 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 03 agosto 2011 - 12:55

CON EL NUEVO CAMBIO SALE EL MISMO ERROR DEL PRINCIPIO
  • 0

#17 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 03 agosto 2011 - 01:16

No olvides poner el evento OnCloseQuery:




delphi
  1. procedure TFrmDatosEgreso.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  2. begin
  3.   if ModalResult = mrOk then
  4.     CanClose :=
  5.       DBLookupComboBox1.KeyValue <> null and
  6.       DBLookupComboBox3.KeyValue <> null and
  7.       DBLookupComboBox4.KeyValue <> null and
  8.       DBLookupComboBox5.KeyValue <> null;
  9.       if not CanClose then
  10.       Shoowmessage('Faltan datos')
  11. end;




Si te sigue sacando el Access Violation, intenta quitando o comentando la línea (FrmDatosEgreso := nil) del evento OnDestroy del formulario;
  • 0

#18 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 03 agosto 2011 - 01:32

me funciono muy bien gracias por tu ayuda, abusando de ti quisiera que em ayudaras con otra falla que tengo en el mismo form.

tengo un AdvGlowButton CANCELAR que me esta haciendo el mismo procedimiento que ACEPTAR no tienen ningun evento asociado
me imprime el mensaje de que debe llenar todos los campos
  • 0

#19 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 03 agosto 2011 - 02:28

me funciono muy bien gracias por tu ayuda, abusando de ti quisiera que em ayudaras con otra falla que tengo en el mismo form.

tengo un AdvGlowButton CANCELAR que me esta haciendo el mismo procedimiento que ACEPTAR no tienen ningun evento asociado
me imprime el mensaje de que debe llenar todos los campos



Selecciona el botón cancelar, ve al Object Inspector y coloca la propiedad ModalResult a mrCancel y la propiedad Cancel a True.


También puedes mejorar un poco el evento OnCloseQuery así, para que solamente  muestre el mensaje si ModalResult  devuelve MrOk :




delphi
  1. procedure TFrmDatosEgreso.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  2. begin
  3.   if ModalResult = mrOk then
  4.   begin
  5.     CanClose :=
  6.       DBLookupComboBox1.KeyValue <> null and
  7.       DBLookupComboBox3.KeyValue <> null and
  8.       DBLookupComboBox4.KeyValue <> null and
  9.       DBLookupComboBox5.KeyValue <> null;
  10.       if not CanClose then
  11.       Showmessage('Faltan datos')
  12. end;
  13. end;








Saludos
  • 0

#20 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 03 agosto 2011 - 02:51

Te comento que con el nuevo codigo me sale la falla del access viloation
  • 0




IP.Board spam blocked by CleanTalk.