Ir al contenido


Foto

[RESUELTO] Ayuda con conexion ADO y Access


  • Por favor identifícate para responder
18 respuestas en este tema

#1 jcheco

jcheco

    Member

  • Miembros
  • PipPip
  • 46 mensajes
  • LocationBronx, NY

Escrito 24 julio 2010 - 10:45

Buenas tardes.

Estoy trabajando con Delphi 7, Access 2003 y conexion ADO.

Tengo un datamodule donde tengo el TADOConnection. Cuando ejecuto el sistema en mi pc donde estoy programando, no hay ningun problema, pero cuando intento correrlo en otra pc, me dice que no encuentra el folder con la base de datos.

Les comento que el sistema se va a conectar desde una pc local y 2 mas se van a conectar mediante una red local a esa pc donde va a estar alojada la base de datos.

Mi pregunta es:

¿Cómo puedo hacer para especificarle desde donde va a tomar la base de dato cada pc?

En el connectionString del ADOConnection tengo lo siguiente:

Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\Sistema\Datos\SistemaPC.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password=admin;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

El login prompt esta en False

Provider Microsoft.Jet.OLEDB.4.0

Connected True

Gracias anticipadas por su ayuda.

Saludos
  • 0

#2 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 24 julio 2010 - 10:48

Hola
Lo mejor para trabajar con Access es que la conexion la encuentre un archivo INI y no hacerlo por codigo.
Recuerda que en red de windows hay letras ahy es donde se complica si no usas el INI.
Cualquier cosa me dices y te guio paso a paso.
Saludos
  • 0

#3 jcheco

jcheco

    Member

  • Miembros
  • PipPip
  • 46 mensajes
  • LocationBronx, NY

Escrito 24 julio 2010 - 10:49

Hola
Lo mejor para trabajar con Access es que la conexion la encuentre un archivo INI y no hacerlo por codigo.
Recuerda que en red de windows hay letras ahy es donde se complica si no usas el INI.
Cualquier cosa me dices y te guio paso a paso.
Saludos


Si me puedes guiar te lo agradeceria mucho, porque nunca he usado el INI. Incluso es la primera vez que estoy utilizando ADO, porque estaba usando anteriormente BDE, pero lo cambié por que estaba lento las consulta y los procesos.

Gracias
  • 0

#4 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 24 julio 2010 - 10:58

Hola
Empecemos:
1- El Datamodule:
Pongamos en el uses del datamodule el IniFiles, asi:


delphi
  1. uses
  2.   SysUtils, Classes, DB, ADODB, Forms, Dialogs, IniFiles;



2- Dale doble click a la parte blanca, esto te creara el evento Oncreate del datamodule.
Copia y pega este codigo ahi:


delphi
  1. Var BaseDeDatos, ConStr : String;
  2.     IniFile: TIniFile;
  3. Begin
  4.   // Obtiene la ruta y el nombre de la base de datos
  5.   IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Datos.ini');
  6.   BasedeDatos := IniFile.ReadString('BD','Path','');
  7.   If BasedeDatos = '' then ShowMessage('Error al cargar Base de Datos');
  8.   ConStr := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
  9.             'Data Source='+BaseDeDatos+';'+
  10.             'Persist Security Info=False;'+
  11.             'Jet OLEDB:Database Password=admin';
  12.   AdoConnection1.ConnectionString := ConStr;
  13.   AdoConnection1.Open;


Me sigues?.
Saludos
  • 0

#5 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 24 julio 2010 - 11:10

Hola
Suponemos que me sigues... (y)
Si te fijas bien en el codigo anterior veras:
1- Primero llamamos al unit IniFiles.
2- En el evento oncreate del datamodule llamamos al archivo INI que en este caso se llama Datos.Ini
3- Recogemos la direccion de la BD y se la pasamos al adoconnection.
4- Conectamos el adoconnection.
Bien:
Como necesitamos el archivo INI te paso uno hecho para que lo descargues.
Dale doble click para abrirlo:
En este archivo veras esto:

[BD]
Path="C:\TuDirectorio\BD\TuBD.MDB"
[Logon]
Auto="No"
Login=""
Pass=""


Como ves el Path es la direccion de la BD, esta la tendras que cambiar a donde tienes la BD.
Ademas contiene el nombre (completo) de la BD.
Luego que hagas los cambios los Guardas, como cualquier archivo texto.
Seguimos...?
Saludos

Archivos adjuntos


  • 0

#6 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 24 julio 2010 - 11:23

Hola
Seguimos..... (y)
Ahora Hay que tomar en cuenta que el archivo INI como es el que busca la BD TIENE que estar en el directorio del EXE.
Esto en cada uno de los Ordenadores, osea: Si tienes varios programas uno en cada Ordenador, tiene que tener ademas del EXE el archivo INI en cada uno, si no, no encontraran la BD.
Ahora lo que falta es:
Como vas a tener la BD en un ordenador y verla desde los otros necesitas:
1- Colocar la BD (en ese ordenador) en una carpeta COMPARTIDA para que la puedan ver los ordenadores.
2- Crear un Map Nectwork Drive.
3- Cambiar la direccion del INI segun la letra que le asignes al Map Ne....
Si tienes dudas o no sabes hacer algo, pregunta.
Saludos
  • 0

