TN055: Migrando aplicativos de classe de banco de dados ODBC do MFC para Classes MFC DAO
Observação |
---|
Como do Visual C++.NET, o ambiente do Visual C++ e assistentes não há mais suportam DAO (embora as classes DAO são incluídas e você ainda pode usá-los).A Microsoft recomenda que você use OLE DB modelos ou ODBC e MFC para novos projetos.Você só deve usar DAO na manutenção de aplicativos existentes. |
Visão Geral
Em muitas situações pode ser desejável para migrar aplicativos que usam as classes de banco de dados ODBC do MFC para classes de banco de dados do DAO do MFC.A maioria das diferenças entre as classes de ODBC do MFC e o DAO detalhes desta nota técnica.Com as diferenças em mente, ele não deve ser excessivamente difícil migrar aplicativos das classes ODBC para as classes do MFC se desejado.
Por que migrar do ODBC DAO?
Há várias razões por que talvez você queira 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 em mente é que o mecanismo de banco de dados Microsoft Jet é usado pelo DAO pode ler qualquer fonte de dados ODBC para o qual você tem um driver ODBC.Talvez seja mais eficiente usar Classes de banco de dados ODBC ou chamada ODBC diretamente por você, mas o mecanismo de banco de dados Microsoft Jet pode ler dados ODBC.
Alguns casos simples que facilitam a decisão de ODBC/DAO.Por exemplo, quando precisa apenas de acesso a dados em um formato que o mecanismo Microsoft Jet pode ler diretamente (formato Access, formato do Excel e assim por diante) é a escolha óbvia usar Classes de banco de dados DAO.
Casos mais complexos surgem quando houver dados em um servidor ou em vários servidores diferentes.Nesse 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ê deseja fazer coisas como associações heterogêneas (dados de associação de servidores em vários formatos como SQL Server e Oracle), o mecanismo de banco de dados Microsoft Jet irá executar a associação para você em vez de forçar você a fazer o trabalho necessário se você utilizou as Classes de banco de dados ODBC ou chamada ODBC diretamente.Se você estiver usando um driver ODBC que oferece suporte a cursores de driver, a melhor opção talvez as classes de banco de dados ODBC.
A escolha pode ser complicada, então você pode querer escrever algum código de exemplo para testar o desempenho de vários métodos fornecido necessidades especiais.Esta nota técnica presume que você fez a decisão de migrar de Classes de banco de dados ODBC para as classes de banco de dados do DAO.
Semelhanças entre Classes de banco de dados ODBC e Classes de banco de dados DAO MFC
O design original das classes MFC ODBC foi baseado no modelo de objeto DAO que tenha sido usado no Microsoft Access e Microsoft Visual Basic.Isso significa que há muitos recursos comuns das classes de ODBC e MFC DAO, nem todos ser listados nesta seção.Em geral, os modelos de programação são os mesmos.
Para realçar algumas semelhanças:
Classes de ODBC e o DAO ter objetos de banco de dados gerencia usando o sistema de gerenciamento de banco de dados (DBMS) subjacente.
Ambos têm objetos recordset que representa um conjunto de resultados retornados do que DBMS.
Os objetos de banco de dados e conjunto de registros DAO possuem membros praticamente idênticos para as classes ODBC.
Com ambos os conjuntos de classes, o código para recuperar dados é idêntico, exceto por algumas alterações de nome do objeto e membro.As alterações serão necessárias, mas geralmente o processo é uma alteração de nome simples quando alternar de classes ODBC para classes do DAO.
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) os realizar alguma operação de dados.
Diferenças entre o ODBC e Classes MFC DAO
As classes DAO incluem mais objetos e um conjunto mais rico de métodos, mas esta seção somente em detalhes as diferenças em classes semelhantes e funcionalidade.
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, métodos e funções globais associadas com as classes de banco de dados:
Função ou classe |
Equivalente nas 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-base) |
RFX_Text |
DFX_Text |
RFX_Binary |
DFX_Binary |
RFX_LongBinary |
DFX_LongBinary |
* O RFX_Date função é baseado no CTime e TIMESTAMP_STRUCT.
As principais alterações de funcionalidade que podem afetar seu aplicativo e requerem alterações de nome mais simples estão listadas abaixo.
Constantes e macros utilizadas para especificar itens como conjunto de registros abrir tipo e recordset para abrir opções foram alteradas.
Com as classes ODBC MFC necessárias para definir essas opções via macros ou enumerados tipos.
Com as classes do 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 em vez disso.Por exemplo, você usaria instantâneo ao especificar o tipo de CRecordset em ODBC mas DB_OPEN_SNAPSHOT ao especificar o tipo de CDaoRecordset.
O tipo de conjunto de registros padrão para CRecordset é instantâneo enquanto o tipo de conjunto de registros padrão para CDaoRecordset é dynaset (consulte a observação abaixo para um problema adicional sobre instantâneos de classe ODBC).
O ODBC CRecordset classe tem uma opção para criar um tipo de conjunto de registros somente de encaminhamento.No CDaoRecordset classe, somente de encaminhamento não é um tipo de conjunto de registros, mas sim uma propriedade (ou opção) de certos tipos de conjuntos de registros.
Um recordset somente acrescentar ao abrir um CRecordset objeto significava que os dados do recordset foi lido e acrescentados.Com CDaoRecordset de objeto, a opção somente acrescentar literalmente significa que os dados do conjunto de registros só podem ser acrescentados (e não ler).
Funções de membro de transação classes ODBC são membros do CDatabase e agir no nível do banco de dados.Em classes DAO, as funções de membro de transação são membros de uma classe de nível superior (CDaoWorkspace) e, portanto, pode afetar vários CDaoDatabase objetos que compartilham o mesmo espaço de trabalho (espaço de transação).
A classe de exceção foi alterada.CDBExceptions lançada nas classes ODBC e CDaoExceptions nas classes DAO.
RFX_Dateusa CTime e TIMESTAMP_STRUCT objetos enquanto DFX_Date usa COleDateTime.O COleDateTime é quase idêntico ao CTime, mas se baseia em uma OLE 8 bytes Data em vez de 4 bytes time_t para que ele pode armazenar um intervalo muito maior de dados.
Observação DAO (CDaoRecordset) instantâneos são somente leitura enquanto ODBC (CRecordset) snapshots podem ser atualizáveis dependendo do driver e o uso da biblioteca de cursor ODBC.Se você estiver usando a biblioteca de cursor CRecordset instantâneos são atualizáveis.Se você estiver usando qualquer um dos drivers Microsoft Desktop Driver Pack 3.0 sem a biblioteca de cursor ODBC, o CRecordset instantâneos 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.