Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema recursos ??? (https://www.clubdelphi.com/foros/showthread.php?t=12360)

chele 14-07-2004 10:19:35

Problema recursos ???
 
Tengo un codigo de generacion de facturas muy grande donde me da errores extraños.

Lo curioso es que si lo voy parando y le voy dando cada vez que hace una factura a F8 entonces no da ningun error y funciona perfectamente .... por eso se me ocurrio que puede ser por que el sistema se queda sin recursos y necesita "esperar" o algo similar cada X facturas.

Hay alguna forma de parar la ejecuccion del programa durante 2 segundos o similar y que despues siga ejecutandose normalmente ???

El problema me lo da con un :

qryProva.UpdateObject := datamodule2.updFacturasCias;

Pero como digo no lo da siempre si no a veces.

Gracias anticipadas.

Nuria 14-07-2004 11:12:17

Hola Chele!

Prueba con : Application.ProcessMessages;

Mira este hilo ProcessMessages

Suerte!

Saludos ;).

chele 14-07-2004 11:43:16

Pues no era eso ... me sigue dando el error.

el codigo es este :

qryProva := TIBQuery.create(qryProva);
qryProva.database := datamodule2.database;
qryProva.transaction := datamodule2.transaction;
qryProva.UpdateObject := datamodule2.updFacturasCias;
qryProva.Sql.text := 'Select * from facturascias';
qryProva.Open;
qryProva.Append;

Y el error lo da en qryProva.UpdateObject := datamodule2.updFacturasCias;

Pero no lo da siempre ... ¿alguna idea de por que peude ser?.

El error es generico del ejecutable

delphi.com.ar 14-07-2004 15:29:25

Cita:

Empezado por chele
...me sigue dando el error...

¿Cuál es "el error"?

chele 14-07-2004 16:06:57

El error es :

Project Interiura.exd raised exception class EAccessViolation whit message "Violacion de acceso a la direccion 004ADAB7 en el modulo 'Interiura.exe'. Leer de direccion 0000001B' PRocess stopped. Use step or run to continue

Pero es un bucle y entra muchas veces, por eso no entiendo pro que da este error.

