Compartilhar via


TN055: migrando aplicativos de classe de banco de dados ODBC MFC para classes DAO MFC

Dica

A partir do Visual C++ .NET, o ambiente e os assistentes do Visual C++ não dão suporte a DAO (embora as classes de DAO são incluídas e você ainda pode usar o).A Microsoft recomenda que você use Modelos OLE DB ou ODBC e MFC para novos projetos.Você só deve usar DAO manter os aplicativos existentes.

Visão Geral

Em muitas situações pode ser desejável migrar os aplicativos que usam classes da base de dados de ODBC MFC às classes da base de dados de DAO MFC. Observe que essa técnica passará a maioria das diferenças entre as classes MFC ODBC e de DAO. Com as diferenças em mente que, não deve acabar-se difícil migrando aplicativos das classes odbc para as classes MFC se desejado.

Por que migrar ODBC a DAO?

Há várias razões pelas quais você pode desejar migrar aplicativos das classes da base de dados de ODBC para classes da base de dados de DAO, mas a decisão não é necessariamente simples ou óbvia. Uma coisa a serem levadas em consideração é que o mecanismo de base de dados do Microsoft Jet que é usado por DAO pode ler qualquer fonte de dados ODBC para que você tenha um driver ODBC. Pode ser mais eficiente usar as classes da base de dados de ODBC ou chamar diretamente ODBC você mesmo, mas o mecanismo de base de dados do Microsoft Jet pode ler dados ODBC.

Alguns casos simples que fazem a decisão de ODBC/DAO fácil. Formato por exemplo, quando você precisar de acesso somente aos dados em um formato que o mecanismo do Microsoft Jet pode ler diretamente (formato de acesso, Excel, e assim por diante) para a opção óbvia é usar as classes da base de dados de DAO.

Casos mais complexos ocorrem quando os dados existentes no servidor ou em uma variedade de servidores diferentes. Nesse caso, a decisão de usar as classes da base de dados de ODBC ou as classes da base de dados de DAO é difícil. Se você quiser fazer coisas como junções (dados heterogêneos de junção de servidores em vários formatos como o SQL Server e Oracle), o mecanismo de base de dados do Microsoft Jet executará a junção para você em vez de forçar o para fazer o trabalho necessário se você usou as classes da base de dados de ODBC ou ODBC chamado diretamente. Se você estiver usando um driver ODBC que da suporte a cursores do driver, a melhor opção pode ser as classes da base de dados do ODBC.

A opção pode ser complicada, de modo que talvez você queira gravar um código de exemplo para testar o desempenho de vários métodos dados especiais às suas necessidades. Observe que essa técnica pressupõe que você fez a decisão para migrar de classes da base de dados de ODBC para classes da base de dados de DAO.

Semelhanças entre classes das classes da base de dados de ODBC e da base de dados de MFC DAO

O design original das classes MFC ODBC foi baseado no modelo de objeto de DAO que esteve em uso no Microsoft Access e no Microsoft Visual Basic. Isso significa que há muitos recursos comuns de classes do ODBC e de MFC DAO, que todos não serão listadas nesta seção. Em geral, os modelos de programação são os mesmos.

Para realçar algumas semelhanças:

  • As classes do ODBC e de DAO têm os objetos de base de dados que gerenciam usando o sistema de gerenciamento de base subjacente de dados (DBMS).

  • Têm os objetos do conjunto de registros que representam um conjunto de resultados retornados do DBMS.

  • Os objetos de base de dados e do conjunto de registros de DAO têm os membros quase idêntico a classes do ODBC.

  • Com ambos os conjuntos de classes, o código para recuperar dados é idêntico à exceção de algumas alterações de nome de objeto e de membro. As alterações serão necessárias, mas geralmente o processo é uma alteração de nome simples ao alternar das classes odbc para as classes de DAO.

Por exemplo, no conteúdo do procedimento para recuperar dados é criar e abrir um objeto de base de dados, criar e abrir um objeto do conjunto de registros, navegue até embora () mover os dados que executam alguma operação.

Diferenças entre classes do ODBC e de DAO MFC

As classes de DAO incluem mais objetos e um conjunto mais sofisticado de métodos, mas esta seção detalhará apenas as diferenças em classes e na funcionalidade semelhante.

