
[RESUELTO] Ayuda con conexion ADO y Access
#1
Escrito 24 julio 2010 - 10:45
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
#2
Escrito 24 julio 2010 - 10:48
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
#3
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
#4
Escrito 24 julio 2010 - 10:58
Empecemos:
1- El Datamodule:
Pongamos en el uses del datamodule el IniFiles, asi:
uses 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:
Var BaseDeDatos, ConStr : String; IniFile: TIniFile; Begin // Obtiene la ruta y el nombre de la base de datos IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Datos.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;
Me sigues?.
Saludos
#5
Escrito 24 julio 2010 - 11:10
Suponemos que me sigues...

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
#6
Escrito 24 julio 2010 - 11:23
Seguimos.....

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
#7
Escrito 24 julio 2010 - 12:10
delphi
// Obtiene la ruta y el nombre de la base de datos 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

#8
Escrito 24 julio 2010 - 01:02
¿Tienes declarado en la sección uses a la unidad Forms? Si no está añadela:
uses 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,
#9
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

#10
Escrito 24 julio 2010 - 01:44
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
#11
Escrito 24 julio 2010 - 02:13
Me alegro de que haya sido solamente eso el problema.
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
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,
#12
Escrito 24 julio 2010 - 02:57
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
#13
Escrito 24 julio 2010 - 04:05
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,
#14
Escrito 24 julio 2010 - 04:19
Hola Delphius: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,
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
#15
Escrito 24 julio 2010 - 04:52
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,
#16
Escrito 24 julio 2010 - 04:58
Trataré de ser más cuidadoso en el futuro.
Un saludo
#17
Escrito 24 julio 2010 - 05:02
Tranquilo amigo, aunque Delphius tiene razón también sabemos que tu intención es buena.De acuerdo Delphius. Efectivamente esa es la fuente de mi cita.
Trataré de ser más cuidadoso en el futuro.
Un saludo

Saludos
#18
Escrito 29 julio 2010 - 11:20
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
#19
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

Saludox !
