conjunto de registros: Declarar uma classe para uma consulta predefinida (ODBC)

Este tópico se aplica a classes MFC ODBC.

Este tópico explica sistema autônomo criar uma classe de conjunto de registros para uma consulta predefinida (às vezes chamada de um procedimento armazenado, sistema autônomo no Microsoft SQL servidor).

Observação:

Este tópico se aplica aos objetos derivados CRecordset em qual linha em massa a busca não foi implementada. Se buscar em massa a linha for implementado, o processo é muito semelhante.Para entender as diferenças entre conjuntos de registros que implementam a busca de linha em massa e os que não, consulte conjunto de registros: Buscando os registros em massa (ODBC).

Alguns sistemas de gerenciamento de banco de dados (DBMSs) permitem que você criar um predefinidos consultar e chamá-lo a partir de seus programas como uma função.A consulta tem um nome, pode receber parâmetros e pode retornar registros.O procedimento neste tópico descreve como telefonar uma consulta predefinida que retorna registros (e talvez usa parâmetros).

As classes de banco de dados não oferecem suporte à atualização consultas predefinidas.A diferença entre uma consulta predefinida de instantâneo e uma consulta predefinida dynaset não é atualizabilidade, mas se as alterações feitas por outros usuários (ou outros conjuntos de registros em seu programa) são visíveis no seu conjunto de registros.

Dica:

Você não precisa de um conjunto de registros para telefonar uma consulta predefinida que não retorna registros.Preparar o demonstrativo SQL conforme descrito abaixo, mas executá-lo chamando o CDatabase função de membro ExecuteSQL.

Você pode criar uma classe de conjunto de registros único para gerenciar chamar uma consulta predefinida, mas você deve fazer parte do trabalho.Os assistentes não oferecem suporte à criação de uma classe especificamente para essa finalidade.

Para criar uma classe para chamar uma consulta predefinida (procedimento armazenado)

  1. Use o Assistente de consumidor ODBC do MFC from Adicionar classe para criar uma classe de conjunto de registros da tabela que contribui com mais colunas retornadas pela consulta.Isso lhe dá rapidamente.

  2. Adicione manualmente os membros de campo de dados para todas as colunas das tabelas que a consulta retorna, mas que o assistente não tenha criado para você.

    Por exemplo, se a consulta retorna três colunas de duas tabelas adicionais, adicione membros de dados de campo de seis (dos tipos de dados apropriado) para a classe.

  3. Adicionar manualmente RFX função chama no DoFieldExchange função de membro da classe, correspondente ao tipo de dados de cada um adicionado membro de campo de dados.

    Immediately before these RFX calls, call <MSHelp:link keywords="_mfc_CFieldExchange.3a3a.SetFieldType" TABINDEX="0">SetFieldType</MSHelp:link>, as shown here: 
    pFX->SetFieldType( CFieldExchange::outputColumn );
    
    Observação:

    Você deve conhecer os tipos de dados e a ordem de colunas retornada no resultado definido.A ordem da função RFX de chamadas em DoFieldExchange deve corresponder a ordem das colunas do conjunto de resultados.

  4. Adicione manualmente inicializações de novos participantes de dados do campo no construtor de classe do conjunto de registros.

    Você também deve incrementar o valor de inicialização para o m_nFields membro de dados.O assistente grava a inicialização, mas ela abrange somente os membros de dados de campo para que você adiciona.Por exemplo:

    m_nFields += 6;
    

    Alguns dados de tipos não devem ser inicializada aqui, por exemplo, CLongBinary ou matrizes de byte.

  5. Se a consulta usa parâmetros, adicione um membro de dados de parâmetro para cada parâmetro, uma telefonar de função RFX para cada e uma inicialização de cada um.

  6. Você deve incrementar m_nParams para cada parâmetro adicional, sistema autônomo você fez m_nFields para adicionado campos na etapa 4 deste procedimento. Para obter mais informações, consulte conjunto de registros: Parametrização um conjunto de registros (ODBC).

  7. Gravar manualmente uma seqüência de caracteres da demonstrativo SQL da seguinte forma:

    {CALL proc-name [(? [, ?]...)]}
    

    em que telefonar é uma palavra-chave do ODBC, nome-do-proc é o nome da consulta sistema autônomo é conhecido na fonte de dados e o "?" itens são espaços reservados para sistema autônomo valores de parâmetro fornece ao conjunto de registros em time de execução (se houver).O exemplo a seguir prepara um espaço reservado para um parâmetro:

    CString mySQL = "{CALL Delinquent_Accts (?)}";
    
  8. No código que abre o conjunto de registros, defina os valores do parâmetro do conjunto de registros de membros de dados e, em seguida, chame o em aberto função de membro , passando a seqüência de SQL para o lpszSQL parâmetro.Ou em vez disso, substitua a seqüência de caracteres retornada pelo GetDefaultSQL função de membro em sua classe.

