PDA

Ver la Versión Completa : Problemas con informe Qreport


eddvedder
13-11-2008, 03:31:12
Hola
no soy un experto en Delphi, tengo un problema con un sistema que usa quickrepot para los informes, resulta que el sistema en windows 98, funciona correctamente, muestra todos los informes sin importar la cantidad de hojas que tenga. El problema se da cuando el sistema está instalado en Windows XP, si el informe tiene muchas hojas se cae y sale un error: "violation at address 0000000....". Lo malo es que este sistema está funcionando correctamente en un sólo equipo con XP (el cual tiene instalado el Delphi 5 completo), que puede ser?, un problema de manejo de memoria? no se que puede ser..... algún samaritano que me pueda ayudar por favor........:o:o:D

coso
13-11-2008, 11:34:35
hola,
es un problema de manejo de memoria. Estas intentando acceder a algo que no existe o esta liberado (0x000000 es un 'null pointer'). saludos.

eddvedder
13-11-2008, 15:34:42
gracias por responder
lo malo es que este problema sí se pudo solucionar en un equipo con XP (necesito saber de qué manera fue), de que forma soluciona esto del manejo de memoria, me dijeron que puede ser que se requiera aumentar el tamaño a algun archivo de sistema o agregrar alguna variable local o global, por que me dijeron que algo asi habia solucionado el problema?

hecospina
13-11-2008, 17:05:45
Hola
Yo he tenido problemas para imprimir en impresoras HP multifuncionales, me sale un error parecido, mira si cambiando de impresora predeterminada te funciona, puedes intalar LX300

tambien puedes ampliar el manejo de memoria desde le bde admin desde la pestaña Configuration-System-INIT

alli yo configuro de la siguiente forma
LOW MEMORY USAGE LIMIT 64
MAXBUFSIZE 4096
MEMSIZE 32
MINBUFSIZE 128
SHAREDMEMLOCATION 5BDE
SHAREDMEMSIZE 4096

Prueba y nos cuentas

coso
13-11-2008, 17:21:47
hola, es probable que te falte alguna .dll que si este instalada donde esta delphi. saludos.

Lepe
13-11-2008, 17:30:54
El problema es viejo y conocido.

La variable de entorno temp en winXP excede de 32 caracteres, y ahí está el problema. Cuando quickReports necesita crear archivos temporales para mostrar un informe grande, solo maneja rutas de menos de 32 caracteres.

Edito: Creo que QR 4 ya corrige ese fallo. Al menos el QR que viene con delphi 6 sí está afectado, por ende, delphi 5 también.

Al inicio de tu aplicación, llama esta rutina que cambiará la variable de entorno TEMP y TMP para tu programa nada más.

procedure SetEnviroment();
begin
ForceDirectories(AssertBackSlash(GetWinDir)+ 'TEMP\temp');
if not SetEnvironmentVariable(PChar('TEMP'), PChar(AssertBackSlash(GetWinDir)+ 'TEMP\temp')) then
Raise Exception.Create('No se ha podido crear el directorio temporal (TEMP) para los informes');

ForceDirectories(AssertBackSlash(GetWinDir)+ 'TEMP\tmp');
if not SetEnvironmentVariable(PChar('TMP'), PChar(AssertBackSlash(GetWinDir)+ 'TEMP\tmp')) then
Raise Exception.Create('No se ha podido crear el directorio temporal (TMP) para los informes');

end;

Necesitas adaptarla:
AssertBackSlash pone la última barra en una carpeta, delphi tiene una rutina parecida.

GetWinDir es una función que devuelve la ruta de instalación de windows.

eddvedder
21-11-2008, 06:01:22
hola gracias por la ayuda
probé lo de la configuración del bde y creo que solucionó el problema del acceso a memoria, lo que si se me olvidó mencionar ES que no tengo acceso al código fuente del sistema por lo que no puedo hacer cambios. Lo que s,i es que ahora necesito compactar las bases de datos (manualmente por lo de no contar con el CF) ¿cómo lo puedo hacer? borrar los indices (como se haría esto?), alguien me podría decir alguna forma (no mediante codigo) de que las consultas sean optimizadas, por cierto no se la versión de QR, pero es el Delphi 5.
De antemano muuuuuchas gracias
Saionara

Lepe
21-11-2008, 10:50:55
para quitar ese error, vete a panel de control -> sistema -> opciones avanzadas -> variables de entorno

Tanto la que se llama TEMP como TMP cambiale su valor a una ruta con menos de 32 caracteres, por ejemplo:

TEMP = C:\WINDOWS\TEMP
TMP = C:\WINDOWS\TMP

Saludos

hecospina
21-11-2008, 16:53:48
Hola
No se que quieres decir con compactar la base de datos
Pero lo de los indices puedes repararlos con una herramienta llamada DTUtil32, creo que se instala con delphi, con esta herramienta se verifican en la tablas los datos y los indices

Lepe
21-11-2008, 18:35:37
Haz copia de seguridad antes de tocar la base de datos, en algunos casos me la ha corrompido.

Tambien trae opcion para compactar (borrar físicamente los registros marcados como borrados y liberar ese espacio de las tablas).

Saludos

eddvedder
21-11-2008, 21:02:09
hola
gracias voy a probar la herramienta que me dices y te cuento como me fue.

PD: quizás el concepto "compactar" estuvo mal utilizado de mi parte, la idea es optimizar el tiempo de respuesta al pedir un informe.

Lepe
21-11-2008, 23:30:03
En realidad he supuesto que trabajas con Paradox, por aquello de usar Delphi 5 y QuickReports... tenía toda la pinta de que tu base de datos fueran archivos de extensión .db y en ese sentido interpreté Compactar como borrar los registros. También se usa esa palabra para Access.

La optimización de un informe está muy relacionado con la cantidad de folios que vaya a generar (cantidad de registros) así como los índices creados en la base de datos y la sentencia SQL usada. El sql vendría a ser algo así (para imprimir la típica agenda de clientes):


SELECT NOMBRE, APELLIDO, DIRECCION
FROM CLIENTES

Lo comento por si has visto algo parecido en un fichero de texto de la aplicación, o incluso en alguna parte del programa.

Para crear índices necesitas saber la sentencia SQL y suele estar integrado en el código fuente de la aplicación. Es imposible adivinar cómo lo hizo el programador :(.

Edito: (Suponiendo que tu base de datos sea paradox, dbase, o alguna similar)
El ordenador que tiene delphi instalado, tendrá en inicio -> todos los programas -> Borland -> database desktop. Con esa última herramienta quizás puedas abrir las tablas de tu base de datos (haz copia de seguridad antes de tocar :)) y así ver si en alguna tabla tiene el SQL para las consultas. También desde el database desktop podrías crear los índices en las tablas para agilizar las consultas.

Saludos y suerte ;)