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
.