Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Aplicación no se ejecuta en otros PC (https://www.clubdelphi.com/foros/showthread.php?t=44224)

jlsc 01-06-2007 13:14:41

Subo el archivo completo con el Exe mas 2 pantallazos con errores que generó en un equipo despues de haber instalado delphi sin compilar antes la aplicación, sino que ejecute un exe que ya estaba antes de instalar delphi.

jlsc 01-06-2007 13:23:21

perdón no puse la direccion. es esta aqui esta todo el programa con el ejecutable incluido.

http://www.megaupload.com/es/?d=937HDAVS

Neftali [Germán.Estévez] 01-06-2007 14:31:15

Yo tengo Delphi (6 y 2007) instalado y me da el mismo Error "Stack Overflow" así que no va por ahí.
Las librerías que está utilizando son las siguientes:
advapi32.dll
comctl32.dll
comdlg32.dll
gdi32.dll
kernel32.dll
ole32.dll
oleaut32.dll
user32.dll
version.dll
winspool.drv

Habría que mirar las versiones en ambos sistemas a ver si puede venir por ahí el error.

waly2k1 01-06-2007 14:33:11

[quote=Neftali]Joer!! sí que es buena suerte.
Mira que llevo utilizando MegaUpload tiempo y nunca había pasado nada y el día que le digo a alguien que lo use, va y está caput!!! :o

Juás! No te olvides q en el país de las maravillas suceden cosas inesperadas todo el tiempo. O bien es de esperarse cualquier cosa!(todo el tiempo)

jlsc:
No respondiste si estás compilando con Runtime Packages ???
Si tu .exe es muy pequeño seguramente si. Creo que instalar Delphi en los clientes no es la solución. Ahora si instalaste y te generan aún problemas. El tema viene por el lado de componentes que quizás tengas únicamente la versión Runtime, o sea que no tenés la versión full y no instalaste dichos componentes en otras PCs.

En cuanto a los .ini buscá por el lado de TIniFile en la ayuda que seguro encontrarás algo. El datamodule no es más que un módulo de datos(valga la redundancia), en el cual colocas todos tus componentes de accesos a datos de manera tal que no tengas que tener conexiones y tablas, querys repartidos por cada form de tu aplicación. Sino fijate el ejemplo MastData o algo así no lo recuerdo bien. Después agregas el modulo como si fuera un form en las units de cada formulario que lo necesite y listo. Para agregar File\New\DataModule con uno que crees es suficiente para toda tu aplicación.

Saludos y espero soluciones tu problema

Neftali [Germán.Estévez] 01-06-2007 14:52:40

No parece que sea problema de packages; El EXE que has subido no necesita ningun package.
Es más, el EXE que has subido me falla (con el mismo error 'Stack overflow') y en cambio si lo compilo no me da ningun problema (salvo el del path de la BD) y se ejecuta correctamente.

Neftali [Germán.Estévez] 01-06-2007 14:57:10

Bueno, parece que ya está.
El problema está:
(1) En que tienes en los DFM la ruta de la Base de Datos.
(2) En en diseño ya tienes la conexión (ADO) y todas las tablas abiertas.
(3) Que la Base de Datos sigue apuntando a un lugar incorrecto.

Tal vez por separado no dieran problemas, pero conjuntamente dan el error de Stack Overflow (no tengo claro topdavía porqué, pero es así).

Prueba.
Con el ejecutable que has enviado, si la Base de Datos se encuentra exactamente en: "C:\Base Reclamaciones\Reclamaciones.mdb" funciona perfectamente. Ese mismo ejecutable, si la BD no se encuentra en esa ubicación a error de "Stack overflow".

Yo remediaría los tres puntos comentados arriba.

NOTA: No deberías usar dos ADOConnection, con una basta. Tienes una en cada form. (Esto tambén lo cambiaría)

Un saludo.

jlsc 01-06-2007 15:13:37

Muchas gracias Neftali, lo modificaré como me lo indicas y luego te lo cuento Saludos.

Jorge

MaMu 01-06-2007 15:45:11

Stack Overflow

Yo creo que el problema está claramente en el mal uso del ADOConnection, que a falta de uno, has puesto varios, en cada uno de los formularios.
Deberias utilizar uno solo, ya que con eso basta, puesto a que al utilizar más de uno, si en la PC donde ejecutas el programa, lo hace por defecto en modo exclusivo (segun este configurada esa PC en la red) no te va a permitir el acceso de otro ADOCommand, con lo que se llenará la pila de memoria con datos erráticos produciendo un desborde. Yo particularmente utilizo este tipo de procedimientos para hacer la conexión con TADOConnection, ya que uno siempre debe contemplar la posibilidad que la ruta hacia la base cambie por cualquier razón:

Código Delphi [-]
procedure TMain.FormCreate(Sender: TObject);
var root,base,dire:string;
begin
  root:=ExtractFilePath(Application.ExeName);
  //conexion a base de datos
  base:='tubase.mdb';
  dire:=root+'\'+base;
  if FileExists(dire)=True
    then begin
      ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;'+
      'User ID=Admin;' +
      'Data Source='+dire+';' +
      'Mode=Share Deny None;' +
      'Extended Properties="";' +
      'Jet OLEDB:System database="";' +
      'Jet OLEDB:Registry Path="";' +
      'Jet OLEDB: Database Password="";' +
      'Jet OLEDB:Engine Type=5;' +
      'Jet OLEDB: Database Locking Mode=1;' +
      'Jet OLEDB:Global Partial Bulk Ops=2;' +
      'Jet OLEDB:Global Bulk Transactions=1;' +
      'Jet OLEDB:New Database Password="";' +
      'Jet OLEDB:Create System Database=False;' +
      'Jet OLEDB:Encrypt Database=False;'  +
      'Jet OLEDB: Don''t Copy Locale on Compact=False;' +
      'Jet OLEDB:Compact Without Replica Repair=False;'  +
      'Jet OLEDB:SFP=False';
    end
    else begin
     //aqui haces algun tratamiento para elegir la base de datos si se encuentra en otro lugar o ha sido eliminada.
    end;
end;

De programar tantos microcontroladores, el stack overflow, es muy común que suceda, sobre todo cuando cualquier tipo de conector (en este caso el ADOConnection) no obtiene información concordante con la solicitada.
Creo que al menos, deberias probar el cambio.

Saludos

Caral 01-06-2007 19:39:29

Hola
Empecemos paso a paso:
1- abre el programa con delphi
2- entra a File, new, datamodule, esto creara un datamodule., guardalo en el proyecto.
3- coloca un adoconnection en el datamodule. (adoConnection1)
4- elimina los adoconnection de todos los forms.
5- abre el unit ReclasU y pon el datamodule de primero en la lista asi:
Código Delphi [-]
begin
  Application.Initialize;
  Application.CreateForm(TDataModule1, DataModule1);
  Application.CreateForm(TReclamacionesAcceso, ReclamacionesAcceso);
  Application.CreateForm(TReclamaciones, Reclamaciones);
  Application.Run;
end.
6- en cada adotable y adoquery, cambia la direccion del connection:
Código Delphi [-]
Datamodule1.ADOConnection1
7- dale dobleclick a la parte blanca del datamodule, esto generara el evento oncreate del datamodule, en ese evento coloca esto, copia y pegalo si quieres.
Código Delphi [-]
procedure TDataModule1.DataModuleCreate(Sender: TObject);
Var BaseDeDatos, ConStr : String;
    IniFile: TIniFile;
begin
   // Obtiene la ruta y el nombre de la base de datos
   IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Recamaciones.ini'); // Reclamaciones, sera el nombre que se le de al ini
   BasedeDatos := IniFile.ReadString('BD','Path','');
   If BasedeDatos = '' then ShowMessage('Error al cargar Base de Datos');
   ConStr := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
             'Data Source='+BaseDeDatos+';'+
             'Persist Security Info=False;'+
             'Jet OLEDB : Database Password=admin';
   ADOConnection1.ConnectionString := ConStr;
   ADOConnection1.Open;
end;
Bien ya tenemos el arranque del programa, ahora cuando arranque abrira el datamodule primero y buscara un archivo ini, que se llama reclamaciones, este tiene que estar en el mismo directorio del exe.
Bueno ahora agamos el ini.
abre el bloc de notas y pon en el esto, tal y como esta:
Cita:

[BD]
Path="C:\Base Reclamaciones\Reclamaciones.mdb"
[Logon]
Auto="No"
Login=""
Pass=""
Ahora guardalo en el directorio donde esta el programa, con el nombre de Reclamaciones.
Bueno con esto el programa buscara el ini, lo leera y dira hey la base de datos esta en C:\Base Reclamaciones\, ha bueno entonces la voy a buscar, por supuesto si la base de datos esta en otra direccion pues hay que poner la direccion correcta en el ini y guardar los cambios.
Con esto si quieres mover la base de datos a cualquier directorio se podra hacer simplemente modificando la direccion en el ini y guardando los cambios, puede estar en c, d, f, z o donde se quiera el programa leera el ini y buscara la direccion.
Bueno depues de todo esto veras que hay varias cosas:
1- solo un adoconnection.
2- un datamodule, donde poner muchas cosas.
3- un archivo ini, que dirige al programa para que encuentre la base de datos.
4- una explicacion de un novato a otro.:D
Saludos

jlsc 02-06-2007 10:43:02

Muchas Gracias Caral y Mamu por su excelente aplicación, lo he entedido claramente, muchas gracias for su dedicación a este excelente foro y ayudarnos a los que estamos surmegidos en esta herramienta tan maravillosa que es Delphi. lo haré y ya contaré que tal me ha ido.

Muchas Gracias nuevamente.

Reciban mis saludos

novato jlsc :D

FOURIER 03-06-2007 11:02:19

Hola amigo
 
Bueno mira te voy a decir como está el rollo; si sólo usas ACCESS y DELPHI, tu programa se cuelga al no encontrar la ruta dependiendo de las cosas que haga al inicio tu programa; si lo que tu quieres es que otras máquinas accedan a la BD que tienes en una máquina entonces para Access en tu Delphi donde usas el Componente ADOConnection ya ves que especificas la ruta de Accesso, bueno ahi vas a tener 2 alternativas una es que escribas
//dirip/rutadeacceso por ejemplo /192.168.2.7/C/Archivo.mdb
la otra es que especifiques //NomPC/rutaaccesp por ejemplo //Fourier/C/Archivo.mdb

ahora si estás usando algunos reportes que generas con el Quick Report o abres algún Cajón de dinero lo más seguro es que te falte el archivo dll enlas máquinas donde lo vayas a instalar que puede ser qtintf.dll ó qtintf70.dll ó qtintf90.dll dependiendo de la versión de Quick Report que Ocupas, bueno chavo espero te sirva esta información, suerte

Lepe 03-06-2007 11:08:22

Cita:

Empezado por Caral
4- una explicacion de un novato a otro.:D

Yo no diría que es una explicación de novato, más bien diría que es la explicación de un maestro (palabreja que tanto te gusta :p), clara, concisa y muy bien redactada.

Quizás deberíamos otorgarte el título "Maestro Clubdelphi" :cool:

Saludos

jlsc 13-06-2007 13:28:19

Aplicacion no se ejecuta en otro PC
 
Hola a todos,

Muchas gracias por sus soluciones, lo he hecho como me lo han aconsejado y funciona perfectamente. Muchas gracias Caral por tu detallada y buena explicacion, los mismo para lepe, waly2k1, neftali a todos gracias nuevamente. :D


La franja horaria es GMT +2. Ahora son las 19:12:10.

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