Partilhar via


ODBC: A biblioteca de cursores ODBC

Este tópico descreve a Biblioteca de Cursores ODBC e explica como usá-la. Para obter mais informações, consulte:

A biblioteca de cursores ODBC é uma biblioteca de vínculo dinâmico (DLL) que reside entre o Gerenciador de driver ODBC e o driver. Em termos ODBC, um driver mantém um cursor para acompanhar sua posição no conjunto de registros. O cursor marca a posição no conjunto de registros para o qual você já rolou — o registro atual.

Biblioteca de cursores e drivers ODBC de nível 1

A Biblioteca de Cursores ODBC fornece aos drivers de Nível 1 os seguintes novos recursos:

  • Rolagem para frente e para trás. Os drivers de nível 2 não precisam da biblioteca de cursor porque já são navegáveis.

  • Suporte para fotografias instantâneas. A biblioteca de cursores gerencia um buffer que contém os registros do instantâneo. Esse buffer reflete as exclusões e edições do programa em registros, mas não as adições, exclusões ou edições de outros usuários. Portanto, o instantâneo é tão atual quanto o buffer da biblioteca de cursores. O buffer também não reflete suas próprias adições até que você chame Requery. Os Dynasets não usam a biblioteca de cursores.

A biblioteca de cursores fornece instantâneos (cursores estáticos), mesmo que eles não sejam normalmente suportados pelo driver. Se o driver já suporta cursores estáticos, não é necessário carregar a biblioteca de cursores para obter suporte a instantâneos. Se usares a biblioteca de cursores, podes usar apenas capturas instantâneas e conjuntos de registros de encaminhamento único. Se o driver suportar dynasets (KEYSET_DRIVEN cursores) e você quiser usá-los, não deverá usar a biblioteca de cursores. Se você quiser usar instantâneos e dynasets, você deve baseá-los em dois objetos diferentes CDatabase (duas conexões diferentes), a menos que seu driver suporte ambos.

Atualizações Posicionadas e Colunas de Carimbo de Data/Hora

Observação

As fontes de dados ODBC são acessíveis por meio das classes ODBC do MFC, conforme descrito neste tópico, ou por meio das classes do MFC Data Access Object (DAO).

Observação

Se o driver ODBC oferece suporte a SQLSetPos, que o MFC utiliza quando disponível, este tópico não se aplica a si.

A maioria dos drivers de Nível 1 não suporta atualizações posicionadas. Esses drivers dependem da biblioteca de cursores para emular os recursos dos drivers de Nível 2 neste aspeto. A biblioteca de cursores emula o suporte à atualização posicionada ao realizar uma atualização filtrada nos campos inalteráveis.

Em alguns casos, um registo pode conter uma coluna de marca temporal como um desses campos imutáveis. Dois problemas surgem no uso de registos MFC com tabelas que contêm colunas de marca temporal.

O primeiro problema diz respeito a snapshots atualizáveis em tabelas com colunas de carimbo de data/hora. Se a tabela à qual o instantâneo está vinculado contiver uma coluna de carimbo de data/hora, você deverá chamar Requery depois de chamar Edit e Update. Caso contrário, talvez não seja possível editar o mesmo registro novamente. Quando você chama Edit e, em seguida Update, , o registro é gravado na fonte de dados e a coluna de carimbo de data/hora é atualizada. Se não chamar Requery, o valor da marca temporal do registo no instantâneo deixará de corresponder à marca temporal correspondente na fonte de dados. Quando você tenta atualizar o registro novamente, a fonte de dados pode não permitir a atualização devido à incompatibilidade.

A segunda questão diz respeito às limitações da classe CTime quando usada com a RFX_Date função de transferir informações de data e hora para ou de uma tabela. O processamento do CTime objeto impõe alguma sobrecarga na forma de processamento intermediário extra durante a transferência de dados. O intervalo de datas de CTime objetos também pode ser muito limitado para alguns aplicativos. Uma nova versão da RFX_Date função usa um parâmetro ODBC TIMESTAMP_STRUCT em vez de um CTime objeto. Para obter mais informações, consulte RFX_Date em Macros e Globais na Referência MFC.

Usando a Biblioteca de Cursores

Quando você se conecta a uma fonte de dados — chamando CDatabase::OpenEx ou CDatabase::Open — você pode especificar se deseja usar a biblioteca de cursores para a fonte de dados. Se você estiver criando instantâneos nessa fonte de dados, especifique a CDatabase::useCursorLib opção no dwOptions parâmetro para OpenEx ou especifique TRUE para o parâmetro bUseCursorLib como Open (o valor padrão é TRUE). Se o driver ODBC suportar dynasets e você quiser abrir dynasets na fonte de dados, não use a biblioteca de cursores (ela mascara algumas funcionalidades de driver necessárias para dynasets). Nesse caso, não especifique CDatabase::useCursorLib em OpenEx ou especifique FALSE para o parâmetro bUseCursorLib em Open.

Ver também

Noções básicas de ODBC