Utilice objetos ADO para acceder a datos ODBC en programas DELPHI
-------------------------------------------------- ----------------------------------
Como entusiasta de ASP, a menudo uso objetos ADO en páginas ASP para operar bases de datos ODBC. Creo que es muy conveniente usar ASP para crear sistemas de aplicaciones web. Aunque en mi carrera de programación el autor prefiere los productos de la serie Borland y es un poco repulsivo con los productos de Microsoft, yo soy una excepción con ASP. Un día, de repente se me ocurrió que el objeto ADO es un objeto OLE estándar. Sería fantástico si se pudiera utilizar ADO para operar la base de datos en una aplicación Delphi. Especialmente cuando se utiliza DELPHI como aplicación de base de datos de red, si el sitio web es un sitio WINNT y admite páginas ASP, puede utilizar objetos ADO para acceder a la base de datos ODBC sin cargar un BDE tan grande en el sitio. De esta manera, puede aprovechar al máximo las ventajas de programación de DELPHI y ASP para mejorar ISAPI/NSAPI/CGI. Después de programar y probar, puede utilizar con éxito objetos ADO para acceder a bases de datos ODBC en Delphi. Ahora escribiré mi experiencia y la compartiré con todos, para que podamos tener otro método para acceder a bases de datos ODBC.
En Delphi de 32 bits, puede declarar una variable variante (como AVariant) y luego crear un objeto OLE a través de CreateOleObject, como AVariant:=CreateOleObject ('ADODB.Connection') para obtener una instancia del objeto de conexión de la base de datos. y luego puedes usar Los métodos y propiedades de este objeto se utilizan para operar la base de datos ODBC.
La siguiente es una breve introducción a los objetos ADO utilizados para acceder a bases de datos ODBC y sus métodos y propiedades.
1. Objeto de conexión a la base de datos (ADODB. Conexión)
Este objeto se utiliza para establecer una conexión con la base de datos ODBC y todas las operaciones en la base de datos se realizan a través de esta conexión.
El objeto de conexión de base de datos ADODB Connection funciona como el objeto TDatabase en Delphi.
El método para establecer un objeto de conexión es (AConnection es una variable de tipo Variant):
AConnection:=CreateOleObject('Una conexión DODB')
El método utilizado para establecer una conexión es Abierto y la sintaxis de uso es (tomando el objeto AConnection como ejemplo):
AConnection.Open( Cadena de conexión, ID de usuario, Contraseña )
Los tres parámetros son todos de tipo cadena, donde UserId y Contraseña son el nombre de usuario y la contraseña de usuario, que se pueden omitir cuando se usan para acceder a la base de datos, porque el nombre de usuario y la contraseña de usuario también se pueden especificar en ConnectionString. ConnectionString es una cadena utilizada para describir la información del origen de datos ODBC. Su formato es:
'PRovider=Nombre del Proveedor; DSN=Nombre DSN; CONDUCTOR=controlador; SERVIDOR=servidor; base de datos UID=usuario;
en:
Proveedor: proveedor de datos, MSDASQL por defecto, Microsoft OLEDB, normalmente omitido;
DSN: La fuente de datos del sistema OBDC (DSN) correspondiente a la base de datos a abrir es un parámetro opcional;
DRIVER: El nombre del controlador utilizado en la base de datos a abrir, como el acceso correspondiente al Microsoft Access Driver (*.mdb), que es un parámetro opcional;
SERVIDOR: El nombre del servidor donde se encuentra la base de datos a abrir, disponible en esta máquina (local), y es un parámetro opcional;
BASE DE DATOS: El nombre de la base de datos a abrir, que es un parámetro opcional;
UID: el nombre de usuario, utilizado para acceder a la base de datos, es un parámetro opcional;
PWD: La contraseña de usuario, utilizada para acceder a la base de datos, es un parámetro opcional.
Los parámetros anteriores son opcionales, pero se debe proporcionar suficiente información para describir una fuente de datos del sistema.
Si se ha definido un DSN de sistema ODBC y se denomina MyDsn, puede utilizar la siguiente declaración para establecer una conexión de base de datos:
AConnection.Open('DSN=MiDsn');
Para evitar errores de ejecución de la aplicación cuando el DSN no existe o su configuración es modificada por otros, puede usar ADODB.Connection para crear una fuente de datos ODBC temporal. Esto puede garantizar que la configuración de los parámetros del sistema DSN que utilizamos sea correcta. . La siguiente declaración puede crear un DSN temporal del sistema ODBC, correspondiente a una base de datos ACCESS, la ruta es C:Inetpub wwwroot test.mdb:
AConnection.open('Driver= {Controlador de Microsoft Access (*.mdb)};DBQ=C:inetpub wwwroot est.mdb')
Después de establecer una ADODB.Connection, si no es necesario devolver los resultados de la operación (como eliminación, modificación, actualización, etc.), puede realizar operaciones SQL normales en la base de datos. En este momento, se puede usar otro método de ADODB.Connection. , Ejecutar, se utiliza. La sintaxis es:
AConnection.Execute( strSQL );
Entre ellos, strSQL es la declaración SQL para realizar la operación. Por ejemplo, la operación de eliminación puede ser: eliminar de wfjcommu. Utilice AConnection.Close para cerrar una conexión de base de datos.
2. Objeto de conjunto de datos (ADODB. RecordSet)
Si desea realizar operaciones de consulta y devolver resultados de la consulta, o si desea operar la tabla de datos de manera más conveniente, debe utilizar el objeto de conjunto de datos.
El objeto de conjunto de datos ADODB.RecordSet actúa como un objeto TTable o TQuery en Delphi.
El método para crear un objeto de conjunto de datos es (ARecordSet es una variable de tipo Variant):
ARecordSet:=CreateOleObject ('ADODB.RecordSet')
El método para obtener datos de la tabla de datos es el método Abierto. El método de uso específico es:
ARecordSet.Open( strCommand,ActiveConnection,int CursorType,intLockType, intCommandType);
en:
strCommand: cadena, que es un parámetro de comando. Puede ser un nombre de tabla, una declaración SQL o un nombre de procedimiento almacenado (StoredProc) en el servidor. El parámetro específico debe especificarse mediante el siguiente parámetro intCommandType.
ActiveConnection: la conexión de base de datos que se utilizará es un objeto de conexión ADODB.
intCursorType: entero largo, tipo de cursor del conjunto de datos, parámetros opcionales, consulte los comentarios en el programa.
intLockType: entero largo, tipo de bloqueo de la tabla de datos, parámetros opcionales, consulte los comentarios en el programa.
intCommandType: entero largo, el tipo de parámetro de comando, utilizado para indicar la función de strCommand. Puede especificar strCommand como un comando (como una declaración SQL) o una tabla de datos (TTable) o un procedimiento almacenado (StoredProc). parámetros, consulte los comentarios en el programa.
Para ejecutar una consulta SQL, puede utilizar la siguiente declaración:
ARecordSet.Open('Seleccione * de wfjcommu',adOpenStatic,ad LockOptimistic,adCmdText);
Otras propiedades y métodos comunes en comparación con TTable y TQuery son los siguientes (consulte el archivo de ayuda de ASP para obtener más detalles):
eof,bof: eof,bof. MoveFirst, MoveLast: Primero, LastMovePrevious, MoveNext: Anterior, NextMove: MoveByAddNew: appendUpdate: PostClose: cerrar
Eliminar más Actualización: eliminar, todas las modificaciones a la tabla de datos deben usar Actualización para que la operación sea efectiva, que es diferente de Delphi.
Campos[NºCampo]: Campos[NºCampo]
Campos['Nombre de campo']: CampoPorNombre('Nombre de campo')
3. Otros objetos comunes (objetos correspondientes a Delphi):
ADODB.Campo: TField ADODB.Parámetro: TPara ADODB.Error: EDBEngineError
ADODB.Comando: Ninguno ADODB.Propiedad: Ninguna
Veamos un ejemplo de aplicación:
procedimiento TForm1.Button1Click (Remitente: TObject);
{*************************************************** ***** ****
Utilice ADO para operar la base de datos ODBC
En este programa, se creará una fuente de datos temporal del sistema ODBC, que apuntará a una base de datos de MsAccess, y luego se mostrarán, agregarán, modificarán, eliminarán y consultarán las tablas de datos que contiene.
NOTA: incluya la unidad ComObj en la declaración de usos.
************************************************** * ***}
const{Algunas declaraciones constantes, consulte adovbs.inc para obtener más detalles}
{----Descripción constante de CommandType----}
adCmdUnknown = 0008;// Desconocido, debe ser juzgado por el sistema, lento, valor predeterminado
adCmdText = 0001;//Declaración de comando como una declaración SQL
adCmdTable = 0002; //Nombre de la tabla de datos
adCmdStoredProc = 0004;//Nombre del procedimiento almacenado
{----Descripción constante de CursorType----}
adOpenForwardOnly = 0;//solo se puede acceder en una dirección de adelante hacia atrás, que es el valor predeterminado
adOpenKeyset = 1;//Las modificaciones de los datos realizadas por otros usuarios son visibles, pero las adiciones y eliminaciones realizadas por otros usuarios no son visibles.
adOpenDynamic = 2; //Las adiciones, modificaciones y eliminaciones de datos por parte de otros usuarios son visibles
adOpenStatic = 3; //Las adiciones, modificaciones y eliminaciones de datos por parte de otros usuarios no son visibles
{----Descripción constante de LockType---}
adLockReadOnly = 1; //Solo lectura, el valor predeterminado
adLockPessimistic = 2; //Al modificar, bloquear por registro único
adLockOptimistic = 3; //Al actualizar después de la modificación, bloquear por registro único
adLockBatchOptimistic = 4; //Bloqueo de registro durante la actualización por lotes
var
AConnection, ARecordSet: variante;
longintTemp: entero;
strTemp: cadena;
intÍndice: entero;
comenzar
{Cree una fuente de datos ODBC temporal, apunte a una base de datos de MsAccess y use este DSN para establecer una conexión de base de datos}
AConnection := CreateOleObject('ADODB.Connection');
AConnection.Open('Driver={Microsoft Access Driver (*.mdb)};DBQ=C:inetpubwwwroot est');
{Crear un objeto de conjunto de datos y extraer datos de la tabla de datos}
ARecordSet := CreateOleObject('ADODB.RecordSet');
ARecordSet.open( 'wfjcommu',AConnection,adOpenStatic,adLockOptimistic,adCmdTable );
memo1.líneas.claro;
memo1.lines.add('El contenido original de la tabla de datos ******** es el siguiente*******');
{Mostrar el nombre de dominio de cada dominio}
strTemp := '';
para intIndex: = 0 a ARecordSet.Fields.count - 1 hacer
strTemp := strTemp + ARecordSet.Fields[intIndex].nombre+';';
memo1.lines.add( strTemp );
{Mostrar el contenido de cada dominio}
mientras que ARecordSet.eof no lo hace
comenzar
strTemp := '';
para intIndex: = 0 a ARecordSet.Fields.count - 1 hacer
strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';
memo1.lines.add( strTemp );
ARecordSet.MoveNext;//Pasar a la siguiente barra, Siguiente
fin;
{Agregar un registro}
ARecordSet.AddNew;//Agregar,Agregar
ARecordSet.Fields['AName'] := '1';//Acceso por FieldByName
ARecordSet.Fields['Portátil'] := '2';
ARecordSet.Fields(2) := '3';//Acceso en forma de Campos[índice]
ARecordSet.Fields(3) := '4';
ARecordSet.Fields(4) := '5';
ARecordSet.Update;//Actualizar, Publicar
ARecordSet.MoveFirst;//Mover al primer elemento, Primero
memo1.lines.add('********El contenido de la tabla de datos después de agregar un registro es el siguiente*********');
{Mostrar el contenido de cada dominio}
mientras que ARecordSet.eof no lo hace
comenzar
strTemp := '';
para intIndex: = 0 a ARecordSet.Fields.count - 1 hacer
strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';
memo1.lines.add( strTemp );
ARecordSet.MoveNext;//Pasar a la siguiente barra, Siguiente
fin;
{Modificar el último registro}
ARecordSet.MoveLast;
ARecordSet.Fields['AName'] := '11';//Acceso usando FieldByName
ARecordSet.Fields['Portátil'] := '22';
ARecordSet.Fields(2) := '33';//Acceso en forma de Campos[index]
ARecordSet.Fields(3) := '44';
ARecordSet.Fields(4) := '55';
ARecordSet.Update;//Actualizar, Publicar
ARecordSet.MoveFirst;//Mover al primer elemento, Primero
memo1.lines.add('********El contenido de la tabla de datos después de modificar el último registro es el siguiente********');
{Mostrar el contenido de cada dominio}
mientras que ARecordSet.eof no lo hace
comenzar
strTemp := '';
para intIndex: = 0 a ARecordSet.Fields.count - 1 hacer
strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';
memo1.lines.add( strTemp );
ARecordSet.MoveNext;//Pasar a la siguiente barra, Siguiente
fin;
{eliminar el último registro}
ARecordSet.MoveLast;//Mover al último compás, Último
ARecordSet.delete;// Eliminar, eliminar
ARecordSet.Update;//Actualización, no necesaria en Delphi
ARecordSet.MoveFirst;//Mover al primer elemento, Primero
memo1.lines.add('********El contenido de la tabla de datos después de eliminar el último registro es el siguiente********');
{Mostrar el contenido de cada dominio}
mientras que ARecordSet.eof no lo hace
comenzar
strTemp := '';
para intIndex: = 0 a ARecordSet.Fields.count - 1 hacer
strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';
memo1.lines.add( strTemp );
ARecordSet.MoveNext;//Pasar a la siguiente barra, Siguiente
fin;
ARecordSet.Close;{Cerrar el conjunto de datos}
{Utilice una declaración SQL para consultar los registros denominados "Zhang San"}
{Tenga en cuenta que en las declaraciones SQL, las cadenas deben estar entre comillas simples}
ARecordSet.open( 'seleccione * de wfjcommu donde AName = ''Zhang San''',
AConnection,adOpenStatic,adLockOptimistic,adCmdText);
memo1.lines.add('********El contenido de Zhang San es el siguiente*******');
memo1.lines.add( 'Total' + IntToStr( ARecordSet.RecordCount ) + 'Registros coincidentes' );
{Mostrar el contenido de cada dominio}
mientras que ARecordSet.eof no lo hace
comenzar
strTemp := '';
para intIndex: = 0 a ARecordSet.Fields.count - 1 hacer
strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';
memo1.lines.add( strTemp );
ARecordSet.MoveNext;//Pasar a la siguiente barra, Siguiente
fin;
{Cerrar conjunto de datos y conexión de base de datos}
ARecordSet.cerrar;
AConexión.cerrar;
fin;
Escuchar a otros decir que es mejor experimentarlo uno mismo viendo ejemplos reales. En este ejemplo, demostraremos cómo utilizar objetos ADO para consultar, agregar registros, modificar registros y eliminar registros en una tabla de datos. Consulte los comentarios del programa para conocer el uso específico. Si tiene alguna experiencia en la programación de bases de datos Delphi, creo que no es difícil de entender.
La base de datos utilizada en nuestro ejemplo es Test.MDB, que tiene una tabla de datos llamada wfjcommu, con cinco campos AName, Portable, Tel, BP y PostAddress, que representan nombre, número de teléfono móvil, número de teléfono, número de buscapersonas y dirección postal. respectivamente.
El programa anterior fue depurado y aprobado bajo PWIN98+ Delphi 3.0+PWS (Personal Web Server) 4.0.