Provavelmente as diferenças mais óbvias entre as classes são as alterações de nome para classes semelhantes e funções globais. A lista a seguir mostra as alterações de nome dos objetos, os métodos e as funções gerais associados às classes da base de dados:

Classe ou função

Equivalente em classes de MFC DAO

CDatabase

CDaoDatabase

CDatabase::ExecuteSQL

CDaoDatabase::Execute

CRecordset

CDaoRecordset

CRecordset::GetDefaultConnect

CDaoRecordset::GetDefaultDBName

CFieldExchange

CDaoFieldExchange

RFX_Bool

DFX_Bool

RFX_Byte

DFX_Byte

RFX_Int

DFX_Short

RFX_Long

DFX_Long

 

DFX_Currency

RFX_Single

DFX_Single

RFX_Double

DFX_Double

RFX_Date *

DFX_Date (COleDateTimebaseado em)

RFX_Text

DFX_Text

RFX_Binary

DFX_Binary

RFX_LongBinary

DFX_LongBinary

* A função de RFX_Date é baseada em CTime e em TIMESTAMP_STRUCT.

As alterações importantes a funcionalidade que pode afetar seu aplicativo e requer mais alterações de nome simples do que são listadas em.

  • As constantes e macros usados para especificar opções a seguir como o conjunto de registros ao abrir o tipo e as opções de abertura de conjunto de registros foram alteradas.

    Com ODBC classifica o MFC necessário definir essas opções através de macros ou dos tipos enumerados.

    Com as classes de DAO, DAO fornece a definição dessas opções em um arquivo de cabeçalho (DBDAOINT.H). Para o tipo de conjunto de registros é um membro de CRecordsetenumerado, mas com DAO é uma constante em vez disso. Por exemplo snapshot você usaria ao especificar o tipo de CRecordset no ODBC mas em DB_OPEN_SNAPSHOT ao especificar o tipo de CDaoRecordset.

  • O tipo padrão do conjunto de registros para CRecordset é snapshot quando o tipo padrão do conjunto de registros para CDaoRecordset é dynaset (consulte a observação abaixo para um problema adicionais sobre instantâneos da classe de ODBC).

  • A classe de CRecordset ODBC tem uma opção para criar um tipo de somente avanço do conjunto de registros. A classe de CDaoRecordset , somente avanço não é um tipo de conjunto de registros, mas sim uma propriedade (ou o padrão) de certos tipos de conjuntos de registros.

  • Um conjunto de registros somente de acréscimo quando abrir um objeto de CRecordset significou que os dados do conjunto de registros podem ser lidos e anexados. Com o objeto de CDaoRecordset , a opção somente de acréscimo literalmente significa que os dados do conjunto de registros só podem ser anexados (e não leitura).

  • As funções de membro de transação das classes de ODBC são membros de CDatabase e atuam no nível de base de dados. Nas classes de DAO, as funções de membro de transação são membros de uma classe de nível mais alto (CDaoWorkspace) e assim podem afetar vários objetos de CDaoDatabase que compartilham o mesmo espaço de trabalho (o espaço de transação).

  • A classe de exceção foi alterada. CDBExceptions gerada em classes e em CDaoExceptions ODBC em classes de DAO.

  • RFX_Date usa CTime e objetos de TIMESTAMP_STRUCT quando DFX_Date usar COleDateTime. COleDateTime é praticamente idêntico a CTime, mas é baseado 8 em um byte DATA OLE em vez de 4 byte um time_t o que pode conter um intervalo mais muito grande de dados.

    Dica

    Os instantâneos deCDaoRecordsetDAO () são somente leitura quando os instantâneos de ODBC (CRecordset) podem ser atualizáveis dependendo do driver e o uso da biblioteca de cursores ODBC.Se você estiver usando a biblioteca de cursores, os instantâneos de CRecordset são atualizáveis.Se você estiver usando qualquer um dos drivers da Microsoft do bloco 3,0 do driver de Área De Trabalho sem a biblioteca de cursores ODBC, os instantâneos de CRecordset são somente leitura.Se você estiver usando outro driver, verifique a documentação do driver para ver se os instantâneosSTATIC_CURSORS() são somente leitura.

Consulte também

Outros recursos

Observações técnicas por número

Observações técnicas por categoria