#7 jcheco

jcheco

    Member

  • Miembros
  • PipPip
  • 46 mensajes
  • LocationBronx, NY

Escrito 24 julio 2010 - 12:10




delphi
  1.   // Obtiene la ruta y el nombre de la base de datos
  2.   IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Datos.ini');



Estoy probando ya hice todo lo que me explicaste, pero al momento de darle a correr, no me deja y se posiciona en esa linea diciendo: Undeclared Identifier: 'Application'. Eso se queda así mismo o tengo que hacer algo adicional, para que pueda funcionar.

Muchas Gracias por tu ayuda :)
  • 0

#8 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 24 julio 2010 - 01:02

Hola jcheco,

¿Tienes declarado en la sección uses a la unidad Forms? Si no está añadela:



delphi
  1. uses
  2. bla, bla, bla, Forms;



Si está habría que ver más a fondo cual es el problema... Si no es mucha molestia, ¿podríamos ver la unidad completa?

Llendo al tema de los archivos ini, como consejo, en algún momentito libre que puedas sacar aprovecha para leer la ayuda sobre la clase TIniFile. Los archivos .ini son muy útiles para aplicar configuraciones a nuestros aplicativos. Uno le puede dar uso a conveniencia, lo que si hay que respetar la estructura.

Todo archivo ini está formado por secciones y variables. En el ejemplo de Caral, hay dos secciones distinguidas por []. En cada sección puede haber una o más variables. La sección [Logon] contiene tres variables: Auto, Login, Pass.

Las variables luego acompañas del valor.

En resumen, un .ini tiene esta forma:

[Sección]
variable=valor
...

Puedes guardar muchas cosas: textos, números, etc. la clase TIniFile ofrece los métodos para escribir y leer todo eso. Por eso te invito a leer del tema.

Saludos,
  • 0

#9 jcheco

jcheco

    Member

  • Miembros
  • PipPip
  • 46 mensajes
  • LocationBronx, NY

Escrito 24 julio 2010 - 01:39

Hola jcheco,

¿Tienes declarado en la sección uses a la unidad Forms? Si no está añadela:


Muchas gracias delphius, eso mismo era, no estaba la unidad Forms declarada en el DataModule.

Gracias pro tu recomendación, y si me voy a poner a leer la ayuda del Inifile, porque después de esta ayuda que me han dado con esto del INI, la verdad lo encuentro muy interesante y util.

Gracias Caral y gracias Delphius por su ayuda.

Estoy probando en las demas pc, les cuento si tengo algun problemita ;)
  • 0

#10 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 24 julio 2010 - 01:44

Hola
Recuerda tienes que poner la letra del map para conectarte via red.
Es muy sencillo.
La ventaja con el INI es que si decides cambiar la BD de directorio simplemente cambias la direccion en el INI.
Saludos
  • 0

#11 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 24 julio 2010 - 02:13


Muchas gracias delphius, eso mismo era, no estaba la unidad Forms declarada en el DataModule.

Gracias pro tu recomendación, y si me voy a poner a leer la ayuda del Inifile, porque después de esta ayuda que me han dado con esto del INI, la verdad lo encuentro muy interesante y util.

Gracias Caral y gracias Delphius por su ayuda.

Estoy probando en las demas pc, les cuento si tengo algun problemita ;)

Me alegro de que haya sido solamente eso el problema.

Leelo con tranquilidad, de a poco porque el tema puede ser un tantito pesado y no tan fácil de entender a la primera. Al menos en mi caso como no me voy demasiado bien con el inglés debo tomarme mis pausas.

Como plus, además de archivos .ini se puede recurrir al uso de registro de Windows; aunque no es muy habitual emplear el registro para estos casos. Se podría crear una clave en el registro y en ella guardar el patch, pass, etc. Para el manejo del registro está la clase TRegistry; por si te interesa más adelante investigar y leer del tema.

Saludos,
  • 0

#12 esocrates

esocrates

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 102 mensajes
  • LocationArgentina

Escrito 24 julio 2010 - 02:57

Si me permites Delphius posteo una parte de un archivo de introducción a Delphi [Curso Delphi By MrRidk ]que habla sobre archivos ini.
Como es un tutorial de libre distribución no creo que haya problemas.
Si no estoy en lo correcto [soy nuevo en este Foro] borrá el post.

Este es el recorte:

