Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-06-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.339
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #2  
Antiguo 01-06-2007
jlsc jlsc is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
jlsc Va por buen camino
Muchas gracias Neftali, lo modificaré como me lo indicas y luego te lo cuento Saludos.

Jorge
Responder Con Cita
  #3  
Antiguo 01-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
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
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;

Última edición por MaMu fecha: 01-06-2007 a las 15:47:49.
Responder Con Cita
  #4  
Antiguo 01-06-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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.
Saludos
Responder Con Cita
  #5  
Antiguo 02-06-2007
jlsc jlsc is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
jlsc Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 03-06-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Cita:
Empezado por Caral
4- una explicacion de un novato a otro.
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 ), clara, concisa y muy bien redactada.

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

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 13-06-2007
jlsc jlsc is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
jlsc Va por buen camino
Thumbs up 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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Desactivar un form mientras se ejecuta otra aplicación hvelascos Internet 2 19-01-2007 01:50:41
Cantidad de veces que se ejecuta una aplicación efelix OOP 3 09-11-2006 17:23:55
¿Cuantas veces se ejecuta mi aplicación? m@r Varios 6 07-11-2006 15:28:33
no ejecuta mi aplicacion en un servidor de red jas010 Tablas planas 3 01-02-2005 00:23:57
mantener un archivo en memoria mientras ejecuta la aplicacion agustincs API de Windows 8 01-09-2004 02:05:57


La franja horaria es GMT +2. Ahora son las 09:35:45.


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
Copyright 1996-2007 Club Delphi