PDA

Ver la Versión Completa : Ejecutar programa desde cdrom


karlosmc
02-09-2003, 00:21:33
Tengo hecho un programa con Delphi 6, pero tengo la particularidad de que necesito que se ejecute desde el cdrom, sin instalar nada en el disco duro, y no consigo que me funcione. No se si hay que modificar algo en las variables de entorno, o es que no se puede hacer. Agradecería cualquier ayuda.Gracias.

delphi.com.ar
02-09-2003, 00:26:30
No tendría que haber ningún problema, a menos que el programa intente modificar archivos del CD.
¿Qué es lo que hace tu aplicación? ¿Tienes rutas estáticas definidas en el código? ¿Qué herramientas utilizas?

karlosmc
02-09-2003, 00:37:20
La aplicacion son 3 formularios que consultan a una base de datos paradox (.db), y no modifican nada.
Probé a ejecutarlos en un ordenador (desde el disco duro) que no tenia instalado el delphi, y funcionaba. También probé poniendo todos los archivos como de solo lectura, y también funcionaba.
Creo que el problema está en que escribe algún fichero temporal, y no se como hacer para que lo escriba en el disco duro en vez de en en el directorio donde está almacenado el programa.
Gracias

delphi.com.ar
02-09-2003, 00:45:04
Posteado originalmente por karlosmc
...consultan a una base de datos paradox...
Esto era lo que faltaba en tu explicación, seguramente la aplicación esté intentando crear un archivo temporal, desconozco como trabaja paradox, así que lamento no poder ayudarte.
PD: ¿Da algún error?

karlosmc
02-09-2003, 00:50:52
Al ejecutarlo desde el cdrom, da un error. Dice algo así como "Project1 ha generado un error y debe reiniciarse".

Gracias de todas formas por tu ayuda. Saludos

sanxpue
02-09-2003, 02:08:54
La cosa es que siempre cuando jala paradox te va a generar 4 archivos..
Dbdwork,paradox.lck,pdoxurs.lck y pdoxurs.net
el ultimo es el que te esta dando lata entonces lo que debes de hacer es que debes de usar un tsession y decirle que sea C:\temp si no existe que lo cree y se lo debes de poner en la propiedad del TSession en el NetFileDir

Saludos desde Puebla, Mexico
asanxt@hotmail.com

karlosmc
03-09-2003, 23:07:34
Hola. He probado con el objeto Tsesion, y sigue sin funcionarme. No se si lo he hecho bien. He creado el objeto Tsesion y lo he puesto como sesionname en los querys que uso.Me da un error "Exception class EDBEngineError" al inicializar el motor de bases de datos al ejecutarlo. Si quieres, te envío la aplicación y lo miras, a ver si puedes arreglarla. Gracias de todas formas.

Julià T.
04-09-2003, 00:52:25
respondo lo mismo que en otro hilo que acaban de abrir identico a este, aunque no sé si puede ser el motivo.

No sé en el caso de paradox-bde, pero las que yo utilizaba similares a paradox DBIsam, para poder hacer esto, era necesario colocar los componentes de tablas (TTable) en tu caso a ReadOnly.

Por ciero creo que solo con las librerias del bde se generaba un archivo xxxx.lck o parecido (de eso ya hace mucho tiempo)

karlosmc
04-09-2003, 01:12:15
Perdona si te pregunto algo muy trivial, pero no se como hacer que las tablas sean de solo lectura.
Yo utilizo tquery asociado con datasources. No uso ttable. Puede ser ese el problema???
El caso es que ejecutandolo desde el disco duro, me funciona
Gracias por las respuestas.

Julià T.
04-09-2003, 01:57:19
En los TTable hay una propiedad que es ReanOnly (poner true)
En los TQuery hay el equivalente que es RequestLive (poner false)

En el caso de los TQuery, ya viene por defecto RequestLive:=false, pero creo que al utilizar consultas se generan ficheros temporales.

Ignoro si hay algún parámetro de configuración del BDE para cambiar este modo de actuar, ya que hace tiempo que dejé de utilizar el BDE. De hecho tampoco podrias cambiarlo, ya que realmente no tienes instalado el BDE, sino que utiliza las librerias colocandolas en el CD con lo que no tienes una versión completa y totalmente operativa del BDE.

Te expongo una solución según se generen los ficheros

1- Los ficheros se generan en el directorio de las tablas, cuando intentas abrirlas. (no creo que sea el caso) Solución si los ficheros de las tablas son pequeños, moverlos a un directorio temporal y borrarlos al finalizar la aplicación.

2- Los ficheros se generan en el directorio donde esta la aplicación por ser el directorio de trabajo de este. (creo que es el caso y es más facil, ya que casi seguro que el ejecutable es siempre menor que el conjunto de tablas) Solución crear dos ejecutables que uno copie el segundo a un directorio temporal, lo ejecute y al finalizar lo borre.

jafl1965
04-09-2003, 02:06:22
Quizás te sirva este ejemplo:

Session.NetFileDir := GetEnvironmentVariable('TEMP') ;
Session.PrivateDir := GetEnvironmentVariable('TEMP') ;

Esto debes ponerlo en el OnCreate de tu forma principal.

Session está en la unit DBTables.

Saludos,

karlosmc
16-09-2003, 01:22:12
Muchas gracias a todos.
Por fin conseguí hacer que funcionase. Use el TSesion.
Un saludo y gracias.
Carlos