Os exemplos a seguir mostram o procedimento para chamar uma consulta predefinida, denominada Delinquent_Accts, que assume um parâmetro para um número Distrito de vendas. Esta consulta retorna três colunas: Acct_No, L_Name, Phone.Todas as colunas são da tabela Customers.

O conjunto de registros a seguir especifica os membros de dados de campo para as colunas a consulta retornará e um parâmetro para as vendas Distrito número solicitado em time de execução.

class CDelinquents : public CRecordset
{
// Field/Param Data
    LONG m_lAcct_No;
    CString m_strL_Name;
    CString m_strPhone;
    LONG m_lDistParam;
    // ...
};

Esta declaração de classe é sistema autônomo o assistente grava, exceto para o m_lDistParam membro adicionado manualmente. Outros membros não são mostrados aqui.

O exemplo a seguir mostra as inicializações para os membros de dados no CDelinquents construtor.

CDelinquents::CDelinquents(CDatabase* pdb)
   : CRecordset(pdb)
{
    // Wizard-generated params:
    m_lAcct_No = 0;
    m_strL_Name = "";
    m_strPhone = "";
    m_nFields = 3;
    // User-defined params:
    m_nParams = 1;
    m_lDistParam = 0;
}

Observe as inicializações de m_nFields and m_nParams.O Assistente inicializa m_nFields; você inicializar m_nParams.

O exemplo a seguir mostra as funções RFX em CDelinquents::DoFieldExchange:

void CDelinquents::DoFieldExchange(CFieldExchange* pFX)
{
    pFX->SetFieldType(CFieldExchange::outputColumn);
    RFX_Long(pFX, "Acct_No", m_lAcct_No);
    RFX_Text(pFX, "L_Name", m_strL_Name);
    RFX_Text(pFX, "Phone", m_strPhone);
    pFX->SetFieldType(CFieldExchange::param);
    RFX_Long(pFX, "Dist_No", m_lDistParam);
}

Além de fazer as chamadas RFX para as três colunas retornadas, esse código gerencia o parâmetro que passar em time de execução de vinculação.O parâmetro é marcado para o Dist_No coluna (Distrito número).

O próximo exemplo mostra como definir a seqüência de caracteres SQL e como usá-lo para em em aberto o conjunto de registros.

// Construct a CDelinquents recordset object
CDelinquents rsDel( NULL );
CString strSQL = "{CALL Delinquent_Accts (?)}"
// Specify a parameter value (obtained earlier from the user)
rsDel.m_lDistParam = lDistrict;
// Open the recordset and run the query
if( rsDel.Open( CRecordset::snapshot, strSQL ) )
    // Use the recordset ...

Esse código constrói um instantâneo, passa um parâmetro obtido anteriormente do usuário e chama a consulta predefinida.Quando a consulta for executada, ela retorna registros para o Distrito de vendas especificado.Cada registro contém colunas para o número da conta, sobrenome do cliente e número de telefone do cliente.

Dica:

Convém para lidar com um valor retornado (parâmetro de saída) de um procedimento armazenado.Para obter um exemplo e obter mais informações, consulte CFieldExchange::SetFieldType.

Consulte também

Conceitos

conjunto de registros (ODBC)

conjunto de registros: Repetindo a consulta um conjunto de registros (ODBC)

conjunto de registros: Declarar uma classe para uma tabela (ODBC)

conjunto de registros: Executar uma unir (ODBC)