¿Que es un archivo INI?
Un archivo INI es un archivo especial que se caracteriza por estar dividido en secciones, lo cual
proporciona la posibilidad de acceder rápida y fácilmente a una sección del archivo.Generalmente se
usan para guardar configuraciones de programas, por ejemplo conque fuente fue cerrado el editor de
textos, para que al arrancar de nuevo el programa, este se ejecute con esa fuente y no con la
predeterminada.Para poder trabajar con archivos INI en delphi deberás añadir "IniFiles" a la cláusula
uses, con ello conseguirás que tu programa pueda trabajar con archivos INI. La sintaxis es
básicamente esta:
_________________________________________
uses
IniFiles
_______________________________________________________________________
var
MiFichero: Tinifile; // Definimos el nombre de la variable...
begin
MiFichero := Tinifile.create ('C:\Configuracion.ini'); // Creamos el fichero
y se lo asignamos a la variable.
.... // Aquí iría el código en donde le diríamos al programa que hacer con
ese archivo
MiFichero.Free; // Liberamos el Archivo
End; // Acabamos
_____________________________________________________________________
En un archivo INI se puede hacer básicamente dos cosas : Leer y escribir.
Para leer:
Variable := MiFichero.ReadInteger('Sección', 'Valor', Valornumerico);
Para escribir
MiFichero.WriteInteger('Sección', 'Valor', ValorNumerico);
La sintaxis para leer o escribir depende del dato que vayamos a leer, así por ejemplo os pongo una
tabla con los más habituales:
______________________________________________________________________
MiFichero.ReadBool Lee una expresión booleana MiFichero.ReadString Lee una cadena de texto
MiFichero.ReadInteger Lee un dato numerico MiFichero.WriteBool Escribe una expresión booleana
MiFichero.WriteString Escribe una cadena de texto MiFichero.WriteInteger Escribe un dato numérico
______________________________________________________________________
Habitualmente este tipo de código se pone en el OnCloseQuery y en el OnCreate de los formularios,
para que el programa se ejecute con la configuración anterior, y se cierre guardando la configuración
actual. Así pues os voy a poner un poco de tarea.

Curso Delphi By MrRidk (IniFiles)

Un saludo a todos
  • 0

#13 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 24 julio 2010 - 04:05

Hola esocrates,
No hay ningún impedimento respecto a eso. Lo que si sería oportuno es ofrecer la fuente, un enlace o indicar de donde ha sido citado o extraído.

Saludos,


  • 0

#14 esocrates

esocrates

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 102 mensajes
  • LocationArgentina

Escrito 24 julio 2010 - 04:19

Hola esocrates,
No hay ningún impedimento respecto a eso. Lo que si sería oportuno es ofrecer la fuente, un enlace o indicar de donde ha sido citado o extraído.

Saludos,

Hola Delphius:
Lo había puesto entra corchetes en el primer renglón. "Curso Delphi By MrRidk"
No recuerdo de qué Sitio lo he descargado. Estaba en mis respaldos. Pero en Google figura con frecuencia
Un saludo

  • 0

#15 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 24 julio 2010 - 04:52

No me refiero a eso esocrates, sino de tener algo más "tangible" para verificar y comprobar el material de consulta.
Con el respeto, no basta con decirnos, "buscalo en google". Si vas a recomendar, por favor tómate la molestia de citar y brindar una fuente a la que se pueda llegar.

Esto es necesario ya que el material que tu expones podría tener derechos de autor y el no citar, ni indicar referencia de donde ha sido consulta es motivo para problemas.

Se puede citar, lo permitimos pero queremos poner cierto orden y no que las cosas queden sueltas como el poner "Curso Delphi By MrRidk".

De una búsqueda en Google llego a que quizá el material de consulta que citas sea éste.

Ojo, no te estoy retando ni nada. Sólo pedimos cuidado con esto. Por favor.

Saludos,
  • 0

#16 esocrates

esocrates

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 102 mensajes
  • LocationArgentina

Escrito 24 julio 2010 - 04:58

De acuerdo Delphius. Efectivamente esa es la fuente de mi cita.
Trataré de ser más cuidadoso en el futuro.
Un saludo
  • 0

#17 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 24 julio 2010 - 05:02

Hola

De acuerdo Delphius. Efectivamente esa es la fuente de mi cita.
Trataré de ser más cuidadoso en el futuro.
Un saludo

Tranquilo amigo, aunque Delphius tiene razón también sabemos que tu intención es buena. (y)
Saludos
  • 0

#18 jcheco

jcheco

    Member

  • Miembros
  • PipPip
  • 46 mensajes
  • LocationBronx, NY

Escrito 29 julio 2010 - 11:20

Muchas gracis a todos y perdón la demora en responder.

Pero les cuento que mi problema se solucionó con las sugerencias y ayudas que me proporcionaron.

Muchas gracias de nuevo por su gran ayuda.

Saludos
  • 0

#19 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 29 julio 2010 - 11:51

Muchas gracis a todos y perdón la demora en responder.

Pero les cuento que mi problema se solucionó con las sugerencias y ayudas que me proporcionaron.

Muchas gracias de nuevo por su gran ayuda.

Saludos


Excelente amiga !!!!!!

Pondré este hilo como resuelto (y)...

Saludox ! :)
  • 0




IP.Board spam blocked by CleanTalk.