PDA

Ver la Versión Completa : Como vaciar datos de forms


Petolansa
05-12-2007, 15:44:47
Buenas gente les queria haces una consulta, tengo mi programita que de a poco va quedando,tengo un form principal en el cual acedo a las funciones, de factura, remito o albaran como lo llaman en otros lados, presupuesto, etc.
El tema es que bien, los ejecuto, los imprimo si quiero, y todo bien, pero el tema es por ejemplo, realizo una factura, me guarda y se cierra y cuando vuelvo a querer hacer otra estan todavia lo datos de la factura anterior, esto mismo me pasa con los remitos, presupuestos, recios, etc, como descargo todos los forms y los datos. En la mayotia son dgrids asociados a querys, dbedit, edits, dbtext.

Gracias, Saludos!

dec
05-12-2007, 15:54:12
Hola,

Pues, según yo lo veo, o bien preparas algún procedimiento que "limpie" lo que necesites, o bien te aseguras de que al cerrar el formulario en cuestión este es "liberado", de modo que cuando lo precises vuelvas a crearlo. De esta forma, el formulario se mostraría "como nuevo" cuando lo necesites. No sé si me explico. :)

Petolansa
05-12-2007, 17:33:44
Gracias dec, si se entiende, el tema es como liberarlo, yo en un boton qu es el que me gusrda y me cierra el form le puse form1.free;, pero me da error, No se como hacerlo, es porque uso showmodal?

Saludos

dec
05-12-2007, 17:48:11
Hola,

Prueba a liberar el formulario luego de mostrarlo, y desde el mismo sitio en que este se muestra. Es lo que suele hacerse: no hace falta que codifiques nada en el formulario a mostrar y luego cerrar. Puedes usar botones y sus propiedades "ModalResult" para saber cómo se "cerró" el formulario. Ya digo, lo "normal" es hacer algo así:


with TForm2.Create() do
try
if (ShowModal() = mrOk) then
begin
// El formulario se cerró "OK"
end;
finally
// Finalmente liberamos el formulario
Free();
end;


Una cosa más: si tienes el formulario (en el ejemplo "TForm2") de manera que se cree al iniciarse la aplicación, puedes "quitarlo" de la lista, es decir, no es necesario que se cree (probablemente) al inicio de la aplicación, porque, como ves, es posible crearlo cuando sea preciso y liberarlo cuando ya no lo sea.

Petolansa
05-12-2007, 18:58:01
Gracias dec, voy entendiendo, pero no logro hacer que me funcione, agradeceria una manito mas si noe s mucho pedir, esto es lo que intento...

procedure TFrmprincipal.Recibo1Click(Sender: TObject);
begin
with tfrmrecibo.Create() do //Aqui me marca el error
try
if (showmodal()=mrOK) then
begin
query2.Close;
query2.SQL.Clear;
query2.SQL.Add('select contrecibo from contrecibo');
query2.Open;
numrecibo:=query2.Fields[0].AsInteger;
query2.Close;
numrecibo:=numrecibo+1;
frmrecibo.label4.Caption:=inttostr(numrecibo);
end;
finally
free();
end;

Me dice 'not enough actual parameters'
no hay suficientes parametros actuales seria, :confused:

Saludos!

Gabo
05-12-2007, 19:00:24
Otra opción es liberar el formulario al salir, mediante el evento OnClose, así:


Action=caFree; // Código en C++Builder


Es lo que suele hacerse: no hace falta que codifiques nada en el formulario a mostrar y luego cerrar. Puedes usar botones y sus propiedades "ModalResult" para saber cómo se "cerró" el formulario. Ya digo, lo "normal" es hacer algo así:


No sé si es lo que "suele hacerse" o si es "lo normal", pero es como yo lo hago... ;) :D :D :D

dec
05-12-2007, 19:07:38
Hola,

El error que aparece tiene que ver conque, efectivamente, a mí se me olvidó en el código anterior que los contructores de los formularios necesitan un parámetro, cuando menos. Este parámetro determina el "dueño" (owner) del formulario que se va a crear y, bueno, en este caso bien puedes usar "nil" como parámetro, es decir, no asignar ningún "dueño" al formulario. ¿Por qué? Pues porque tú mismo te encargarás de la liberación del formulario acto seguido, así que no hace falta que lo haga nadie más.

:D :D

Petolansa
05-12-2007, 19:52:38
Gracias por la ayuda realmente, no me funiciona, osea no me da error, epor cuando vuelvo a acceder al mismo form los datos siguen ahi, y noto que cuando de ese formulario que llame, llamo a otro, me aparece pero no me trae los datos, a que se debe, eso ocurre desde que lo llamo con tform.create, a que se puede deber esta curiosidad?

Saludos!

Petolansa
05-12-2007, 20:11:59
Gracias de nuevo , lo resolvi de la siguiente manera, no si esta bien, pero funciona


begin
try
recibo:=tfrmrecibo.create(nil); //Como me dijo dec
//abro el query, etc.
frmrecibo.showmodal;
finally
frmrecibo.free;
end;
end;


y los datos que me quedaban colgados en una parte era porque tengo un query activo en otro formulario que cargo el numero de una factura, asi que lo cierro y listo, me aparece vacio.

Otra vez gracias por el tiempo!


Saludos!;)