Sorry por no decir el error desde el principio, se me paso :(

marcoszorrilla 14-07-2004 16:54:54

Pues convendría que pusieras el código que se encuentra dentro de ese bucle, probablemente no liberas algún objeto y lo creas de nuevo en cada entrada?

Un Saludo.

chele 14-07-2004 17:05:53

Gracias por ayudar, aqui os pongo el codigo a ver si veis el error ...

Código:

procedure TfrmGenFac1.BitBtn1Click(Sender: TObject);
var
f : textfile;
fiva : textfile;
cadenaSQL, vdata2, prova, vsAux, vLinia: string;
qry, qry2, qryProva: TIBQuery;
comptador, vcuentacontable, vfecha, vhora, vRazon, vRazon2: string;
vIVA, vBASE, vImpext, vraux : real;
vFPDeposito : boolean;
numApunt, numApuntDiari : integer;

begin
try
AssignFile(f,Edit3.text);
Rewrite(f);
AssignFile(fiva,Edit4.text);
Rewrite(fiva);

except
showmessage('Archivo incorrecto o ruta no válida');
exit;
end;



if RadioButton1.Checked then
begin
cadenaSQL := 'select H.codcia, C.NIF, H.codhoncia, H.codexp, H.tothonor, C.TipoIVA, C.Idioma, C.cuentacontable, C.formapago, C.nombre from honorcias H inner join Compania C '
+ 'on H.codcia = C.codcompania where'
+ ' H.codcia = "' + edit1.text
+ '" and cast(fcierre as date) >= ' + quotedStr(FormatDateTime('mm/dd/yyyy',DFInicial.date))
+ ' and cast(fcierre as date) <= ' + quotedStr(FormatDateTime('mm/dd/yyyy',DFFinal.date))
+ ' and Facturados = "N"';
end;


if RadioButton2.Checked then
begin
cadenaSQL := 'select H.codcia, C.NIF, H.codhoncia, H.codexp, H.tothonor, C.TipoIVA, C.Idioma, C.cuentacontable, C.formapago, C.nombre from honorcias H inner join Compania C '
+ 'on H.codcia = C.codcompania where'
+ ' cast(fcierre as date) >= ' + quotedStr(FormatDateTime('mm/dd/yyyy',DFInicial.date))
+ ' and cast(fcierre as date) <= ' + quotedStr(FormatDateTime('mm/dd/yyyy',DFFinal.date))
+ ' and Facturados = "N"';
end;

try

datamodule2.tblParamFac.open();

qry := TIBQuery.Create(qry);
qry.database := datamodule2.database;
qry.transaction := datamodule2.transaction;
Qry.SQL.Text := cadenaSQL;
qry.open();
qry.FetchAll;

if qry.RecordCount = 0 then
begin
Showmessage('No hay Registros a Facturar en el intervalo seleccionado.');
freeandnil(qry);
// raise exception.create('No hay Registros a Facturar en el intervalo seleccionado.');
end
else
begin
qry.first;
while not qry.EOF do { Cycle until EOF is True }
begin

vCuentaCOntable := qry.fields[7].value;

if qry.fields[8].AsString = 'Compañía' then // FormaPago
vimpext := 0
else
vimpext := CalculGastosExternos(qry.fields[3].value);

vRazon := qry.fields[9].value;

if not varisnull(qry.fields[5].value) then
vIVA := unitproc.Round_nDec(qry.fields[4].value * qry.fields[5].value / 100,2)
else vIVA := 0;

vBASE := qry.fields[4].value + vIVA;

vfecha := FormatDateTime('dd/mm/yyyy',now);
vhora := timetostr(time);

TRY



qryProva := TIBQuery.create(qryProva);
qryProva.database := datamodule2.database;
qryProva.transaction := datamodule2.transaction;
qryProva.UpdateObject := datamodule2.updFacturasCias;
qryProva.Sql.text := 'Select * from facturascias';
qryProva.Open;
qryProva.Append;

qryProva.FieldByName('codfac').asstring := inttostr(unitproc.ComptadorFacCias);
qryProva.FieldByName('codcia').Value := qry.fields[0].value;
qryProva.FieldByName('nif').Value := qry.fields[1].value;
qryProva.FieldByName('codhonor').Value := qry.fields[2].value;
qryProva.FieldByName('femision').asstring := FormatDateTime('dd/mm/yyyy',DFEmision.date);
qryProva.FieldByName('codexp').asstring := qry.fields[3].asstring;
qryProva.FieldByName('importe').asstring := qry.fields[4].asstring;
if not varisnull(qry.fields[5].value) then qryProva.FieldByName('porciva').asstring := qry.fields[5].value
else qryProva.FieldByName('porciva').asstring := '0';
qryProva.FieldByName('gastosext').asstring := floattostr(vIMPEXT);
qryProva.FieldByName('iva').asstring := floattostr(vIVA);
qryProva.FieldByName('base').asstring:= floattostr(vBASE);
qryProva.FieldByName('totfac').asstring:= floattostr(vBASE + vIMPEXT);
qryProva.FieldByName('Idioma').asstring := qry.fields[6].value;
qryProva.FieldByName('CtaGastos').Value := datamodule2.tblParamFacCTAINGRESOS.value;
qryProva.FieldByName('CtaIva').Value := datamodule2.tblParamFacCTAIVACIAS.value;
qryProva.FieldByName('CtaDeudora').Value := datamodule2.tblParamFacCTADEUDORES.value;
qryProva.FieldByName('Iban').Value := datamodule2.tblParamFacIBAN.value;
qryProva.FieldByName('Bic').Value := datamodule2.tblParamFacBIC.value;
qryProva.FieldByName('Cta').Value := datamodule2.tblParamFacCuenTA1.value + '-' + datamodule2.tblParamFacCuenTA2.value + '-'
+ datamodule2.tblParamFacCuenTA3.value + '-' + datamodule2.tblParamFacCuenTA4.value;
qryProva.FieldByName('Banco2').Value := datamodule2.tblParamFacBANCO.value;
qryProva.FieldByName('DiasVenc').asstring := datamodule2.tblParamFacDIASVENC.asstring;
qryProva.FieldByName('hum').AsString := timetostr(time);
qryProva.FieldByName('fum').asstring := datetostr(date);
qryProva.FieldByName('uum').asstring := vusuari;

lblMarquee.caption := 'Factura nº ' + qryProva.FieldByName('codfac').asstring;
lblMarquee.Repaint;

qryProva.Post;




// AQUI VA UN CODIGO MUUUY LARGO DE ESCRIBIR EN UN TXT QUE SE ENVIA AL BANCO.



finally
freeandnil(qryProva);
end;

// MARCAR FACTURAT
try

cadenaSQL := 'update honorcias set Facturados = "S", fvto = "' + FormatDateTime('mm/dd/yyyy',DFEmision.date) + '", '
+ 'ffact = "' + FormatDateTime('mm/dd/yyyy',DFEmision.date) + '"'
+ 'where codhoncia = ' + qry.fields[2].value;
qry2 := TIBQuery.Create(qry2);
qry2.database := datamodule2.database;
qry2.transaction := datamodule2.transaction;
Qry2.SQL.Text := cadenaSQL;

Qry2.Prepare;
Qry2.execsql;
Qry2.unPrepare;

qry2.Transaction.CommitRetaining;

finally
freeandnil(qry2);
end;

qry.Next; { EOF False on success; EOF True when Next fails on last record }

end;
end;

finally
freeandnil(qry);
CloseFile(f);
CloseFile(fiva);
end;

FacturasGastosExternos;

end;


chele 15-07-2004 10:51:59

Nadie sabe que podria ser ???

jachguate 15-07-2004 16:34:40

Creo que la falta de respuestas se debe a varios factores:
  • Has publicado una cantidad grande de código
  • Aunque has usado la etiqueta CODE, el fuente no está indentado, con lo que su lectura se hace imposible
  • Seria mucho mejor si lo publicas con la etiqueta DELPHI (que resalta la sintaxis)
  • Si ya sabes donde ocurre el problema, podes intentar quitar partes no relevantes de la función, si no tenes idea, dejala completa, pero indentada, para que quien tenga la intención de ayudarte, la tenga mas facil.
  • Es recomendable no publicar líneas de código de mas de 80 caracteres... que ya ves que no caben en ningún monitor. Incluso yo, que uso 1280x1024 tendria que ir (por mucho) a la derecha.
  • Con los 67 mensajes que llevas, es de esperar que ya supieras todo esto...:(

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 23:48:47.

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