Cómo construir la cadena de conexión de base de datos dinámicamente

Una vez que haya terminado su Solución de base de datos de Delphi, el paso final es implementarlo con éxito en la computadora del usuario.

ConnectionString sobre la marcha

Si estaba utilizando componentes dbGo (ADO), elCadena de conexión propiedad de la TADOConnection especifica la información de conexión para el almacén de datos.

Obviamente, al crear aplicaciones de base de datos que se ejecutarán en varias máquinas, la conexión a la fuente de datos no debe estar codificada en el ejecutable. En otras palabras, la base de datos puede estar ubicada en cualquier lugar de la computadora del usuario (o en alguna otra computadora en una red): la cadena de conexión utilizada en el objeto TADOConnection debe crearse en tiempo de ejecución Uno de los lugares sugeridos para almacenar los parámetros de la cadena de conexión es el Registro de Windows (o puede decidir usar el "plano" Archivos INI).

En general, para crear la cadena de conexión en tiempo de ejecución, debe
a) colocar la ruta completa a la base de datos en el registro; y

instagram viewer

b) cada vez que inicie su aplicación, lea la información del Registro, "cree" ConnectionString y "abra" ADOConnection.

Base de datos... ¡Conectar!

Para ayudarlo a comprender el proceso, hemos creado una aplicación de "esqueleto" de muestra que consta de un formulario (formulario principal de la aplicación) y un módulo de datos. Los módulos de datos de Delphi proporcionan una herramienta organizativa conveniente que se utiliza para aislar las partes de su aplicación que manejan la conectividad de la base de datos y las reglas comerciales.

los OnCreate El evento del Módulo de datos es donde coloca el código para construir dinámicamente ConnectionString y conectarse a la base de datos.

procedimiento TDM.DataModuleCreate (Remitente: TObject); empezarSi DBConnect luego
ShowMessage ('¡Conectado a la base de datos!')
más
ShowMessage ('¡NO conectado a la base de datos!'); final;

Nota: El nombre del módulo de datos es "DM". El nombre del componente TADOConnection es "AdoConn".

los DBConnect La función hace el trabajo real de conectarse a la base de datos, aquí está el código:

funcción TDM.DBConnect: booleano; var
conStr: cadena; ServerName, DBName: cadena; empezarServerName: = ReadRegistry ('DataSource'); DBName: = ReadRegistry ('DataCatalog'); conStr: = 'Proveedor = sqloledb;' + 'Fuente de datos =' + ServerName + ';' + 'Catálogo inicial =' + DBName + ';' + 'Id. De usuario = myUser; Contraseña = myPasword '; Resultado: = falso; AdoConn. Cerca; AdoConn. Cadena de conexión: = conStr; AdoConn. LoginPrompt: = False;Si (NO AdoConn. Conectado) luegotratar
AdoConn. Abierto; Resultado: = Verdadero; exceptoen E: excepción hacerempezarMessageDlg ('Hubo un error al conectarse. la base de datos. Error: '+ # 13 # 10 + mi. Mensaje, mtError, [mbOk], 0);SiNO TDatabasePromptForm. Ejecutar (ServerName, DBName)
luego
Resultado: = falso. másempezar
WriteRegistry ('DataSource', ServerName); WriteRegistry ('DataCatalog', DBName); // recuperar esta función
Resultado: = DBConnect; final; final; final; final; //DBConnect

La función DBConnect se conecta a la base de datos de MS SQL Server: ConnectionString se construye utilizando la función local CONNSTR variable.

El nombre del servidor de bases de datos se almacena en el Nombre del servidor variable, el nombre de la base de datos se mantiene en el DBName variable. La función comienza leyendo esos dos valores del registro (usando el personalizado ReadRegistry () procedimiento). Una vez que se ensambla ConnectionString, simplemente llamamos AdoConn. Abierto método. Si esta llamada devuelve "verdadero", nos hemos conectado correctamente a la base de datos.

Nota: Dado que estamos pasando explícitamente información de inicio de sesión a través de ConnectionString, el módulo Dado es creado antes del formulario principal, puede llamar con seguridad a los métodos desde el módulo de datos en OnCreate de MainForm evento.LoginPrompt La propiedad se establece en falso para evitar un diálogo de inicio de sesión innecesario.

La "diversión" comienza si ocurre una excepción. Si bien puede haber muchas razones para que falle el método Open, supongamos que el nombre del servidor o el nombre de la base de datos es incorrecto.
Si este es el caso, le daremos la oportunidad al usuario de especificar los parámetros correctos mostrando un formulario de diálogo personalizado.
La aplicación de muestra también contiene un formulario adicional (DatabasePromptForm) que permite al usuario especificar el servidor y el nombre de la base de datos para el componente Connection. Este formulario simple solo proporciona dos cuadros de edición, si desea proporcionar una interfaz más fácil de usar, puede agregue dos cuadros combinados y complételos enumerando los servidores SQL disponibles y recuperando las bases de datos en un servidor SQL.

El formulario DatabasePrompt proporciona una costumbre método de clase llamado Ejecutar que acepta dos parámetros variables (var): ServerName y DBName.

Con los "nuevos" datos proporcionados por un usuario (nombre de servidor y base de datos), simplemente llamamos a la función DBConnect () nuevamente (recursivamente). Por supuesto, la información se almacena primero en el Registro (usando otro método personalizado: WriteRegistry).

¡Asegúrese de que DataModule sea el primer "formulario" creado!

Si intenta crear este proyecto simple por su cuenta, es posible que experimente excepciones de Infracción de acceso cuando ejecute la aplicación.
Por defecto, el primer formulario agregado a la aplicación se convierte en MainForm (el primero creado). Cuando agrega un módulo de datos a la aplicación, el módulo de datos se agrega a la lista de "formularios de creación automática" como el formulario que se crea después del formulario principal.
Ahora, si intenta llamar a cualquiera de las propiedades o métodos del Módulo de datos en el evento OnCreate del MainForm, obtendrá una excepción de Infracción de acceso, ya que el módulo de datos aún no se ha creado.
Para resolver este problema, debe cambiar manualmente el orden creado del módulo de datos y configurarlo para que sea el primer formulario que crea la aplicación (ya sea mediante el cuadro de diálogo Propiedades del proyecto o editando el Archivo fuente de proyectos).

Dado que el módulo de datos se crea antes del formulario principal, puede llamar con seguridad a los métodos desde el módulo de datos en el evento OnCreate de MainForm.

instagram story viewer