En la aplicación de base de datos DELPHI, normalmente tenemos dos formas de acceder a la base de datos. Una es buscar en la base de datos BDE. motor, es decir, utilizando el controlador de base de datos que viene con DELPHI. La ventaja de este método es que es rápido, pero su alcance de aplicación es limitado. Cuando se actualiza la versión de la base de datos, es posible que no pueda operar la nueva base de datos. Otro método es a través de ODBC, que tiene las ventajas; El punto es que se puede proporcionar con el sistema operativo (como WINDOWS) y se puede adaptar a una variedad de bases de datos como una interfaz estándar. La desventaja es que es lenta. En preparación Durante el proceso, podemos elegir uno de los métodos según nuestras necesidades. Cuando se utiliza ODBC para acceder a la base de datos, el método habitual es configurar una fuente de datos del sistema ODBC en el panel de administración de ODBC. (DSN del sistema), y luego establezca un alias de base de datos (Alias) en el DBD o en el programa para que corresponda al DSN, de modo que pueda usar La base de datos se puede operar de forma segura. Creo que los programadores que han utilizado DELPHI para crear aplicaciones de bases de datos ya están familiarizados con este aspecto y no conozco a muchos. Dicho. En aplicaciones prácticas, el autor se ha encontrado con tal situación. Nuestra aplicación de base de datos se basa en la fuente de datos del sistema ODBC. El programa de aplicación que accede y opera la base de datos ha estado funcionando bien hasta que un día, una persona que está familiarizada con el sistema WINDOWS pero no está familiarizada con él. Los usuarios demasiado inteligentes modifican o eliminan accidentalmente nuestro sistema DSN preestablecido... Por lo tanto, el autor comenzó a estudiar cómo configurar dinámicamente el contenido del DSN del sistema ODBC en el programa, para poder ampliar mi propio programa. El orden es sólido. Después de un día entero investigando el registro de WINDOWS, finalmente encontré el secreto para configurar DSN con el administrador ODBC. ("¡Hay justicia en el cielo y en la tierra, y siempre serás recompensado por tus esfuerzos!" ¡Esto no es un anuncio!) Lo escribo para compartirlo con todos y también pido consejo a expertos. El secreto para configurar DSN mediante el programa de administración ODBC está en el registro. Si no lo cree, puede ir a HKEY_LOCAL_MACHINE/Software/ODBC. Échale un vistazo, seguro que te hará sentir que ya tienes la mitad del éxito. Primero, echemos un vistazo al controlador de base de datos ODBC instalado en el sistema. En HKEY_LOCAL_MACHINE/Software/ODBC/ ODBCInst.INI almacena información sobre el controlador de base de datos ODBC instalado. Desde aquí puede verificar el número ODBC instalado. Información como el archivo DLL correspondiente al controlador de la base de datos. En cada valor clave de los controladores ODBCInst.INI/ODBC, el nombre de la clave es el controlador El nombre (como Controlador de acceso de Microsoft (*.mdb)) y el valor de la clave son "Instalado", lo que indica que el controlador se ha instalado. existir ODBCInst.INI/DriverName (DriverName es un nombre de controlador, como Microsoft Access Driver (*.mdb)) , hay información detallada sobre el controlador. De aquí obtenemos principalmente la ruta y el nombre del archivo DLL correspondiente al controlador ODBC, es decir. El valor clave del nombre clave Controlador es generalmente "C:/WINDOWS/SYSTEM/FileName.DLL". Luego mire la información de registro del DSN del sistema en HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI, el sistema está almacenado. La información de registro de DSN, los parámetros de DSN que configuramos en el panel de administración de ODBC están aquí. Echemos un vistazo a los pasos para crear un DSN del sistema ODBC. Es decir, después de completar la configuración de parámetros en el panel de administración de ODBC, la administración de ODBC. ¿Cómo registra el programa la información del DSN en el registro? Tomemos como ejemplo la creación de un DSN de sistema tipo Ms Access97 llamado MyAccess. Los parámetros que especificamos incluyen principalmente el tipo de base de datos (Microsoft Access Driver (*.mdb)), nombre de la fuente de datos (MyAccess), Descripción de la fuente de datos (Mi ACCESO), ruta de la base de datos (C:/Inetpub/wwwroot/Test.mdb), otros parámetros como nombre de usuario, Contraseña de usuario, exclusiva, de solo lectura, base de datos del sistema, directorio predeterminado, tamaño del búfer, número de líneas de escaneo, tiempo de espera de página, etc., use el sistema Parámetros predeterminados. En este momento, el sistema de registro DSN generalmente debería tener los siguientes pasos: 1. Agregue una clave de cadena en HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/ODBC Data Sources El valor es MyAccess = Microsoft Access Driver(*.mdb), donde están el nombre de la fuente de datos y el tipo de base de datos respectivamente. Esto es para registrar un nombre DSN del sistema en el registro. 2. Cree una subclave (SubKey) MyAccess en HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI, es decir, cree Cree una clave como HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess y luego cree algunas Valor clave, una descripción detallada de la información de configuración de un sistema DSN. La información principal es (el contenido en [] es el comentario del autor): DBQ=C:/Inetpub/wwwroot/Test.mdb [Cadena, que indica la ruta de la base de datos] Descripción=Mi ACCESO [cadena, que representa la descripción de la base de datos] Driver=C:/PWIN98/System/odbcjt32.dll [Cadena, que indica el controlador, ODBCINST.INI visible] DriverId=0x00000019(25) [El número que indica la identificación del conductor no se puede cambiar] FIL=Ms Access; [Cadena, puede estar relacionada con el filtro] SafeTransaction=0x00000000 [Número, puede indicar la cantidad de operaciones transaccionales admitidas] UID="" [Cadena, que indica el nombre de usuario, aquí hay una cadena vacía] 3. Cree una subclave (SubKey)Engines en HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess, Luego cree una subclave (SubKey) Jet debajo de ella, es decir, cree una clave como HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess/Engines/Jet y cree algunos debajo Valor clave, que describe en detalle la información de configuración del motor de base de datos de un sistema DSN. La información principal es la siguiente (el contenido en [] es la anotación del autor): ImplicitCommitSync=Sí [Cadena, puede indicar si las modificaciones de datos se reflejan inmediatamente] MaxBufferSize=0x00000200(512) [número que indica el tamaño del búfer] PageTimeout=0x00000005(5) [número que indica el tiempo de espera de la página] Threads=0x00000003(3) [número, posiblemente indicando el número máximo de subprocesos admitidos] UserCommitSync=Sí [Cadena, puede indicar si las modificaciones de datos se reflejarán inmediatamente al usuario] Lo anterior es la información básica para establecer un DSN del sistema (aquí también se configura otra información como opciones u opciones avanzadas, pero debido a que el valor predeterminado información, que no figura en el registro), operamos el registro de acuerdo con los pasos anteriores en el programa, y también podemos agregar un DSN del sistema o modificar su configuración. En el siguiente programa de ejemplo, se creará un DSN del sistema de acuerdo con los pasos anteriores. Preste atención a los comentarios en el programa. {*************************************************** ***** ****** En este procedimiento, se creará una fuente de datos del sistema (DSN) ODBC, Nombre de la fuente de datos: MyAccess Descripción de la fuente de datos: Mi nueva fuente de datos Tipo de base de datos:ACCESS97 Base de datos correspondiente: C:/Inetpub/wwwroot/test.mdb ************************************************** * *****} {Tenga en cuenta que el Registro debe incluirse en la declaración USES} Procedimiento TForm1.Button1Click(Remitente: TObject); var registrarTemp: TRegistry; bData: matriz [0..0] de byte; comenzar RegisterTemp := TRegistry.Create //Crear una instancia de Registro con registroTemp hacer comenzar RootKey:=HKEY_LOCAL_MACHINE;//Establezca el valor de la clave raíz en HKEY_LOCAL_MACHINE //Buscar software/ODBC/ODBC.INI/fuentes de datos ODBC si OpenKey('Software/ODBC/ODBC.INI/Fuentes de datos ODBC', Verdadero) entonces comenzar //Registrar un nombre DSN WriteString('MiAcceso', 'Controlador de Microsoft Access (*.mdb)'); fin demás comenzar//Error al crear el valor clave memo1.lines.add('Error al agregar la fuente de datos ODBC'); salida; fin; CerrarClave; //Buscar o crear Software/ODBC/ODBC.INI/MyAccess y escribir información de configuración DSN si OpenKey('Software/ODBC/ODBC.INI/MyAccess',True) entonces comenzar WriteString( 'DBQ', 'C:/inetpub/wwwroot/test.mdb' );//Directorio de base de datos WriteString( 'Descripción', 'Mi nueva fuente de datos' );//Descripción de la fuente de datos WriteString( 'Controlador', 'C:/PWIN98/SYSTEM/odbcjt32.dll' );//Archivo DLL del controlador WriteInteger( 'DriverId', 25 );//ID del controlador WriteString( 'FIL', 'Ms Access;' );//Base del filtro WriteInteger( 'SafeTransaction', 0 );//Número de operaciones de transacción admitidas WriteString( 'UID', '' );//Nombre de usuario bDatos[0] := 0; WriteBinaryData( 'Exclusive', bData, 1 );//Modo no exclusivo WriteBinaryData( 'ReadOnly', bData, 1 );//Modo sin solo lectura fin else//Error al crear el valor clave comenzar memo1.lines.add('Error al agregar la fuente de datos ODBC'); salida; fin; CerrarClave; //Buscar o crear software/ODBC/ODBC.INI/MyAccess/Engines/Jet //Escribir información de configuración del motor de base de datos DSN si OpenKey('Software/ODBC/ODBC.INI/MyAccess/Engines/Jet',True) entonces comenzar WriteString('ImplicitCommitSync', 'Sí'); WriteInteger( 'MaxBufferSize', 512 );//Tamaño del búfer WriteInteger( 'PageTimeout', 10 ); //Tiempo de espera de la página WriteInteger( 'Threads', 3 );//El número de subprocesos admitidos WriteString('UserCommitSync', 'Sí'); fin else//Error al crear el valor clave comenzar memo1.lines.add('Error al agregar la fuente de datos ODBC'); salida; fin; CerrarClave; memo1.lines.add('Agregar nueva fuente de datos ODBC exitosamente'); Gratis; fin; fin; El programa anterior fue depurado y aprobado bajo PWIN98+DELPHI3.0. La siguiente es la información que se debe configurar para crear un DSN de tipos de bases de datos comunes ([] es el contenido del comentario, excepto los comentarios especiales, cada parámetro se puede ver en la descripción anterior): 1. Acceso (controlador de Microsoft Access (*.mdb)) DBQ, Descripción, Controlador[odbcjt32.dll], DriverID[25], FIL[Ms Access;], SafeTransaction[el valor predeterminado es 0], UID[el valor predeterminado es vacío], Engines/Jet/ImplicitCommitSync[el valor predeterminado es Sí], Engines/Jet/MaxBufferSize[el valor predeterminado es 512], Motores/Jet/PageTimeout [el valor predeterminado es 512], Motores/Jet/Threads [el valor predeterminado es 3], Motores/Jet/UserCommitSync [el valor predeterminado es Sí] Configuraciones opcionales: SystemDb[cadena, ruta a la base de datos del sistema], ReadOnly [binario, si se abre en modo de solo lectura, 1 significa sí, el valor predeterminado es 0], Exclusivo [binario, si se abre en modo exclusivo, 1 significa sí, el valor predeterminado es 0], PWD [cadena, contraseña de usuario] 2. Excel (controlador de Microsoft Excel (*.xls)) DBQ[Excel97(=ruta/xxx.xls), 5.0/7.0(=ruta/xxx.xls), 4.0(=ruta), 3.0(=ruta)], Descripción, Controlador[odbcjt32.dll], DirecciónPredeterminada[Excel97(<>DBQ),5.0/7.0(<>DBQ),4.0(=DBQ),3.0(=DBQ)], ID del controlador[790(Excel97), 22(5.0/7.0), 278(4.0), 534(3.0)], FIL[Excel5.0;], Sólo lectura, SafeTransaction, UID, Engines/Excel/ImplicitCommitSync, Engines/Excel/MaxScanRows[número, número de filas escaneadas, el valor predeterminado es 8], Motores/Excel/Subprocesos、Motores/Excel/UserCommitSync、 Engines/Excel/FirstRowHasName[binario, si la primera fila es el nombre de dominio, 1 significa sí, el valor predeterminado es 1] Nota: DBQ de Excel97 y Excel7.0/5.0 corresponde a un archivo XLS, mientras que Excel4.0 y Excel3.0 corresponden a un directorio; DefaultDir corresponde a un directorio, que es la ruta correspondiente a DBQ en Excel97 y Excel7.0/5.0. Es lo mismo que DBQ en Excel4.0 y Excel3.0; el DriverID de cada versión es diferente. 3. dBase (controlador Microsoft dBase (*.dbf)) DefaultDir[cadena, directorio donde se encuentra el archivo de base de datos], Descripción, Controlador[odbcjt32.dll], DriverID[277(IV), 533(5.0)], FIL[dbase III;], SafeTransaction, UID, Motores/Xbase/ImplicitCommitSync, Engines/Xbase/Collating[Cadena, base de clasificación, puede ser ASCII, internacional, noruego-danés, sueco-finlandés], Engines/Xbase/Deleted[binario, si no se muestran registros eliminados temporalmente, 0 significa mostrar, el valor predeterminado es 1], Engines/Xbase/PageTimeout [el valor predeterminado es 600], Engines/Xbase/UserCommitSync, Engines/Xbase/Threads, Engines/Xbase/Statistics [binario, si se usa el número aproximado de líneas, 1 significa sí, predeterminado 0] Nota: (El DriverId de las dos versiones de dBaseIV y dBase5.0 es diferente) 4. Foxpro (controlador Microsoft Foxpro (*.dbf)) DefaultDir[el directorio donde se encuentra el archivo de la base de datos], Descripción, Controlador[odbcjt32.dll], DriverID[536(2.6), 280(2.5)], FIL[Foxpro 2.0;], SafeTransaction, UID, Engines/Xbase/Collating[Cadena, base de clasificación, puede ser ASCII, internacional], Engines/Xbase/Deleted[binario, si no se muestran registros eliminados temporalmente, 0 significa mostrar, el valor predeterminado es 1], Engines/Xbase/PageTimeout [el valor predeterminado es 600], Engines/Xbase/UserCommitSync, Engines/Xbase/Threads, Engines/Xbase/Statistics [binario, si se usa el número aproximado de líneas, 1 significa sí, predeterminado 0] Nota: (El DriverId de las versiones Foxpro2.5 y Foxpro2.6 son diferentes) Convierta el programa anterior en un control COM o ActiveX, que se puede utilizar en muchos lenguajes de programación de alto nivel como DELPHI, C++Buider, VB, VC y PB. |