TN055: Migrando aplicativos de classe de banco de dados ODBC MFC para Classes MFC DAO

Visão geral

Em muitas situações pode ser desejável para migrar aplicativos que usam classes de banco de dados ODBC do MFC para classes de banco de dados do DAO do MFC. Esta anotação técnica explicará em detalhes a maior parte das diferenças entre as classes de ODBC do MFC e o DAO. Com as diferenças em mente, não deve ser excessivamente difícil migrar aplicativos das classes ODBC para as classes do MFC se desejado.

Por que migrar do ODBC para o DAO?

Há um número de razões pelas quais você pode querer migrar aplicativos das Classes de banco de dados ODBC para as Classes de banco de dados DAO, mas a decisão não é necessariamente simples ou óbvia. Uma coisa a manter em mente é que o mecanismo de banco de dados Microsoft Jet que é usado pelo DAO pode ler qualquer origem de dados ODBC para o qual você tem um driver ODBC. Ele pode ser mais eficiente para usar as Classes de banco de dados ODBC ou chamada ODBC diretamente si mesmo, mas o mecanismo de banco de dados Microsoft Jet pode ler dados ODBC.

Existem alguns casos simples que facilitam a decisão de ODBC/DAO. Por exemplo, quando você só precisa acessar a dados em um formato que o mecanismo do Microsoft Jet pode ler diretamente (formato Access, FoxPro formato, formato do Excel e assim por diante) a escolha óbvia é usar as Classes de banco de dados DAO.

Casos mais complexos surgem quando seus dados existem em um servidor ou em uma variedade de diferentes servidores. Neste caso, a decisão de usar as classes de banco de dados ODBC ou as classes de banco de dados DAO é difícil. Se você quiser fazem coisas como associações heterogêneas (dados de junção de servidores em vários formatos como SQL Server e Oracle) e, em seguida, o mecanismo de banco de dados Microsoft Jet irá executar a associação para você em vez de forçá-lo a fazer o trabalho necessário se você utilizar as Classes de banco de dados ODBC ou chamada ODBC diretamente. Se você estiver usando um driver ODBC que oferece suporte a cursores de condutor, sua melhor escolha pode ser as classes de banco de dados ODBC.

A escolha pode ser complicada, então você pode querer escrever algum código de amostra para testar o desempenho de vários métodos, tendo em conta suas necessidades especiais. Esta anotação técnica presume que você já tomou a decisão de migrar das Classes de banco de dados ODBC para as classes de banco de dados DAO.

Semelhanças entre Classes de banco de dados ODBC e Classes de banco de dados MFC DAO

O design original das classes MFC ODBC foi baseado no modelo de objeto DAO que tem sido usado no Microsoft Access e Microsoft Visual Basic. Isto significa que existem muitas características comuns das classes MFC DAO e ODBC, que serão nem todos listados nesta seção. Em geral, os modelos de programação são os mesmos.

Para realçar algumas semelhanças:

Por exemplo, em ambos os modelos o procedimento para recuperar dados é criar e abrir um objeto de banco de dados, criar e abrir um objeto recordset e navegar (mover) Embora os dados executar alguma operação.

Diferenças entre o ODBC e Classes do MFC DAO

As classes DAO incluem mais objetos e um conjunto mais sofisticado de métodos, mas esta seção explicará em detalhes somente as diferenças de classes semelhantes e funcionalidade.

Provavelme&nte as diferenças mais óbvias entre as classes são as mudanças de nome para classes semelhantes e funções global. A seguinte lista mostra o ofnbsp de alterações de nome; os objetos, métodos e funções global associadas com as classes de banco de dados:

Classe ou função Equivalente em Classes 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 (COleDateTime-com base)
RFX_Text DFX_Text
RFX_Binary DFX_Binary
RFX_LongBinary DFX_LongBinary

* A função RFX_Date baseia-se em CTime e TIMESTAMP_STRUCT.

As principais alterações à funcionalidade que possam afetar o seu aplicativo exigir alterações de nome mais do que simples estão listadas abaixo.

  1. As constantes e macros utilizadas para especificar coisas como o conjunto de registros abrir tipo e conjunto de registros abra opções foram alteradas.

    Com as classes ODBC MFC necessárias para definir essas opções via macros ou tipos enumerados.

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

  2. O tipo de conjunto de registros padrão para CRecordset é instantâneo ao mesmo tempo o tipo de conjunto de registros padrão para CDaoRecordset é dynaset (consulte a nota abaixo para uma questão adicional sobre instantâneos de classe ODBC).

  3. A classe ODBC CRecordset tem uma opção para criar um tipo de conjunto de registros somente de Avançar. Na classe CDaoRecordset , forward-only é não um tipo de conjunto de registros, mas sim uma propriedade (ou opção) de certos tipos de conjuntos de registros.

  4. Um recordset de acréscimo-somente ao abrir um objeto de CRecordset significava que dados do conjunto de registros podem ser lido e anexados. Com CDaoRecordset objeto, a opção de acréscimo-somente significa literalmente que dados do conjunto de registros só podem ser anexado (e não ler).

  5. Funções de membro de transação as classes de ODBC são membros de CDatabase e agir no nível do banco de dados. Nas classes DAO, as funções de membro de transação são membros de uma classe de nível superior (CDaoWorkspace) em isso podem afetar Múltiplo objetos de CDaoDatabase compartilhamento o mesmo espaço de trabalho (espaço de transação).

  6. A classe de exceção foi alterada. CDBExceptions são lançadas nas classes ODBC e CDaoExceptions nas classes DAO.

  7. RFX_Date usa CTime e TIMESTAMP_STRUCT objetos enquanto DFX_Date usa COleDateTime. O COleDateTime é quase idêntico ao CTime, mas baseia-se em um 8-byte OLE Data em vez de um de 4 bytes time_t para que ele pode armazenar uma gama muito maior de dados.

&Notanbsp;  Enquanto instantâneos ODBC (CRecordset) podem ser atualizáveis dependendo o driver e o uso da biblioteca de cursor ODBC os DAO (CDaoRecordset) instantâneos são somente leitura. Se você estiver usando a biblioteca de cursores, instantâneos de CRecordset são atualizáveis. Se você estiver usando qualquer um dos drivers Microsoft do área de trabalho Driver Pack 3.0 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 instantâneos (STATIC_CURSORS) são somente leitura.

Técnico anotações por número |nbsp; &Notas técnicas por categoria

Index