Compartilhar via


conjunto de registros: Parametrização um conjunto de registros (ODBC)

Este tópico se aplica a classes MFC ODBC.

Às vezes convém possam selecionar registros em time de execução, usando informações tiver calculado ou obtido de seu usuário participante.Parâmetros de conjunto de registros permitem atingir esse meta.

Este tópico explica:

  • A finalidade de um conjunto de registros com parâmetros.

  • Quando e por que você pode querer parametrizar um conjunto de registros.

  • Como declarar membros de dados na sua classe de conjunto de registros de parâmetro.

  • Como passar informações de parâmetro para um objeto conjunto de registros em time de execução.

Conjuntos de registros com parâmetros

Um conjunto de registros com parâmetros permite passar informações de parâmetro em time de execução.Isso tem dois efeitos valiosos:

  • Ele pode resultar em maior velocidade de execução.

  • Ele permite que você criar uma consulta em time de execução, com base sistema autônomo informações não disponível para você em time de design, sistema autônomo sistema autônomo informações obtidas do seu usuário ou calculado em time de execução.

Quando você telefonar em aberto para executar a consulta, o conjunto de registros usa as informações de parâmetro para concluir seus selecionar SQL demonstrativo.Você pode parametrizar qualquer conjunto de registros.

Quando usar parâmetros

Usos típicos para parâmetros incluem:

  • Passar argumentos de time de execução para uma consulta predefinida.

    Para passar parâmetros para um procedimento armazenado, você deve especificar um total personalizado ODBC telefonar demonstrativo — com espaços reservados de parâmetro — quando você chama em aberto, substituindo padrão o conjunto de registros demonstrativo SQL.Para obter mais informações, consulte CRecordset::em aberto in the Referência da biblioteca de classes and SQL: Personalização SQL demonstrativo do seu conjunto de registros (ODBC) e conjunto de registros: Declarar uma classe para uma consulta predefinido (ODBC).

  • Executando várias requeries com parâmetros diferentes informações com eficiência.

    Por exemplo, cada time seu usuário participante pesquisa informações para um determinado aluno no banco de dados de inscrição dos alunos, você pode especificar o nome ou ID do aluno sistema autônomo um parâmetro obtido do usuário.Em seguida, quando você chama repetir consulta função de membro, a consulta seleciona somente do aluno, esse registro.

    Seqüência de caracteres de filtro de seu conjunto de registros, armazenada em m_strFilter, teria esta aparência:

    "StudentID = ?"
    

    Suponha que você obter o ID do aluno na variável strInputID. Quando você conjunto um parâmetro como strInputID(por exemplo, o aluno ID 100) o valor da variável é limite ao espaço reservado de parâmetro representado pelo "?" na seqüência de caracteres de filtro.

    Atribua o valor do parâmetro da seguinte maneira:

    strInputID = "100";
    ...
    m_strParam = strInputID;
    

    Você não queira configurar uma seqüência de caracteres do filtro desta maneira:

    m_strFilter = "StudentID = 100";   // 100 is incorrectly quoted
                                       // for some drivers
    

    Para uma discussão de como usar corretamente aspas para seqüências de caracteres de filtro, consulte conjunto de registros: Filtragem de registros (ODBC).

    O valor do parâmetro é diferente cada vez que repetir a consulta do conjunto de registros para uma novo ID do aluno.

    Dica:

    Usando um parâmetro é mais eficiente do que simplesmente um filtro.Para um conjunto de registros com parâmetros, o banco de dados deve processar um SQL selecionar demonstrativo apenas uma vez.Para um conjunto de registros filtrado sem parâmetros, o selecionar demonstrativo deve ser processada sempre repetir consulta com um novo valor de filtro.

Para obter mais informações sobre filtros, consulte conjunto de registros: Filtragem de registros (ODBC).

Parametrização sua classe de conjunto de registros

Observação:

Esta seção se aplica aos objetos derivados CRecordset em qual linha em massa a busca não foi implementada. Se você estiver usando a linha em massa, buscar, parâmetros de implementação é um processo semelhante.Para obter mais informações, consulte conjunto de registros: Buscando os registros em massa (ODBC).

Antes de criar sua classe de conjunto de registros, determine quais parâmetros que você precisa, quais são seus tipos de dados e como o conjunto de registros usa-los.

