PDA

Ver la Versión Completa : Problemas al cerrar con boton


The Cid James
04-12-2017, 00:25:58
Buenas gente tengo este botón que llama a un form que me da a elegir el modo de pago

procedure Tfventa.BVaceptarClick(Sender: TObject);
begin
fmodulo.tVenta.Insert;
fmodulo.qFechahora.Active := true;
fmodulo.qFechahora.Open;
fmodulo.tProductos.Edit;
if idcliente = 0
then
begin
application.MessageBox(pchar('Solo Clientes Registrados pueden pagar con credito'),
pchar('ERROR'), (MB_OK + MB_ICONINFORMATION));
fmodulo.tVenta['id_cliente'] := 1;
fpago.BPcredito.Enabled := false;
Tfpago.Create(self).ShowModal;
end
else
begin
fmodulo.tVenta.Insert;
fmodulo.tVenta['id_cliente'] := idcliente;
tfpago.Create(self).ShowModal;
end;
end;

En el form que llamo solo tengo 3 botones.
1- si el cliente paga en efectivo
2- si el cliente paga con crédito
3- con el botón cerrar

Ahora bien, todo funciona normalmente a menos que cancele la operacion
en el boton cancelar solo tengo esto

procedure Tfpago.BPcancelarClick(Sender: TObject);
begin
Self.Close;
end;


ahora el problema surge cuando al cerrar el segundo form, quiero volver a abrir el form de modo de pago, me dice que tiene una excepción sql y que los datos not null de la base de datos no pueden ser nulos. pero no estoy cerrando ningún dataset al cerrar el segundo form ni nada parecido, solo cerrando el form por lo cual los datos deberian seguir como estan hasta el momento. Ademas el post a la base de datos lo tengo en el boton de pago en efectivo y credito.

procedure Tfpago.BPefectivoClick(Sender: TObject);
begin
fmodulo.tVenta['fecha'] := fmodulo.qFechahora['fecha'];
fmodulo.tVenta['hora'] := fmodulo.qFechahora['hora'];
fmodulo.tVenta['total_venta'] := fmodulo.Qtotal.Fields.FieldByName('Total').AsString;
fmodulo.tProductos['Stock'] := fmodulo.tProductos ['Stock'] - fmodulo.tVentadetalle['cantidad'];
if fventa.idcliente = 0
then
begin
fmodulo.tVenta['id_cliente'] := 1;
end
else
begin
fmodulo.tVenta['id_cliente'] := fventa.idcliente;
end;
fmodulo.tVenta.Post;
fmodulo.qventadetalle.Close;
fmodulo.qFechahora.Active := false;
fmodulo.tVenta.Active := false;
fmodulo.qProductos.Active := false;
fmodulo.qventadetalle.Active := false;
fmodulo.tProductos.Active := false;
Close;
fventa.Close;
end;

Ñuño Martínez
04-12-2017, 19:20:26
¿Estás seguro de que al cerrar o abrir una u otra ventana no estás, también, cerrando o cambiando algo en la base de datos? Lo digo porque muchas veces ponemos algo en un evento "onClose" y luego se nos olvida. También hay que tener en cuenta que hay muchos componentes implicados en una consulta. Un TSQLTransaction puesto donde no es puede cerrarte una conexión o hacerte un roll-back si se destruye antes de tiempo, por ejemplo.

La verdad, no sé qué comentarte, salvo decirte que todos los componentes implicados en el trabajo de la base de datos deberían estar en otro objeto fuera de las ventanas (por ejemplo, en un TData).

The Cid James
04-12-2017, 22:46:10
No nada de echo el unico evento que tengo el form principal es el formcreate con esto que no tiene nada que ver

begin
DTPfecha.Date := now;
fmodulo.qnumventa.Active := true;
fmodulo.Qtotal.Active := true;
if fmodulo.qnumventa.Fields.FieldByName('id_venta').IsNull
or (not TryStrToInt(Endeventa.Text, numventa))
then
numventa := fmodulo.qnumventa.fields.FieldByName ('id_venta').AsInteger + 1;
Endeventa.Text := IntToStr(numventa);
if fmodulo.Qtotal.IsEmpty
then
Eventatotal.Text := '0'
else
fmodulo.Qtotal.ParamByName('idv').AsInteger := numventa;
fmodulo.Qtotal.Open;
fmodulo.Qtotal.Refresh;
Eventatotal.Text := fmodulo.Qtotal.Fields.FieldByName('Total').AsString;
end;


En ningun momento toco la consulta de la fecha que es la que me esta generando problemas
Ademas cierro las consultas y demas una vez que se "paga" no tengo nada ahi mas que 3 botonos y ningun evento en el segundo form.
Con respecto a las componentes estoy usando zeos con dataset y consulta nada mas que se activan al abrir el primer form y como dije no se cierran hasta que se hace efectivo el pago. No deberia cerrarse nada si no se hace efectivo el pago

The Cid James
05-12-2017, 05:51:18
Al final lo termine haciendo con un checkboxlist dentro del mismo form porque no encontre el error gracias por la ayuda :)