Utilice objetos ADO para acceder a la base de datos ODBC en el programa DELPHI
Como entusiasta de ASP, a menudo uso objetos ADO en páginas ASP para operar bases de datos ODBC. Creo que usar ASP para crear sistemas de aplicaciones web es realmente muy conveniente, aunque en mi carrera de programación prefiero la serie Borland. productos a productos de Microsoft Un poco repulsivo, pero es una excepción para ASP. Un día, de repente se me ocurrió que el objeto ADO es un objeto OLE estándar. Sería genial si se pudiera usar ADO para operar la base de datos. Aplicación Delphi, especialmente cuando se usa DELPHI para crear una aplicación de base de datos de red, y si el sitio web es WINNT. Si el sitio 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 esta manera, puede aprovechar al máximo las ventajas de programación de DELPHI y ASP para mejorar ISAPI/NSAPI/CGI a través de la programación y he probado que puedo usar con éxito objetos ADO para acceder a la base de datos ODBC en Delphi. Ahora escribiré mi. experiencia de uso y compártala con todos. Tengamos un método más para acceder a la base de datos ODBC
Si está en Delphi, puede declarar una variable variante (como AVariant) y luego crear un objeto OLE como como AVariant a través de CreateOleObject: = CreateOleObject (Conexión ADODB) puede obtener una instancia del objeto de conexión de la base de datos y luego usar los métodos y propiedades del objeto para operar la base de datos ODBC. La siguiente es una breve introducción. Echemos un vistazo a los objetos ADO. y sus métodos y propiedades utilizados para acceder a la base de datos ODBC
Objeto de conexión de base de datos (Conexión ADODB) Este objeto se utiliza para establecer una conexión con la base de datos ODBC. Todas las operaciones en la base de datos se realizan a través de esta conexión. Objeto de conexión La función de ADODB Connection es como el objeto TDatabase en Delphi. El método para establecer un objeto de conexión es (AConnection es una variable de tipo Variante) AConnection:=CreateOleObject(A DODB Connection). La sintaxis es (tome el objeto AConnection como ejemplo) ) AConnection Open(ConnectionString UserId Contraseña) Los tres parámetros son todos tipos de cadena. UserId y Contraseña son el nombre de usuario y la contraseña de usuario. Se pueden omitir cuando se utilizan 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 se utiliza para ilustrar. El formato de la cadena de información del origen de datos ODBC es Provider=ProviderName; UID=usuario; PWD=contraseña El proveedor de datos del proveedor es MSDASQL por defecto y es Microsoft OLEDB. El DSN generalmente se omite. La fuente de datos del sistema OBDC (DSN) correspondiente a la base de datos que se va a abrir es un parámetro opcional. nombre del controlador utilizado para la base de datos que se va a abrir, como Access, que corresponde al controlador Microsoft Access (* mdb). El parámetro opcional SERVIDOR es la ubicación de la base de datos que se va a abrir. El nombre del servidor disponible en esta máquina (local). un parámetro opcional DATABASE El nombre de la base de datos que se va a abrir es un parámetro opcional UID El nombre de usuario utilizado para acceder a la base de datos es un parámetro opcional PW
D 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 nombre DSN del sistema ODBC es MyDsn, entonces se ha definido lo siguiente. La declaración se puede usar para crear una base de datos. Connect AConnection Open(DSN=MyDsn); Para evitar que la aplicación ejecute errores cuando el DSN no existe o su configuración es modificada por otros, puede usar ADODB Connection para crear una conexión temporal. Fuente de datos ODBC Esto puede garantizar que la configuración de los parámetros del DSN del sistema que utilizamos sea correcta. La siguiente declaración puede crear un DSN del sistema ODBC temporal correspondiente a una ruta de base de datos ACCESS C:\Inetpub\ root\ test mdb AConnection (Driver=). {Microsoft Access Driver (* mdb)}; DBQ=C:\inetpub \root\test 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.) En este momento, se utiliza otro método de conexión ADODB, Ejecutar, y la sintaxis es AConnection Execute (strSQL). Entre ellos, strSQL es la declaración SQL para realizar la operación. , la operación de eliminación se puede eliminar de wfjmu. Utilice AConnection Close para cerrar un objeto de conjunto de datos de conexión de base de datos (ADODB RecordSet). Si desea realizar operaciones de consulta y devolver resultados de consulta u operar la tabla de datos de manera más conveniente, necesita el conjunto de datos. El objeto de conjunto de datos ADODB RecordSet funciona como el 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) Obtener datos de los datos. table El método es el método Open. El método de uso específico es ARecordSet Open( strCommand ActiveConnection int CursorType intLockType intCommandType donde la cadena strCommand es el parámetro de comando, que puede ser un nombre de tabla, una declaración SQL o un procedimiento almacenado (StoredProc); ) nombre en el servidor. Se requiere el siguiente parámetro intCommandType para especificar ActiveConnection. La conexión de base de datos que se utilizará es un objeto de conexión ADODB intCursorType. Para los parámetros opcionales de tipo Cursor del conjunto de datos de entero largo, consulte las notas del programa. intLockType. Para conocer el tipo de bloqueo de entero largo de la tabla de datos, consulte el programa. Nota El tipo de parámetro de comando de entero largo intCommand se utiliza para especificar la función de strCommand. Puede especificar strCommand como un comando (como una declaración SQL). o tabla de datos (TTable) o procedimiento almacenado (StoredProc). Para parámetros opcionales, consulte los comentarios en el programa, como ejecutar una consulta SQL. Puede usar la siguiente declaración ARecordSet Open(Select * from wfjmu adOpenStatic ad LockOptimistic adCmdText). ; Se comparan otras propiedades y métodos comunes con TTable y TQuery, como;
(Consulte el archivo de ayuda de ASP para obtener más detalles) eof bof: eof bof. MoveFirst MoveLast: First LastMovePrevious MoveNext: Previous NextMove: MoveByAddNew: appendUpdate: PostClose: cerrar Eliminar más Actualizar eliminar Todas las modificaciones a la tabla de datos deben usar Actualizar para que la operación sea válida. Esto es diferente de Campos[FieldNo]: Fields[FieldNo. ]Fields[FieldName]: FieldByName (FieldName) Otros objetos comunes (objetos correspondientes a Delphi) Campo ADODB: TField Parámetro ADODB: TPara Error ADODB: EDBEngineErrorADODB Comando Ninguno Propiedad ADODB Ninguna Veamos un procedimiento de ejemplo de aplicación Clic en el botón TForm (Remitente: TObject ); { *********************************************** **** ***Utilice ADO para operar la base de datos ODBC. Este programa creará una fuente de datos del sistema ODBC temporal que apunta a una base de datos de MsAccess y luego mostrará las tablas de datos en ella, agregará modificaciones, eliminará y consultará las operaciones. Unidad ComObj en la declaración Uses*** ******************************************* ********** }const{Consulte adovbs inc para obtener detalles de algunas declaraciones constantes}{Descripción constante de CommandType}adCmdUnknown = //Desconocido necesita que el sistema juzgue la velocidad lenta como valor predeterminado adCmdText =; //Declaraciones de comando como declaraciones SQL adCmdTable =; //Nombre de la tabla de datos adCmdStoredProc =; //Nombre del procedimiento almacenado
{Descripción constante de CursorType} adOpenForwardOnly =; dirección de adelante hacia atrás como valor predeterminado adOpenKeyset = //Visible para otros usuarios Las modificaciones de datos no son visibles para las adiciones y eliminaciones de otros usuarios adOpenDynamic = //Las adiciones, modificaciones y eliminaciones de datos realizadas por otros usuarios son visibles adOpenStatic; = ; //Las adiciones, modificaciones y eliminaciones de datos realizadas por otros usuarios no son visibles
{Descripción constante de LockType} adLockReadOnly = ; // Solo lectura es el valor predeterminado adLockPessimistic = ; un solo registro al modificar adLockOptimistic = ; // Bloqueo por un solo registro al actualizar después de la modificación adLockBatchOptimistic = ; / / Bloqueo de registros durante las actualizaciones por lotes varAConnection ARecordSet: longintTemp: integer: string intIndex: integer; fuente de datos ODBC temporal que apunta a una base de datos MsAccess y establece una conexión de base de datos usando este DSN}AConnection:= CreateOleObject(ADODB Connection);AConnection Open(
Driver={Microsoft Access Driver (* mdb)}; DBQ=C:\inetpub\root\test
{Crear un objeto de conjunto de datos y extraerlo de los datos. table Data}ARecordSet:= CreateOleObject( ADODB RecordSet); ARecordSet open( wfjmu AConnection adOpenStatic adLockOptimistic adCmdTable);
líneas de notas claras; ********Contenido original de los datos. table Como sigue*******);{muestra el nombre de dominio de cada dominio}strTemp:=;for intIndex:= to ARecordSet Fields count dostrTemp:= strTemp ARecordSet Fields[intIndex] nombre;;líneas de notas add( strTemp);
{Mostrar el contenido de cada campo}mientras no sea ARecordSet eof dobeginstrTemp:=; para intIndex:= a ARecordSet Fields count dostrTemp:= strTemp ARecordSet Fields[intIndex] valor;;las líneas de notas agregan( strTemp);ARecordSet MoveNext ; //Mover a nextNextend;
{Agregar un registro}ARecordSet AddNew; //Agregar AppendARecordSet Fields[AName]:=;//Acceder a ARecordSet Fields[Portable] usando FieldByName:= ;ARecordSet Fields( ) := ; //Acceder a ARecordSet como Fields[index] Fields( ) := ;ARecordSet Fields( ) := ;ARecordSet Update //Actualizar PostARecordSet MoveFirst //Moverse a las primeras líneas de Firstmemo add( * *******El contenido de la tabla de datos después de agregar un registro es el siguiente*******);{Mostrar el contenido de cada campo}mientras no sea ARecordSet eof dobeginstrTemp:=;for intIndex:= a ARecordSet Fields count dostrTemp:= strTemp ARecordSet Fields[intIndex] value; ARecordSet Fields[AName]:= //Acceder a ARecordSet Fields[Portable] como FieldByName:=;ARecordSet Fields():=;//Acceder como campo
Acceda a ARecordSet Fields() usando s[index]:=;ARecordSet Fields():=;ARecordSet Update;//Actualizar PostARecordSet MoveFirst;//Mover a las primeras líneas de Firstmemo add(********modificación El contenido de la tabla de datos después de agregar el último registro es el siguiente ********); {Mostrar el contenido de cada campo} mientras no ARecordSet eof dobeginstrTemp:= for intIndex:= to ARecordSet Fields count dostrTemp:= strTemp; ARecordSet Fields [intIndex] value; líneas de notas add( strTemp); ARecordSet MoveNext; // Pasar al siguiente registro Next;
{Eliminar el último registro} ARecordSet MoveLast; // Pasar al último registro LastARecordSet; eliminar;/ /Eliminar eliminarARecordSet Update; //La actualización no requiere ARecordSet en Delphi MoveFirst; //Mover a las primeras líneas de Firstmemo add( ********El contenido de la tabla de datos después de eliminar el último registro es el mismo sigue***** ***); {Mostrar el contenido de cada campo} mientras no sea ARecordSet eof dobeginstrTemp:=; para intIndex:= to ARecordSet Fields count dostrTemp:= strTemp ARecordSet Fields[intIndex] value add;; (strTemp);ARecordSet MoveNext; // Pasar al siguiente Nextend;
ARecordSet Close; {Cerrar el conjunto de datos}
{Usar instrucción SQL para consultar el registro llamado Zhang San} {Nota en la declaración SQL La cadena debe estar entre comillas simples}ARecordSet open( seleccione * de wfjmu donde AName = Zhang San AConnection adOpenStatic adLockOptimistic adCmdText );las líneas de notas agregan( ********El contenido de Zhang San es el siguiente****** **); las líneas de nota agregan (***Hay registros coincidentes IntToStr( ARecordSet RecordCount )); {Muestra el contenido de cada campo} mientras que no es ARecordSet eof dobeginstrTemp:=; = a ARecordSet Fields count dostrTemp:= strTemp ARecordSet Fields[intIndex] value; líneas de notas add( ARecordSet MoveNext; // Pasar a la siguiente líneaNextend;