Troca de campo do registro: Trabalhando com o código do Assistente
Este tópico explica o código que o Assistente de aplicativo do MFC e Add Class (conforme descrito em Adicionando um consumidor ODBC do MFC) gravação suporte RFX e como você pode desejar alterar o código.
Observação |
---|
Este tópico se aplica a classes derivadas de CRecordset em qual linha em massa buscando não foi implementada.Se você estiver usando em massa linha buscando, é implementada em massa registro campo exchange (RFX em massa).Em massa RFX é semelhante ao 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, a assistente grava os seguintes elementos de RFX para você, com base na fonte de dados, tabela e opções de coluna feitas no Assistente:
Declarações de membros de dados de campo recordset na classe de conjunto de registros
Uma substituição doCRecordset::DoFieldExchange
Inicialização de membros de dados de campo de conjunto de registros no construtor da classe de conjunto de registros
Declarações de membro de dados de campo
Assistentes de escrever uma declaração de classe de conjunto de registros em um arquivo. h que 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 membros de dados de parâmetro ou novos membros de dados de campo ligar sozinho, adicioná-los após aqueles gerados pelo assistente.
Além disso, observe que o assistente substitui o DoFieldExchange função de membro da classe CRecordset.
Substituir DoFieldExchange
DoFieldExchange é o coração do RFX.O framework chama DoFieldExchange sempre que ele precisa mover dados da fonte de dados ao conjunto de registros ou de conjunto de registros a fonte de dados.DoFieldExchangetambém oferece suporte à obtenção de informações sobre membros de dados por meio do campo de IsFieldDirty e IsFieldNull funções de membro.
O seguinte DoFieldExchange é override 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 de mapa de campo.
Uma chamada para CFieldExchange::SetFieldType, por meio de pFX ponteiro.Essa chamada Especifica que todas as função RFX chama para o fim da DoFieldExchange ou a próxima chamada para SetFieldType 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 de campo.As funções RFX para fazer a transferência de dados real.A biblioteca de classes fornece funções RFX para todos os tipos de dados comuns.Para obter mais informações sobre as funções RFX, consulte registro de campo Exchange: usando as funções RFX.
Observação A ordem das colunas no conjunto de resultados deve corresponder a ordem das chamadas de função RFX em DoFieldExchange.
O pFX ponteiro para um CFieldExchange objeto framework passa quando ele 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 conjunto de registros
O construtor de conjunto de registros que os assistentes de gravação contém duas coisas relacionadas ao RFX:
Uma inicialização de cada membro de dados de campo
Uma inicialização para a m_nFields membro de dados que contém o número de membros de dados de campo
O construtor para o CSections 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ção |
---|
Se você adicionar os membros de dados de campo manualmente, 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.Coloque o m_nParams inicialização fora dos colchetes.