PDA

Ver la Versión Completa : Problemas al correr Aplicacion


FelipeDiaz
02-05-2007, 20:25:42
Hola a todos.

Tengo un problema con una aplicacion que desarrolle en Delphi.
Ella accesa a una base de datos de Paradox y viene funcionando desde hace dos años bien, sin mayor problema.

Hace una semana de un momento a otro cuando el usuario dio Click al icono para correrla, no aparecio el formulario principal ni ningun otro.

La estuve revisando bajo el entorno de Delphi desde mi PC, y sucede igual, la ejecuto y veo compilar normalmente, pero nunca aparece ningun objeto visible. Aparentemente la aplicacion esta siendo ejecutada pues el boton de ejecutar.. esta inecativo, me toca ssupender con Controil + F2.

Cuando intento abrir los formularios uno por uno.... se bloquea Delphi por completo.

Este problema desaparece cuando reemplazo la base de datos por una copia que realice varios dias atras. Lo raro es que Delphi nunca me indica que hay error en la BD.

No se que hacer. Se que una solucion practica es dejar la copia anterior y cargar toda al informacion nueva. Pero no estoys egurom que esto no vuelva a pasar.

De casi 50 tablas no se como hacer para revisarlas y encontrar el posible error.

Ademas no se si es que llegue a un maximo de registros de paradox (2 billones) no creo. El codigo esta bien pues ha funcionado por dos años sin problema. Aqui permitanme utilizar la conocida frase "Ohh y ahora Quien podra Ayudarme" .... Si no es el chapulin...por favor alguien que sepa.

Otra cosa: Siempre que ejecutan la aplicacion aparecen muchos arcivos consecutivos en el directorio dodne esta el ejecutable con nobres como _QSQ1.MB, _QSQ2.MB, _QSQ3.MB, _QSQ3.MB etc. en una ocasion estos archivos no se borraron y se generaba perdida de datos recien grabados. y en una ocasion llegaron a ser tantos que la sumatoria ocupaba 1,2GB, cosa que me parece absurda.

Agradezco alguien me pueda ilustrar ..sera que estoy dejando de hacer algo?, pues la aplicacion hasata ahora ha sido funcional. es decir el codigo tiene logica y funciona, pero no se si quedan archivos abiertos.


Bueno aquien pueda ayudarme espero que yo haya podido explicar bien.
Agradezco el interes tal ves si a algunso no les ha sucedido aun, les pueda servir la soluciuon que me den.

Saludos a todos, confio que alquien pueda ayudarme.

Felipe.

droguerman
03-05-2007, 01:52:25
que extraño, para descartar problema de la base de datos por que no recreas la estructura nuevamente y copias todos los datos de cada tabla

FelipeDiaz
03-05-2007, 23:43:15
Muchas gracias por tu ayuda.
Luego de tu indicacion...El problema era revisar las 60 tablas que componen la base de datos. Las tabals abrian sin problema por la consola de DATABASE DESTOK.

No se si habia una o varais tablas, pero comence a reemplazar desde el explorador de windows, grupos de tablas y corria el programa, y asi hasta encontrar las tablas o tabla que lo bloqueaban.

Al final la encontre como en la numero 42 de 60. Reemplazando esta, pude rescatar el funcionamiento normnal de la aplicacion.

Lo curioso es que en anteriores ocasiones cuando habia problema de tablas, delphi em enviaba un mensaje.. algo asi como Corrupt File. o Key Violation. pero esta ves solo parecia que corria sin mostrar nada.

Al revisar la tabla que generaba el bloqueo, encontre estas caracteristicas:
1. Si recorria sus registros de arriba a abajo, buscando llegar al final.....nunca terminaba, al parecer los datos se repetian despues de un ciclo pero los indices autocrecientes si cambiaban.
2. Los indices autocrecientes (esos que aparecen en paradox al principio de cada tabla), debian comenzar desde 1, 2, 3, 4 y asi sucesivamente, aqui encontre que comenzaba desde -5, -4, -3, incluso habia uno que no tenia estaba en blanco.

Bueno por si a alguien le pasa.... puede ir a la fija... alguna tabla se daño.

Agradezco tu colaboracion. Ya estaba medio frustrado epnsando que al faya era algun limitante en el software. Pero veo que fue un daño.

Saludos,

Felipe

sitrico
04-05-2007, 01:37:20
Prueba compactar y reindexar todas las tablas (antes haz un respaldo :rolleyes: )

te lo paso como me lo pasaron:


procedure PackPdoxTable(Table: TTable);
var
TableDesc: CRTblDesc;
WasActive: Boolean;
hDatabase: hDbiDB;
begin
WasActive := Table.Active;
Screen.Cursor := crHourglass;
try
// open if it was closed
// (to get the valid DBHandle)
if not WasActive then
Table.Open;
// get the database handle and close the table
hDatabase := Table.DBHandle;
Table.Close;
// fill the table descriptor
FillChar (TableDesc, SizeOf (CRTblDesc), 0);
with TableDesc do
begin
StrPCopy (szTblName, Table.TableName);
StrPCopy (szTblType, szParadox);
bPack := True;
end;
// restructure the table, packing it
if hDatabase <> nil then
Check (DBIDoRestructure (hDatabase, 1,
@TableDesc, nil, nil, nil, False))
else
ShowMessage ('No se encontro el manejador de la BDD');
finally
Screen.Cursor := crDefault;
// eventually reopen
if WasActive then
Table.Open;
end;
end;


Si usas un campo de autoincremento también puedes hacer lo siguiente:

Modifica la estructura da la tabla y pon el campo autoinc como integer, luego compacta la tabla y al final lo vuelves a poner autoinc.