![]() |
Conexion con Access
Hola a todos.
Me he llevado varios dias leyendo este foro y es una maravilla y una gran ayuda para poder programar en delphi, mis felicitaciones. Ahora bien, me gustaria hacer una consulta sobre una eleccion que debo de hacer: Estoy haciendo un proyecto Delphi el cual en la mayoria de los casos se instalara en una red (porque normalmente sera una oficina) y en la cual se podran hacer distintas operaciones comunes en cualquier base de datos. Pues bien, e decidido utilizar access por su gran sencillez y versatilidad, pero aun es una desicion revocable si ustedes me lo aconsejarais. La mayoria de las oficinas donde se instalará la aplicacion sera de la siguiente manera: -Una maquina que hara de servidor, donde se instalara la aplicacion y la base de datos (como he dicho antes Access). -Varios clientes que accederan a la base de datos que se instalo en el paso anterior, es decir, el servidor. -Ademas cualquiera de estos clientes o el mismo servidor tendra una opcion en la cual podra elegir subir registros (los que se elijan) previamente almacenados en la base de datos local hacia una base de datos MySQL que hay en un servidor web. Tambien podran bajarse registros a la base de datos local... Pues bien me gustaria que me aconsejaran sobre que conexiones utilizar en mi aplicacion sobre: ( 1 ) la conexion del cliente al servidor (Access) y ( 2 ) del servidor al servidor Remoto (MySQL). En la conexion ( 1 ) explorando e visto por ahí la existencia de los archivos udl mas concretamente con el Proveedor "Microsoft Jet 4.0 OLE DB". Me gustaria saber si esta es una buena opcion combinandola con las herramientas ADOConnection para el caso que os he propuesto. Y me gustaria saber si se puede manipular este archivo desde Delphi 7 para variar la ruta de la base de datos y como hacerlo. En la conexion ( 2 ) aun no he elegido nada, si me pudieran sugerir conexiones y herramientas se lo agradeceria enormemente. Muchas gracias por su atencion y 1 saludo a todos ;) |
Buenas!
Por lo que se refiere a la conexión con Access, fijate que en la propiedad connectionString tienes la ruta a la base de datos. Lo que hago normalmente es guardarme en el registro de windows la ruta al servidor, cuando se ejecuta el programa voy a recogerla y concateno la connectionstring con el resto de parámetros. Entonces abro la conexión. Te puedes montar una pequeña pantalla para configurar el valor que tienes guardado en el registro, por si alguna vez cambia de ubicación la base de datos. Un saludo Edu |
ok, es decir, editarlo como un fichero de texto cambiando la ruta en el caso de que quisiera cambiarla cierto???
Se me plantean dos preguntas: ¿Como manejan los registros de windows? ¿En lo referente a la conexion a MySQL alguien me puede ayudar? Gracias por todo |
Buenas!
La idea es la siguiente: Creas un DataModule y le colocas un TADOConnection (que llamaremos conexion) y un TOpenDialog. El código de esta unidad es el siguiente: En la creación del DataModule el programa va a buscar en el registro de Windows la rama HKEY_LOCAL_MACHINE\software\EduP\Pedidos y recoge un valor de cadena que se llama BBDD. En este valor se almacena la ruta y el nombre de la base de datos. Si la clave no existe se lanza el opendialog para que se seleccione la base de datos y guarda el valor. Una vez tiene el valor concatena los textos para la connectionString y abre la conexión a la base de datos. A partir de ahí cualquier TADOTable o TADOQuery necesita acceder al TADOConnection del DataModule y listo. Espero que te sirva Edu |
Me da un error de lectura.
Yo lo que hago es incluir UDataModule en el formulario principal y desde alli hago: DataMod.DataModuleCreate(self); La linea donde me da el error es esta: Begin if (Reg.OpenKey('\SOFTWARE\Gestorvvs\datos', true)) and (OpenDialog1.Execute) then ... Te pediria un ultimo favor y es que al no saber utilizar los DataModule me gustaria que me pusieses un ejemplo sobre como harias tu una sentencia SQL una vez obtenida la UDataModule.pas. Supongo que una vez hecha esta unidad la puedo utilizar todas las veces que quiera.Muchas gracias por todo y un saludo |
Esta unidad va a ser común para todo el proyecto. En cualquier formulario que necesites acceder a la base de datos deberás incluirla en el uses. Después pinchas un TADOQuery en el formulario y miras la ventana de propiedades: Encontrarás una que se llama Connection. Si deslpiegas te va a aparecer la conexión del DataModule. Una vez seleccionada la conexión debes utilizar la propiedad SQL para escribir la sentencia, y desde código asignar los parámetros y abrir este TADOQuery. Mut fácil.
Edu |
Sip correcto, pero mi problema es el siguiente.
He hecho lo que me has dicho y añado en el form que yo quiero lo siguiente: ADOQuery1.SQL.Add('Select * from usadas'); ADOQuery1.Open; ADOQuery1.Free; Pues bien, me da un error que me dice "Missin connection or ConnectionString", parece que no pilla bien la conexion. El DataModule lo tengo exactamente = que el que me propusiste. Gracias por la ayuda de todas formas |
Te falta el ADOQuery1.connection := DataModule.Conexion
Si lo tienes pinchado en el formulario puedes ir a la página de propiedades y seleccionalo. Un saludo Edu |
Eso lo puse como me dijiste, es decir, en las propiedades del objeto TADOQuery mire Connection, desplegue y me salio automaticamente DataMod.Conexion , supongo que si hago estoy no le tengo que hacer en el codigo.
Aunque tb e de decirte que e probado a poner lo que me dijiste desde el codigo, es decir, ADOQuery1.Connection:=DataMod.Conexion; y me sigue dando exactamente el mismo error. La UDataModule esta copiada de la que me propusiste, tengo la impresion de que algo anda mal alli, pero tb podria ser que me pasara por alto algo al enlazar con ADOQuery. ¿ Que puede ser ? ¿ Que se me ha podido pasar por alto ? |
He resuelto uno de los problemas leyendo en el foro, y es que habia que poner en la ejecucion de la Aplicacion que se creara el UDataModule antes que el Unit1.
Ahora me da un problema que considero mas logico aunque no consigo saber por qué.Me dice: No se encontro el origen de datos o no especifico un o no se especifico ningun controlador predeterminado ¿¿¿¿ Que estoy haciendo mal ????? |
Prueba lo siguiente: En la conexión del datamod haces doble click sobre connectionString para que te salga una ventana en la que puedes constriur (build) la connectionString. Con esto puedes montar manualmente la conexión a la base de datos, comprobando que funcione.
Después te coges el connectionString que te ha construido, y lo sacas a las variables bbdd1 y bbdd2 que tienes en el código quitando la parte por donde dice la ubicación de la base de datos De esta forma ya tienes construida una connectionString correcta y le puedes cambiar la ubicación de la base de datos. Edu |
He hecho lo que me has dicho y me dice "Error de autentificacion".
Las variables quedaron así: const bbdd1 = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='; bbdd2 = ';Mode=Share Deny None;Persist Security Info=False'; Mi desesperación cada vez es mas grando porque por más que miro no encuentro el error. El problema veo que esta en que no conecta bien, pero mi impresion sobre el codigo del DataModule es que no deberia ni si quiera de probar la conexion puesto que en principio no hay ninguna clave creada y deberia de saltar el explorador, pero que va salta el error de conexion. Por cierto Mi Access es el 2003, por si pudieran venir de ahi los problemas. Espero me puedan ayudar, pero de todas gracias muchisimas gracias por la atencion dedicada hasta ahora. |
Cuando haces el build del connectionString tienes un botón que se llama "test connection". Hasta que no te diga "connection succees" no te va a funcionar nunca.
Prueba con estas cadenas: bbdd1 = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='; bbdd2 = ';Persist Security Info=False'; También hay una página donde se puede indiar usuario y password. En el usuario dice "Admin". Dejalo en blanco, y deja marcada la opción de "blank password". Asegurate que la propiedad connected del TADOConnection vale false, si no ya lo encuentra conectado y da errores raros. Un saludo Edu |
Eso que me has dicho si me funciona,osea, haciendo el Build elijo una base de datos y tal y hago el test y funciona, pero se supone que despues de esto debo borrar la cadena de ConnectionString no?? y ponerla en las variables...
Pues bien a partir de ahi es donde me da los errores raros, vacio en ConnectionString para que lo coja de las variables y salte el explorador de archivos y nada, solo da errores. Estoy completamente desesperado... :( , pero de nuevo infinitas gracias por tu paciencia |
Ya he solucionado el problema. Era que en el ConnectionString del TADOConnection yo lo vaciaba pues creia que debia estar limpio para que funcionara el sistema que estabamos montando. Una vez me cree un ConnectionString al cual le quite la ruta todo me funciona correctamente, excepto una cosa y es que en el codigo que me facilitaste encuentro un pequeño desajuste, cuando salta el explorer si lo cancelo la aplicacion se cierra, pues bien yo he de permitir que el usuario no elija ninguna base de datos si lo desea, y tambien que en el momento que quiera pueda cambiar la ruta de la base de datos.
Voy a Trabajar con ello y en cuanto tenga un resultado la pego aqui para que los demas usuarios no tengan el problema que yo tube. MUCHAS GRACIAS POR TODO |
He desarrollado en la unidad que aqui pusieron un poco mas para que se pueda cambiar la ruta y para que si no se mete una ruta correcta no la acepte y welva a intentarlo en el siguiente inicio. Todo quedo asi:
Por si alguien ve esto recuerdo que debe crear un ConnectionString dentro del TADOConnection y se utiliza asi: Para llamar desde comprobar si ya hay registrada una base de datos o para la primera vez que se entra: -Añadimos esta unidad en el uses (en este caso Udatamodule) -Ponemos donde queramos DataMod.DataModuleCreate(owner); Para cambiar de base de datos: -Añadimos esta unidad en el uses (en este caso Udatamodule) -Pone donde queramos Datamod.cambiardb(owner); Gracias por su ayuda y espero ayudar a alguien con lo que he puesto ;) |
Muy bien!
Estoy contento que al final solucionaras el problema. Ayer tuve fiesta y por esto no te escribí. A partir de hoy, tus conexiones a base de datos van a ser pura rutina! Un saludo Edu |
La franja horaria es GMT +2. Ahora son las 04:29:44. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi