Compartilhar via


ODBC: a biblioteca de cursores ODBC

Este tópico descreve a Biblioteca de Cursores ODBC e explica como usá-la. Para saber mais, veja:

A Biblioteca de Cursores ODBC é uma DLL (biblioteca de vínculo dinâmico) que reside entre o Gerenciador de Drivers ODBC e o driver. Em termos de ODBC, um driver mantém um cursor para acompanhar a posição dele no conjunto de registros. O cursor marca a posição no conjunto de registros para a 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 as seguintes novas funcionalidades:

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

  • Suporte para instantâneos. 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 as suas adições até que você chame Requery. Os dynasets não usam a biblioteca de cursores.

A biblioteca de cursores oferece instantâneos (cursores estáticos), mesmo que eles normalmente não sejam compatíveis com o driver. Se o driver já der suporte a cursores estáticos, você não precisará carregar a biblioteca de cursores para obter suporte a instantâneos. Se você usar a biblioteca de cursores, poderá usar apenas instantâneos e conjuntos de registros somente de encaminhamento. Se o driver der suporte a dynasets (cursores KEYSET_DRIVEN) e você quiser usá-los, você não poderá usar a biblioteca de cursores. Se você quiser usar instantâneos e dynasets, deverá baseá-los em dois objetos CDatabase diferentes (duas conexões diferentes), a menos que o driver dê suporte a ambos.

Colunas de carimbo de data/hora e atualizações posicionadas

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 DAO (Objeto de Acesso a Dados) do MFC.

Observação

Se o seu driver ODBC dá suporte a SQLSetPos, que o MFC usará se disponível, este tópico não se aplica a você.

A maioria dos drivers de nível 1 não dá suporte a atualizações posicionadas. Esses drivers dependem da biblioteca de cursor para emular as funcionalidades dos drivers de nível 2 nesse sentido. A biblioteca de cursores emula o suporte a atualização posicionada fazendo uma atualização pesquisada nos campos inalterados.

Em alguns casos, um conjunto de registros pode conter uma coluna de carimbo de data/hora como um desses campos inalterados. Dois problemas surgem no uso de conjuntos de registros do MFC com tabelas que contêm colunas de carimbo de data/hora.

O primeiro problema diz respeito a instantâneos atualizáveis em tabelas com colunas de carimbo de data/hora. Se a tabela à qual o instantâneo está associado contiver uma coluna de carimbo de data/hora, você deverá chamar Requery depois de chamar Edit e Update. Caso contrário, talvez você não consiga 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 você não chamar Requery, o valor do carimbo de data/hora do registro no instantâneo não corresponderá mais ao carimbo de data/hora correspondente na fonte de dados. Quando você tentar atualizar o registro novamente, a fonte de dados poderá não permitir a atualização devido à não correspondência.

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

Usando a biblioteca de cursores

Ao se conectar 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 opção CDatabase::useCursorLib no parâmetro dwOptions para OpenEx ou especifique TRUE para o parâmetro bUseCursorLib para Open (o valor padrão é TRUE). Se o driver ODBC der suporte a 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 nem especifique FALSE para o parâmetro bUseCursorLib em Open.

Confira também

Noções básicas de ODBC