Dynaset
Este tópico descreve os dynasets e discute a disponibilidade deles.
Observação
Este tópico aplica-se às classes ODBC da MFC, incluindo CRecordset. Para obter informações sobre dynasets nas classes DAO, confira CDaoRecordset. Com o DAO, você pode abrir conjuntos de registros do tipo dynaset.
Um dynaset é um conjunto de registros com propriedades dinâmicas. Durante seu tempo de vida, um objeto de conjunto de registros no modo dynaset (geralmente chamado de dynaset) permanece sincronizado com a fonte de dados da seguinte maneira. Em um ambiente multiusuário, outros usuários podem editar ou excluir registros que estão em seu dynaset ou adicionar registros à tabela que seu dynaset representa. Registros aos quais seu aplicativo adiciona ou dos quais exclui do conjunto de registros são refletidos no seu dynaset. Os registros que outros usuários adicionam à tabela não serão refletidos em seu dynaset até que você recompile o dynaset chamando sua função de membro Requery
. Quando outros usuários excluem registros, o código MFC ignora as exclusões em seu conjunto de registros. As alterações de edição de outros usuários nos registros existentes são refletidas em seu dynaset assim que você rola até o registro afetado.
Da mesma forma, as edições que você faz em registros em um dynaset são refletidas em dynasets em uso por outros usuários. Os registros que você adiciona não são refletidos nos dynasets de outros usuários até que eles exijam os dynasets. Os registros excluídos são marcados como "excluídos" nos conjuntos de registros de outros usuários. Se você tiver várias conexões com o mesmo banco de dados (vários objetos CDatabase
), os conjuntos de registros associados a essas conexões terão o mesmo status que os conjuntos de registros de outros usuários.
Os dynasets são mais valiosos quando os dados devem ser dinâmicos, como (por exemplo) em um sistema de reserva de companhias aéreas.
Observação
Para usar dynasets, você deve ter um driver ODBC para sua fonte de dados que dê suporte a dynasets, e a biblioteca de cursores ODBC não deve ser carregada. Para obter mais informações, confira Disponibilidade de dynasets.
Para especificar que um conjunto de registros é um dynaset, passe CRecordset::dynaset
como o primeiro parâmetro para a função membro Open
do objeto do conjunto de registros.
Observação
Para dynasets atualizáveis, o driver ODBC precisa dar suporte a instruções de atualização posicionada ou à função de API do ODBC ::SQLSetPos
. Se ambos tiverem suporte, o MFC usará ::SQLSetPos
por questão de eficiência.
Disponibilidade de Dynasets
As classes de banco de dados MFC serão compatíveis com dynasets se os seguintes requisitos forem atendidos:
A DLL da biblioteca de cursores ODBC não deve estar em uso para essa fonte de dados.
Se a biblioteca de cursores for usada, ela mascarará alguma funcionalidade do driver ODBC subjacente necessária para o suporte ao dynaset. Se você quiser usar dynasets (e seu driver ODBC tiver a funcionalidade necessária para dynasets, conforme descrito no restante desta seção), poderá fazer com que a MFC não carregue a biblioteca de cursores ao criar um objeto
CDatabase
. Para obter mais informações, confira ODBC e a função de membro OpenEx ou Open da classeCDatabase
.Na terminologia ODBC, dynasets e instantâneos são chamados de cursores. Um cursor é um mecanismo usado para acompanhar a própria posição em um conjunto de registros.
O driver ODBC para sua fonte de dados deve dar suporte a cursores controlados por conjunto de chaves.
Os cursores controlados por conjunto de chaves gerenciam dados de uma tabela ao obter e armazenar um conjunto de chaves. As chaves são usadas para obter dados atuais da tabela quando o usuário rola para um registro específico. Para determinar se o driver fornece esse suporte, chame a função de API ODBC
::SQLGetInfo
com o parâmetro SQL_SCROLL_OPTIONS.Se você tentar abrir um dynaset sem suporte do conjunto de chaves, obterá um
CDBException
com o valor de código retornado AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED.O driver ODBC para sua fonte de dados deve dar suporte à busca estendida.
A busca estendida é a capacidade de rolar para trás e para frente sobre os registros resultantes da consulta SQL. Para determinar se o driver dá suporte a essa capacidade, chame a função de API ODBC
::SQLGetFunctions
com o parâmetro SQL_API_SQLEXTENDEDFETCH.
Se você quiser dynasets atualizáveis (ou instantâneos, aliás), seu driver ODBC também deverá dar suporte à função de API ODBC ::SQLSetPos
ou a atualizações posicionadas. A função ::SQLSetPos
permite que a MFC atualize a fonte de dados sem enviar instruções SQL. Se esse suporte estiver disponível, a MFC o usará preferencialmente para fazer atualizações usando o SQL. Para determinar se o driver é compatível com ::SQLSetPos
, chame ::SQLGetInfo
com o parâmetro SQL_POS_OPERATIONS.
As atualizações posicionadas usam a sintaxe SQL (do formulário WHERE CURRENT OF<cursorname>) para identificar uma linha específica na tabela na fonte de dados. Para determinar se o driver dá suporte a atualizações posicionadas, chame ::SQLGetInfo
com o parâmetro SQL_POSITIONED_STATEMENTS.
Normalmente, os dynasets da MFC (mas não conjuntos de registros somente encaminhamento) exigem um driver ODBC em conformidade com a API de nível 2. Se o driver de sua fonte de dados estiver em conformidade com o conjunto de API de Nível 1, você ainda poderá usar instantâneos atualizáveis e somente leitura e conjuntos de registros somente encaminhamento, mas não dynasets. No entanto, um driver de nível 1 poderá dar suporte a dynasets se ele der suporte a cursores controlados por conjunto de chaves e busca estendida. Para obter mais informações sobre os níveis de conformidade ODBC, confira ODBC.
Observação
Se você quiser usar instantâneos e dynasets, deverá baseá-los em dois objetos CDatabase
diferentes (duas conexões diferentes).
Ao contrário dos instantâneos, que usam o armazenamento intermediário mantido pela biblioteca de cursores ODBC, os dynasets buscam um registro diretamente da fonte de dados assim que você rola até ele. Isso mantém os registros originalmente selecionados pelo dynaset sincronizados com a fonte de dados.
Para ver uma lista de drivers ODBC incluídos nesta versão do Visual C++ e para saber como obter outros drivers, confira Lista de Drivers ODBC.