Partilhar via


Registrar troca de campos: trabalhando com o código do assistente

Este tópico explica o código que o assistente e Adicionar Classe do aplicativo MFC (conforme descrito em Adicionando um consumidor de MFC ODBC) gravação para dar suporte a RFX e como você pode alterar esse código.

Dica

Este tópico se aplicam às classes derivadas de CRecordset no qual a busca de linhas do volume não foi implementado.Se você estiver usando a linha em massa que pesquisa, a troca do campo de registro em massa (RFX em massa) é implementada.RFX em massa é semelhante a RFX.Para entender as diferenças, consulte Conjunto de registros: Buscando registros em massa (ODBC).

Quando você cria uma classe do conjunto de registros com o assistente ou Adicionar Classedo aplicativo MFC, o assistente grava os seguintes elementos RFX- relacionados para você, com base na fonte de dados, na tabela, e nas opções de coluna fizer do assistente:

  • As declarações de membros de dados do campo do conjunto de registros no conjunto de registros classificação

  • Uma substituição de CRecordset::DoFieldExchange

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

Declarações de membro de dados do campo

Os assistentes gravam uma declaração de classe do conjunto de registros em um arquivo de .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 os membros de dados do parâmetro ou novos membros de dados do campo que você associa você mesmo, depois de adicioná-los script gerado.

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

Substituição de DoFieldExchange

DoFieldExchange é o centro de RFX. As chamadas DoFieldExchange da estrutura quando precisar mover dados da fonte de dados ao conjunto de registros ou conjunto de registros na fonte de dados. da suporteDoFieldExchange também que obtêm informações sobre membros de dados do campo com as funções de membro de IsFieldDirty e de IsFieldNull .

A seguinte substituição de DoFieldExchange é para a classe de CSections . O assistente grava a função no arquivo .cpp para a sua classe do 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 básicos da função:

  • Esta seção da função é chamada no mapa do campo.

  • Uma chamada para CFieldExchange::SetFieldType, pelo ponteiro de pFX . Essa chamada especifica que todas as chamadas de função de RFX até o fim de DoFieldExchange ou a próxima chamada a SetFieldType são colunas de saída. Para obter mais informações, consulte CFieldExchange::SetFieldType.

  • Diversas chamadas para a função global de RFX_Text — por um membro de dados do campo (que são variáveis de CString 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 de RFX fazem a transferência de dados real. A biblioteca de classe fornece funções de RFX para todos os tipos de dados comum. Para obter mais informações sobre as funções de RFX, consulte Exchange campo do registro: Usando as funções de RFX.

    Dica

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

  • O ponteiro de pFX a um objeto de CFieldExchange que a estrutura é aprovado para chamar DoFieldExchange. O objeto de CFieldExchange especifica a operação que DoFieldExchange é executado, a direção de transferência, e outras informações de contexto.

O construtor do conjunto de registros

O construtor do conjunto de registros que a gravação dos assistentes contém duas tarefas relacionadas a RFX:

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

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

O construtor para os aspectos de exemplo do conjunto de registros de CSections ficar assim:

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

Dica

Se você adicionar qualquer membros de dados do campo manualmente, como você pode se você associar novas colunas dinamicamente, você deve aumentar m_nFields.Faça isso adicionando outra linha de código, como:

m_nFields += 3;

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

Consulte também

Conceitos

Registrar troca de campos (RFX)