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, la excepción es ASP. Un día tuve una idea. El objeto ADO es un objeto OLE estándar. Sería fantástico si ADO pudiera usarse 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 usar objetos ADO para acceder a la base de datos ODBC sin cargar un BDE tan grande en el sitio, de modo que pueda utilizar completamente el 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 la base de datos ODBC en DELPHI. Ahora escribiré la experiencia y la compartiré con usted.
---- 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 base de datos, luego puede utilizar los métodos y propiedades del objeto 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 de base de datos (ADODB.Connection)
---- 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('ADODB.Conexión')
---- El método utilizado para establecer una conexión es Abierto y la sintaxis de uso es (tome 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, utilizados para acceder
---- Utilizado en la base de datos, se puede omitir porque el nombre de usuario y la contraseña del 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, el valor predeterminado es MSDASQL, es Microsoft OLEDB, generalmente omitido
---- DSN: La fuente de datos del sistema OBDC (DSN) correspondiente a la base de datos a abrir, que es un parámetro opcional.
---- CONDUCTOR: El nombre del controlador utilizado para abrir la base de datos, como el acceso correspondiente
----Microsoft Access Driver(*.mdb), es un parámetro opcional
---- SERVIDOR: El nombre del servidor donde se encuentra la base de datos a abrir. Está disponible en esta máquina (local) y es un parámetro opcional.
---- BASE DE DATOS: El nombre de la base de datos que se abrirá, 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 todos parámetros opcionales, pero se debe proporcionar suficiente información para describir una fuente de datos del sistema.
---- Si se ha definido un DSN del sistema ODBC, denominado MyDsn, puede utilizar la siguiente declaración para establecer una conexión a la 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 DSN del sistema. utilizamos son correctos. La siguiente declaración puede crear un DSN del sistema ODBC temporal, correspondiente a una base de datos ACCESS, la ruta es
C:Inetpubwwwrootest.mdb AConnection.open('Driver={Controlador de Microsoft Access (*.mdb)};DBQ=C:inetpubwwwrootest.mdb')
---- Después de establecer una conexión ADODB, si no necesita 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, utilice otra. método Ejecutar de ADODB.Connection La sintaxis de uso 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 funciona 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 Variante):
----
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,intCursorType,intLockType,intCommandType);
---- Entre ellos: 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. Es necesario especificar el parámetro intCommandType.
---- ActiveConnection: La conexión de base de datos que se utilizará es un objeto ADODB.Connection.
---- 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). Para parámetros opcionales, consulte Comentarios en el programa.
---- Si ejecuta una consulta SQL, puede utilizar la siguiente declaración:
ARecordSet.Open('Seleccione * de wfjcommu',adOpenStatic,adLockOptimistic,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[FieldNo]:Campos[FieldNo]Campos['FieldName']:FieldByName('FieldName')
---- 3. Otros objetos comunes (objetos correspondientes a Delphi):
----
ADODB.Field: TFieldADODB.Parameter: TParaADODB.Error: EDBEngineErrorADODB.Command: Ninguno ADODB.Property: Ninguno
---- Echemos un vistazo a un ejemplo de aplicación. Es mejor escuchar lo que dicen los demás que ver el ejemplo real usted mismo. 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.
---- En nuestro ejemplo, la base de datos utilizada es Test.MDB. Hay una tabla de datos llamada wfjcommu, que tiene cinco campos: AName, Portable, Tel, BP y PostAddress, que representan el nombre, el número de teléfono móvil y el número de teléfono. y número de buscapersonas respectivamente.
----
procedimiento TForm1.Button1Click(Remitente: TObject);{*************************************** *** ****************
---- Utilice ADO para operar la base de datos ODBC. En este programa, se creará una fuente de datos del sistema ODBC temporal, que apuntará a una base de datos MsAccess, y luego se mostrarán, agregarán, modificarán y consultarán las tablas de datos que contiene. Nota: haga clic en Usos. La declaración contiene la unidad ComObj.
************************************************** * ***}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 la 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;//La adición, modificación y eliminación de datos por parte de otros usuarios son visibles adOpenStatic = 3;//La adición, modificación y eliminación 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 según un único registro adLockOptimistic = 3;//Bloquear por un solo registro al actualizar después de la modificación adLockBatchOptimistic = 4;//Bloquear el registro al actualizar en lotes var AConnection, ARecordSet: variante longintTemp: integer; intIndex: integer;begin {Crear un temporal; Fuente de datos ODBC, que apunta a una base de datos de MsAccess y utiliza este DSN para establecer una conexión de base de datos} AConnection := CreateOleObject('ADODB.Connection'); AConnection.Open('Driver={Microsoft Access Driver (*.mdb)};DBQ=C:inetpubwwwrootest'); {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.lines.clear; memo1.lines.add('********El contenido original de la tabla de datos es el siguiente*******'); Mostrar cada nombre de dominio de campo} strTemp := ' para intIndex := 0 a ARecordSet.Fields.count - 1 do strTemp := strTemp + ARecordSet.Fields[intIndex].name+';'; memo1.lines.add( strTemp ); {Mostrar el contenido de cada campo} mientras no sea ARecordSet.eof, comience strTemp := '; contar - 1 hacer strTemp := strTemp + ARecordSet.Fields. [intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext;// Pasar a la siguiente línea, Siguiente fin {Agregar un registro} ARecordSet.AddNew;// Agregar, agregar ARecordSet.Fields [ 'AName'] := '1'; //Accede a ARecordSet.Fields['Portable'] usando FieldByName := '2'; ARecordSet.Fields(2) := '3'; //Accede a ARecordSet.Fields(3) := '4'; ARecordSet.Fields(4) := '5' en forma de campos[índice] ; 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*********'); {muestra el contenido de cada campo} mientras no sea ARecordSet. .eof comenzar strTemp := ';for intIndex := 0 a ARecordSet.Fields.count - 1 hacer strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext; // Pasar al siguiente registro, Siguiente fin; {Modificar el último registro} ARecordSet.MoveLast; ARecordSet.Fields['AName'] := '11'; 'Portátil'] := '22'; ARecordSet.Fields(2) := '33'; //Acceder a ARecordSet.Fields(3) como Fields[index] := '44'; ARecordSet.Fields(4) := '55'; ARecordSet.Update;//Actualizar, publicar ARecordSet.MoveFirst;// Mover al primer elemento, Primer memo1.lines.add('********El contenido de la tabla de datos después de modificar el último registro es el siguiente************'); el contenido de cada campo } mientras no ARecordSet.eof comienza strTemp := ';para intIndex := 0 a ARecordSet.Fields.count - 1 hace strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext;// Pasar al siguiente registro, Siguiente fin; {Eliminar el último registro} ARecordSet.MoveLast;//Mover a la última línea, Última ARecordSet.delete;//Eliminar, eliminar ARecordSet.Update;//Actualizar, no es necesario en Delphi ARecordSet.MoveFirst;//Mover a la primera línea, Primera 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 campo} mientras no sea ARecordSet.eof. empieza strTemp := '; para intIndex := 0 a ARecordSet.Fields.count - 1 hacer strTemp := strTemp + ARecordSet Fields[intIndex].value+';';memo1.lines.add( ARecordSet.MoveNext;/ /Ir a la siguiente barra, Siguiente fin; ARecordSet.Close;{Cerrar el conjunto de datos} {Utilice una declaración SQL para consultar, consulte registros llamados "Zhang San"} {Tenga en cuenta que en la declaración SQL, la cadena debe estar entre comillas simples} ARecordSet.open( 'select * from wfjcommu donde AName = 'Zhang San' ', AConnection,adOpenStatic,adLockOptimistic, adCmdText ); memo1.lines.add('********El contenido de Zhang San es el siguiente*******'); + IntToStr (ARecordSet.RecordCount) + 'registros coincidentes'); {muestra el contenido de cada campo} mientras no ARecordSet.eof comienza strTemp := ' para intIndex := 0 a ARecordSet.Fields.count - 1 do strTemp : = strTemp + ARecordSet.Fields [intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext;// Pasar a la siguiente barra, Siguiente fin; {Cerrar el conjunto de datos y la conexión de la base de datos} ARecordSet.close;