Troca de campo do registro: Trabalhando com o código do Assistente

Este tópico explica o código que o Assistente de aplicativo MFC e Add Class (conforme descrito em a adição de um consumidor ODBC do MFC) escrever para oferecer suporte a RFX e como você pode alterar esse código.

ObservaçãoObservação

Este tópico se aplica a classes derivadas de CRecordset no qual linha em massa buscando não foi implementada. Se você estiver usando a busca de linha em massa, troca de campo de registro de massa (Bulk RFX) é implementada. RFX de massa é semelhante a RFX. Para entender as diferenças, consulte Recordset: Buscar registros em massa (ODBC).

Quando você cria uma classe de conjunto de registros com o Assistente de aplicativo do MFC ou Add Class, as gravações do Assistente para os seguintes elementos relacionados a RFX para você, com base na fonte de dados, tabela e opções de coluna feitas no Assistente:

  • Membros da classe do conjunto de registros de dados de campo de declarações do conjunto de registros

  • Uma substituição doCRecordset::DoFieldExchange

  • Inicialização do recordset membros de dados de campo no construtor da classe do conjunto de registros

Declarações de membro de dados de campo

Os assistentes de escrever uma declaração de classe do conjunto de registros em um arquivo. h semelhante à seguinte para a classe CSections:

class CSections : public CRecordset
{
public:
   CSections(CDatabase* pDatabase = NULL);
   DECLARE_DYNAMIC(CSections)

// Field/Param Data
   CString   m_strCourseID;
   CString   m_strInstructorID;
   CString   m_strRoomNo;
   CString   m_strSchedule;
   CString   m_strSectionNo;

// Overrides
   // Wizard generated virtual function overrides
   protected:
   virtual CString GetDefaultConnect();  // Default connection string
   virtual CString GetDefaultSQL();      // Default SQL for Recordset
   virtual void DoFieldExchange(CFieldExchange* pFX);  // RFX support

// Implementation
#ifdef _DEBUG
   virtual void AssertValid() const;
   virtual void Dump(CDumpContext& dc) const;
#endif

};

Se você adicionar novos membros de dados de campo que você vincular a mesmo ou de membros de dados de parâmetro, você deve adicioná-los após aquelas geradas pelo assistente.

Além disso, observe que o assistente substitui o DoFieldExchange a função de membro da classe CRecordset.

Substituição de DoFieldExchange

DoFieldExchange é o coração do RFX. As chamadas do framework DoFieldExchange qualquer momento, ele precisa mover dados da fonte de dados de conjunto de registros ou conjunto de registros para a fonte de dados. DoFieldExchangetambém oferece suporte para obter informações sobre membros de dados por meio de campo do IsFieldDirty e IsFieldNull funções de membro.

O seguinte DoFieldExchange é de substituição para o CSections classe. O assistente grava a função no arquivo. cpp para sua classe de conjunto de registros.

void CSections::DoFieldExchange(CFieldExchange* pFX)
{
   pFX->SetFieldType(CFieldExchange::outputColumn);
   RFX_Text(pFX, "CourseID", m_strCourseID);
   RFX_Text(pFX, "InstructorID", m_strInstructorID);
   RFX_Text(pFX, "RoomNo", m_strRoomNo);
   RFX_Text(pFX, "Schedule", m_strSchedule);
   RFX_Text(pFX, "SectionNo", m_strSectionNo);
}

Observe os seguintes recursos principais da função:

  • Esta seção da função é chamada mapa de campos.

  • Uma chamada para CFieldExchange::SetFieldType, por meio de pFX ponteiro. Esta chamada Especifica que todas as função RFX chama ao final da DoFieldExchange ou a próxima chamada para SetFieldType são colunas de saída. Para obter mais informações, consulte CFieldExchange::SetFieldType.

  • Várias chamadas para o RFX_Text função global — um por um membro de dados de campo (todos são CString variáveis no exemplo). Essas chamadas especificam a relação entre um nome de coluna na fonte de dados e um membro de dados do campo. As funções RFX fazem a transferência de dados reais. A biblioteca de classes fornece funções RFX para todos os tipos de dados comuns. Para obter mais informações sobre funções RFX, consulte troca de campo do registro: Usando as funções RFX.

    ObservaçãoObservação

    A ordem das colunas no conjunto de resultados deve corresponder a ordem das chamadas de função RFX em DoFieldExchange.

  • O pFX o ponteiro para uma CFieldExchange objeto framework passa quando chama DoFieldExchange. O CFieldExchange objeto Especifica a operação que DoFieldExchange é usado para executar, a direção da transferência e outras informações de contexto.

Construtor de Recordset

O construtor de recordset assistentes escrever contém duas coisas relacionadas à RFX:

  • Uma inicialização para cada membro de dados de campo

  • Uma inicialização para o m_nFields membro de dados que contém o número de membros de dados de campo

O construtor para o CSections o exemplo de recordset tem esta aparência:

CSections::CSections(CDatabase* pdb)
   : CRecordset(pdb)
{
   m_strCourseID = "";
   m_strInstructorID = "";
   m_strRoomNo = "";
   m_strSchedule = "";
   m_strSectionNo = "";
   m_nFields = 5;
}
ObservaçãoObservação

Se você adicionar manualmente, os membros de dados do campo como se você vincular novas colunas dinamicamente, você deve incrementar m_nFields. Para fazer isso, acrescentando outra linha de código, como:

m_nFields += 3;

Este é o código para adicionar três novos campos. Se você adicionar os membros de dados de parâmetro, você deve inicializar o m_nParams membro de dados que contém o número de membros de dados de parâmetro. Colocar o m_nParams inicialização fora de colchetes.

Consulte também

Conceitos

Troca de campo do registro (RFX)