Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Aplicación con paradox me pierde los datos (https://www.clubdelphi.com/foros/showthread.php?t=20787)

jomanaar 25-04-2005 20:57:42

Aplicación con paradox me pierde los datos
 
Hola a todos, tengo un problema y no se por donde empezar.
Realicé una aplicación muy simple que imprime tikets y almacena en tablas paradox los datos de los ya mencionados tikets.
La aplicación tiene dos formas de guardar la información. Una almacena los datos en una tabla y la otra almacena los datos en dos tablas y luego los imprime.
El problema es que en un principio todo marcha bien, pero cuando lleva unos cuantos registros almacenados, al dar a guardar y imprimir borra de las tablas todo lo que se habia guardado en esa sesión.
El ordenador donde tengo el programa instalado, lo he formateado y le he instalado el XP, el gestor BDE, y el programita en cuestión.
Primero, cuando se crea el formulario principal, abro las tablas así:
Código:

exepath:=extractfilepath(paramstr(0));

Table1.TableName:=exepath+'preus.db';

Table1.Open;

Table2.TableName:=exepath+'altres.db';

Table2.Open;

Table3.TableName:=exepath+'factures.db';

Table3.Open;

Table4.TableName:=exepath+'facturesb.db';

Table4.Open;


Aquí podeis ver el código del método que solo guarda:
Código:


if suma<>0 then begin

table4.Append;

table4.FieldByName('datab').AsDateTime:=now;

table4.FieldByName('totalb').AsFloat:=suma;

table4.Post;

listbox1.Clear;

edit1.Clear;

suma:=0;

end;


Y aquí el que guarda e imprime (Que creo que es el que falla)
Código:

var

f:textfile;

i:integer;

begin

if suma<>0 then begin

table3.Append;

table3.FieldByName('data').AsDateTime:=now;

table3.FieldByName('total').AsFloat:=suma;

table3.Post;

table4.Append;

table4.FieldByName('datab').AsDateTime:=now;

table4.FieldByName('totalb').AsFloat:=suma;

table4.Post;



Assignfile(f,'LPT1');

rewrite(f);

writeln(f,inttostr(table3.FieldByName('cod_fac').AsInteger));
writeln(f,' ');

...

writeln(f,'-------------------');

writeln(f,' ');

for i:=0 to listbox1.Items.Count-1 do

writeln(f,listbox1.items[i]);

writeln(f,' ');

writeln(f,'-------------------');

writeln(f,' ');

writeln(f,'TOTAL '+edit1.text+' '+chr(238));

writeln(f,' ');

writeln(f,'IVA INCLUIDO');

writeln(f,' ');

writeln(f,datetostr(now));

...

closefile(f);

listbox1.Clear;

edit1.Clear;

suma:=0;

end;

end;


Gracias por vuestras respuestas. :)

marcoszorrilla 25-04-2005 21:38:22

Te falta para asegurarte la grabación poner en el vento AfterPost del Ttable
Código Delphi [-]
 Table1.FlushBuffers;

Un Saludo.

Pablo Carlos 25-04-2005 23:04:37

Aquí podeis ver el código del método que solo guarda:
Código:



table4.Post;
listbox1.Clear;
edit1.Clear;
suma:=0; // este valor lo tomas del edit1?
end;
[/quote]

Hasta aquí lo entiendo... Comparto lo de marcoszorrilla
Cita:

Y aquí el que guarda e imprime (Que creo que es el que falla)
Código:

var
f:textfile;
i:integer;
begin
if suma<>0 then begin
table3.Append;
table3.FieldByName('data').AsDateTime:=now;
table3.FieldByName('total').AsFloat:=suma;
table3.Post;
table4.Append;
table4.FieldByName('datab').AsDateTime:=now;
table4.FieldByName('totalb').AsFloat:=suma; // si el valor lo tomas del edit1 en el post de la table4 lo borras?
table4.Post;
listbox1.Clear;
edit1.Clear;
suma:=0;
end;


Lo único que no entiendo es lo que te agregue en el código, ¿el valor de suma lo tomas del edit1? si es así, me parece que lo borras antes del post de la table3.-
Revisa ese detalle, si es que no me equivoco :D
Saludos

jomanaar 26-04-2005 13:15:07

Hola de nuevo,

Suma es una variable global. No coge su valor del edit1, sino que el edit1 muestra por pantalla el valor de suma, por eso una vez guardado el tiket borro el edit1 y pongo la variable global suma a cero.

Pablo Carlos 27-04-2005 01:00:55

Hola... no entiendo :confused: pero si suma es una variable (me imagino con un dato o importe) y luego de guardar los datos por primera vez pones a suma a 0 ¿cómo encuentra el valor <> a 0 en el segundo guardado e impresión? :confused: :confused:
Saludos

jomanaar 04-05-2005 12:05:27

Bueno, he tardado unos dias en contestar porque el problema algunas veces salía y otras no. Pero quiero decir que la primera respuesta a mi consulta era la acertada. Y el hecho que en un ordenador fallara y en otro no, creo que se debía a problemas con la impresora de tickets. Por eso solo fallaba cuando se le daba a imprimir. En resumen el problema se ha resuelto.

En referencia a lo de la variable global suma, quiero aclarar que los dos procedimientos son diferentes. con un botón se ejecuta uno y con otro boton diferente se ejecuta el otro. Así que lo que pase en uno de ellos no afecta al otro. No se si me he esplicado...:D Que los dos a la vez no funcionan nunca.


La franja horaria es GMT +2. Ahora son las 08:41:11.

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