ODBC: Biblioteca de cursores ODBC
Actualización: noviembre 2007
Este tema describe la biblioteca de cursores ODBC y explica su uso. Para obtener más información al respecto, vea:
Biblioteca de cursores y controladores ODBC de nivel 1
Actualizaciones con ubicación y columnas de marca de hora
Utilizar la biblioteca de cursores
La biblioteca de cursores ODBC es una biblioteca de vínculos dinámicos (DLL) que se encuentra entre el Administrador de controladores ODBC y el controlador. En términos de ODBC, un controlador conserva un cursor para realizar un seguimiento de su posición en el conjunto de registros. El cursor marca la posición en el conjunto de registros al que ya se ha desplazado el usuario, el registro actual.
Biblioteca de cursores y controladores ODBC de nivel 1
La biblioteca de cursores ODBC proporciona a los controladores de nivel 1 las siguientes capacidades nuevas:
Desplazamiento hacia delante y hacia atrás. Los controladores de nivel 2 no necesitan la biblioteca de cursores porque ya se pueden desplazar.
Compatibilidad con instantáneas. La biblioteca de cursores administra un búfer que contiene los registros de las instantáneas. Este búfer refleja las eliminaciones y las ediciones en registros de su programa, pero no las adiciones, eliminaciones ni ediciones de otros usuarios. Por consiguiente, la instantánea está tan actualizada como lo esté el búfer de la biblioteca de cursores. El búfer tampoco refleja las adiciones personales hasta que se llama a Requery. Los conjuntos de registros dinámicos no utilizan la biblioteca de cursores.
La biblioteca de cursores asigna instantáneas (cursores estáticos) aunque no sean normalmente compatibles con el controlador. Si el controlador es compatible con los cursores estáticos, no es necesario cargar la biblioteca de cursores para obtener compatibilidad con la instantánea. Si se utiliza la biblioteca de cursores, sólo se pueden utilizar instantáneas y conjuntos de registros sólo hacia delante. Si el controlador es compatible con conjuntos de registros dinámicos (cursores KEYSET_DRIVEN) y se desea utilizarlos, no debe utilizarse la biblioteca de cursores. Si se desea utilizar instantáneas y conjuntos de registros dinámicos, se deben basar en dos objetos CDatabase distintos (dos conexiones distintas) a menos que el controlador sea compatible con ambos.
Actualizaciones con ubicación y columnas de marca de hora
Nota: |
---|
Mediante las clases ODBC de MFC, como se describe en este tema, o las clases DAO de MFC se puede tener acceso a los orígenes de datos ODBC. |
Nota: |
---|
Si el controlador ODBC admite SQLSetPos, que MFC utiliza si está disponible, este tema no afecta al usuario. |
La mayoría de los controladores de nivel 1 no admiten actualizaciones con ubicación. Estos controladores se basan en la biblioteca de cursores para emular las capacidades de los controladores de nivel 2 en este aspecto. La biblioteca de cursores emula la compatibilidad con actualizaciones con ubicación por medio de una actualización con búsqueda en los campos inalterados.
En algunos casos, un conjunto de registros puede contener una columna de marca de hora como uno de dichos campos inalterados. Cuando se utilizan conjuntos de registros de MFC con tablas que contienen columnas de marca de hora surgen dos cuestiones.
La primera cuestión se refiere a las instantáneas actualizables en tablas con columnas de marca de hora. Si la tabla a la que está enlazado la instantánea contiene una columna de marca de hora, se debe llamar a Requery después de llamar a Edit y Update. En caso contrario, tal vez no se pueda editar de nuevo el mismo registro. Cuando se llama a Edit y después a Update, el registro se escribe en el origen de datos y la columna de marca de hora se actualiza. Si no se llama a Requery, el valor de marca de hora del registro de la instantánea dejará de coincidir con la marca de hora correspondiente en el origen de datos. Si se intenta actualizar de nuevo el registro, puede que el origen de datos no permita la actualización por falta de coincidencia.
La segunda cuestión se refiere a las limitaciones de la clase CTime cuando se utiliza con la función RFX_Date para transferir información sobre fecha y hora a una tabla o desde la misma. El procesamiento del objeto CTime supone una sobrecarga en forma de procesamiento adicional intermedio durante la transferencia de datos. El intervalo de fechas de los objetos CTime también puede suponer una limitación para algunas aplicaciones. Una nueva versión de la función RFX_Date toma un parámetro ODBC TIMESTAMP_STRUCT en lugar de un objeto CTime. Para obtener más información, vea RFX_Date en Macros y funciones globales en la Referencia de MFC.
Utilizar la biblioteca de cursores
Cuando se conecta a un origen de datos, llamando a CDatabase::OpenEx o a CDatabase::Open, puede especificar si se utiliza la biblioteca de cursores para el origen de datos. Si va a crear instantáneas en dicho origen de datos, especifique la opción CDatabase::useCursorLib para el parámetro dwOptions en OpenEx, o especifique TRUE para el parámetro bUseCursorLib en Open (el valor predeterminado es TRUE). Si el controlador ODBC es compatible con conjuntos de registros dinámicos y desea abrir este tipo de conjuntos en el origen de datos, no utilice la biblioteca de cursores, dado que enmascara parte de la funcionalidad del controlador necesaria para los conjuntos de registros dinámicos. En ese caso, no especifique CDatabase::useCursorLib en OpenEx ni especifique FALSE para el parámetro bUseCursorLib en Open.