Para parametrizar uma classe de conjunto de registros

  1. Executar o Assistente de consumidor ODBC do MFC from Adicionar classe para criar a classe.

  2. Especifica os membros de dados de campo para colunas do conjunto de registros.

  3. Após o assistente grava a classe em um arquivo em seu projeto, vá para o arquivo .h e adicionar manualmente um ou mais membros de dados de parâmetro para a declaração de classe.A inclusão poderia ser algo assim o exemplo a seguir, parte de uma classe de instantâneo foi criado para responder à consulta "quais os alunos estão na classe sênior?"

    class CStudentSet : public CRecordset
    {
    // Field/Param Data
        CString m_strFirstName;
        CString m_strLastName;
        CString m_strStudentID;
        CString m_strGradYear;
    
        CString m_strGradYrParam;
    };
    

    Adicione membros de dados do parâmetro após os membros de dados do campo gerado pelo assistente.A convenção é acrescentar a palavra "Param" ao nome de cada parâmetro definido pelo usuário.

  4. Modificar o DoFieldExchangedefinição de função de membro no arquivo cpp.Adicione uma telefonar de função RFX para cada membro de dados do parâmetro adicionado à classe.Para obter informações sobre como escrever suas funções RFX, consulte Intercâmbio de campo do registro: Como RFX trabalha.Preceda as chamadas RFX para os parâmetros com uma única telefonar para:

    pFX->SetFieldType( CFieldExchange::param );
    // RFX calls for parameter data members
    
  5. No construtor da sua classe de conjunto de registros, incrementar a contagem de parâmetros, m_nParams.

    Para obter informações, consulte Intercâmbio de campo do registro: Trabalhando com o Assistente para código.

  6. Quando você escreve o código que cria um objeto conjunto de registros dessa classe, coloque um "?" símbolo (ponto de interrogação) em cada local em seu demonstrativo SQL cadeias de caracteres em que um parâmetro deve ser substituído.

    Em time de execução, "?" espaços reservados são preenchidos, ordem, pelos valores de parâmetro que você passar.O primeiro membro de dados do parâmetro definidos depois do SetFieldType telefonar substitui a primeira "?"na seqüência de caracteres SQL, o segundo membro de dados do parâmetro substitui a segunda"?" e assim por diante.

Observação:

Ordem dos parâmetros é importante: a ordem dos RFX chama para parâmetros no seu DoFieldExchange função deve corresponder a ordem dos espaços reservados para parâmetro na sua seqüência de caracteres SQL.

Dica:

A cadeia de caracteres mais provável para trabalhar com é a seqüência de caracteres que você especificar (se houver) para a classe m_strFilter membro de dados, mas alguns drivers ODBC podem permitir parâmetros em outras cláusulas SQL.

Passagem de valores de parâmetro em time de execução

Você deve especificar valores de parâmetro antes de você telefonar em aberto (para um novo objeto de conjunto de registros) ou Repetir a consulta (para um já existente).

Para passar valores de parâmetro para um objeto conjunto de registros em time de execução

  1. Construa o objeto de conjunto de registros.

  2. Preparar uma seqüência de caracteres ou seqüências de caracteres, sistema autônomo a m_strFilter seqüência, que contém a demonstrativo SQL ou partes dele.Colocar "?" espaços reservados em que as informações de parâmetro deve ir.

  3. Atribuir um em time de execução valor de parâmetro para cada membro de dados do parâmetro do objeto.

  4. Chamar o em aberto função de membro (ou repetir consulta, para um conjunto de registros existente).

Por exemplo, suponha que você deseja especificar uma seqüência de caracteres de filtro de seu conjunto de registros usando informações obtidas em time de execução.Suponha que ter criado um conjunto de registros de classe CStudentSet anteriormente — chamado rsStudents — e agora deseja repetir a consulta para um determinado tipo de informações do aluno.

// Set up a filter string with 
// parameter placeholders
rsStudents.m_strFilter = "GradYear <= ?";

// Obtain or calculate parameter values 
// to pass--simply assigned here 
CString strGradYear = GetCurrentAcademicYear( );

// Assign the values to parameter data members
rsStudents.m_strGradYrParam = strGradYear;

// Run the query
if( !rsStudents.Requery( ) )
    return FALSE;

O conjunto de registros contém registros para os alunos cujos registros atendem às condições especificadas por filtro, que foi construído a partir de parâmetros de time de execução.Nesse caso, o conjunto de registros contém registros para todos os alunos sênior.

Observação:

Se necessário, você pode conjunto o valor de um membro de dados do parâmetro como nulo, usando SetParamNull.Da mesma forma você pode verificar se um membro de dados do parâmetro é nulo, usando IsFieldNull.

Consulte também

Conceitos

conjunto de registros (ODBC)

conjunto de registros: Adicionando, atualizando e excluindo registros (ODBC)

conjunto de registros: Como Recordsets selecionar registros (ODBC)