Compartilhar via


CRecordset::Open

 

Publicado: abril de 2016

Abre o conjunto de registros recuperando a tabela ou executando a consulta que o conjunto de registros representa.

Sintaxe

      virtual BOOL Open( 
   UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE, 
   LPCTSTR lpszSQL = NULL, 
   DWORD dwOptions = none  
);

Parâmetros

  • nOpenType
    Aceite o valor padrão, AFX_DB_USE_DEFAULT_TYPE, ou use um dos seguintes valores de enum OpenType:

    • Conjunto de registros de ACRecordset::dynasetcom rolagem bidirecional.  A associação e ordenação de registros são determinadas quando o conjunto de registros é aberto, mas as alterações feitas por outros usuários para valores de dados são visíveis seguindo uma operação de esforço.  Dynasets é também conhecido como conjuntos de registros conjunto de teclas- dinâmicos.  

    • Conjunto de registros estático deCRecordset::snapshotcom A rolagem bidirecional.  A associação e ordenação de registros são determinadas quando o conjunto de registros é aberto; os valores de dados são determinados quando registros são buscados.  As alterações feitas por outros usuários não são visíveis até que o conjunto de registros é fechado e reaberto em seguida.  

    • Conjunto de registros de ACRecordset::dynamiccom rolagem bidirecional.  As alterações feitas por outros usuários da associação, a ordenação, e valores de dados são visíveis seguindo uma operação de esforço.  Observe que muitos drivers ODBC não suportam este tipo de conjunto de registros.  

    • Conjunto de registros somente leitura de ACRecordset::forwardOnlycom apenas rolagem frente.

      Para CRecordset, o valor padrão é CRecordset::snapshot.  O mecanismo de valor padrão permite que os assistentes do Visual C++ interagir com ODBC CRecordset e os DAO CDaoRecordset, que possuem opções diferentes.  

    Para obter mais informações sobre esses tipos de conjunto de registros, consulte o artigo Conjunto de registros (ODBC).  Para informações relacionadas, consulte o artigo “usar o bloco e cursores roláveis” em Windows SDK.  

    Aviso

    Se o tipo solicitado não é suportado, a estrutura gerencie uma exceção.

  • lpszSQL
    Um ponteiro de cadeia de caracteres que contém um destes procedimentos:

    • Um ponteiro de NULO .

    • O nome de uma tabela.

    • Uma instrução SQL SELECIONAR (opcionalmente com um SQL WHERE ou cláusula de ORDENAR POR ).

    • Uma declaração de CALL que especifica o nome de uma consulta predefinida (procedimento armazenado).  Desconfie que você não insere o espaço em branco entre a chave encaracolado e a palavra-chave de CALL .  

    Para obter mais informações sobre essa cadeia de caracteres, consulte a tabela e exame de função de ClassWizard em comentários.

    Dica

    A ordem das colunas em seu conjunto de resultados deve coincidir com a ordem de RFX ou chamadas de função em massa de RFX em sua sobrescrita de função de DoFieldExchange ou de DoBulkFieldExchange .

  • dwOptions
    Uma máscara de bits que pode especificar uma combinação de valores listados abaixo.  Algumas delass é mutuamente exclusivos.  O valor padrão é none.  

    • CRecordset::none as opções definidas.  Este valor do parâmetro é mutuamente exclusiva com todos os outros valores.  Por padrão, o recordset pode ser atualizado com Edição ou Exclua e reserva anexar novos registros com AddNew.  Updatability depende da fonte de dados bem como a opção de nOpenType você especificar.  Otimização para adições em massa não está disponível.  Buscar em massa de linha não será implementado.  Os registros excluídos não serão ignorados durante a navegação do conjunto de registros.  Indexadores não estão disponíveis.  Verifique sujo automático do campo é implementado.  

    • CRecordset::appendOnly não permite Editar ou Excluir no conjunto de registros.  Permite AddNew somente.  Essa opção é mutuamente exclusiva com CRecordset::readOnly.  

    • CRecordset::readOnly Abrir o conjunto de registros como somente leitura.  Essa opção é mutuamente exclusiva com CRecordset::appendOnly.  

    • Uso deCRecordset::optimizeBulkAdduma instrução SQL preparada otimizar adicione vários registros ao mesmo tempo.  Se aplica somente se você não estiver usando a função SQLSetPos de API ODBC para atualizar o conjunto de registros.  A primeira atualização determina quais campos estão impróprios marcado.  Essa opção é mutuamente exclusiva com CRecordset::useMultiRowFetch.  

    • linha de volume de fornecedores deCRecordset::useMultiRowFetchque pesquisa para permitir que várias linhas sejam recuperadas em uma única operação de esforço.  Este é um recurso avançado criado para melhorar o desempenho; no entanto, a troca de campo do registro de volume não é suportada por ClassWizard.  Essa opção é mutuamente exclusiva com CRecordset::optimizeBulkAdd.  Observe que se você especificar CRecordset::useMultiRowFetch, então a opção CRecordset::noDirtyFieldCheck será ativada automaticamente (proteção duplas não estará disponível); em conjuntos de registros somente encaminhamentos, a opção CRecordset::useExtendedFetch será automaticamente ativada.  Para obter mais informações sobre a linha em massa que pesquisa, consulte o artigo Conjunto de registros: Buscando registros em massa (ODBC).  

    • Skip deCRecordset::skipDeletedRecordstodos os registros excluídos para navegar pelo conjunto de registros.  Isso retardará o desempenho em determinados esforços relacionados.  Esta opção não é válido em conjuntos de registros somente encaminhamentos.  Se você chamar Mova com o parâmetro de nRows definido como 0, e a opção definida de CRecordset::skipDeletedRecords , Mover afirmará.  Observe que CRecordset::skipDeletedRecords é semelhante à caixa de driver, o que significa que linhas excluídas são removidas de conjunto de registros.  No entanto, se o driver empacotamento registros, então ele ignorará somente os registros que você exclui; não ignorará os registros excluídos por outros usuários quando o conjunto de registros é aberto.  CRecordset::skipDeletedRecords ignorará linhas excluídas por outros usuários.  

    • O uso deCRecordset::useBookmarksmaio marca um endereço da Internet no conjunto de registros, se suportado.  A recuperação de dados lento de indexadores mas melhora o desempenho para navegação de dados.  Válido em conjuntos de registros somente encaminhamentos.  Para obter mais informações, consulte o artigo Conjunto de registros: Indexadores e posições absolutas (ODBC).  

    • CRecordset::noDirtyFieldCheck desativa verificação sujo automático do campo (proteção dupla).  Isso irá melhorar o desempenho; entretanto, você deve manualmente marcar como campos impróprios chamando as funções de membro de SetFieldDirty e de SetFieldNull . Observe que a proteção duas vezes na classe CRecordset é semelhante à proteção duas vezes na classe CDaoRecordset.  No entanto, em CRecordset, você não pode ativar a proteção duas vezes em campos individuais; você habilita para todos os campos ou desativá-lo para todos os campos.  Observe que se você especificar a opção CRecordset::useMultiRowFetch, então CRecordset::noDirtyFieldCheck será ativado automaticamente; no entanto, SetFieldDirty e SetFieldNull não podem ser usados em conjuntos de registros que implementam buscar em massa da linha.  

    • CRecordset::executeDirect não usa uma instrução SQL preparada.  Para melhor desempenho, especificar esta opção se a função de membro de RepetirConsulta será chamada nunca.  

    • Implemente  SQLExtendedFetch deCRecordset::useExtendedFetchem vez de SQLFetch.  Isso é criado implementando-se a linha em massa que pesquisa em conjuntos de registros somente encaminhamentos.  Se você especificar a opção CRecordset::useMultiRowFetch em um conjunto de registros somente encaminhamento, então CRecordset::useExtendedFetch será ativado automaticamente.  

    • CRecordset::userAllocMultiRowBuffers o usuário atribuirá buffers de armazenamento de dados.  Use esta opção em conjunto com CRecordset::useMultiRowFetch se você deseja atribuir seu próprio armazenamento; caso contrário, a estrutura atribuirá automaticamente o armazenamento necessário.  Para obter mais informações, consulte o artigo Conjunto de registros: Buscando registros em massa (ODBC).  Observe que especifica CRecordset::userAllocMultiRowBuffers sem especificar CRecordset::useMultiRowFetch resultará em uma declaração falha.  

Valor de retorno

Diferente de zero se o objeto de CRecordset foi aberto com êxito; se não 0 se retorna 0 de CDatabase::Open (se chamado).

Comentários

Você deve chamar essa função de membro para executar a consulta definida pelo conjunto de registros.  Antes de chamar Abrir, você deve criar o objeto do conjunto de registros.  

A conexão desse conjunto de registros à fonte de dados depende de como você constrói o conjunto de registros antes de chamar Abrir.  Se você passar um objeto de CDatabase para o construtor do conjunto de registros que não foi conectado à fonte de dados, usa GetDefaultConnect dessa função de membro tentar abrir o objeto de base de dados.  Se você passar NULO para o construtor do conjunto de registros, o construtor constrói um objeto de CDatabase para você, e tentativas de Abrir conectar o objeto de base de dados.  Para obter detalhes sobre feche o conjunto de registros e a conexão nessas condições de variação, consulte Final.  

Dica

Acesso a uma fonte de dados por meio de um objeto de CRecordset sempre é compartilhado.  Ao contrário da classe de CDaoRecordset , você não pode usar um objeto de CRecordset para abrir uma fonte de dados com acesso exclusivo.  

Quando você chama Abrir, uma consulta, geralmente uma instrução SQL SELECIONAR , selecionar registros com base nos critérios mostrados na tabela a seguir.

Valor do parâmetro de lpszSQL

Os registros selecionados são determinados por

Exemplo

NULL

A cadeia de caracteres retornada por GetDefaultSQL.

 

Nome de uma tabela SQL

Todas as colunas da tabela lista em DoFieldExchange ou em DoBulkFieldExchange.

"Customer"

Nome predefinido de consulta (procedimento armazenado)

As colunas a consulta são definidas para retornar.

"{call OverDueAccts}"

tabela lista de FROM da lista de colunas deSELECIONAR

As colunas específicas de tabelas especificadas.

"SELECT CustId, CustName FROM

Customer"

Aviso

Desconfie que você não insere o espaço em branco adicional na cadeia de caracteres SQL.  Por exemplo, se você inserir o espaço em branco entre a chave encaracolado e a palavra-chave de CALL , o MFC interpretará errado a cadeia de caracteres SQL como um nome de tabela e a inserir em uma instrução de SELECIONAR , que resulta em uma exceção que está sendo lançada.  Da mesma forma, se sua consulta predefinida usa um parâmetro de saída, não insira o espaço em branco entre a chave encaracolado e “?” símbolo.  Finalmente, você não deve inserir o espaço em branco antes de chave encaracolado em uma instrução de CALL ou antes de palavras-chave de SELECIONAR em uma instrução de SELECIONAR .  

O procedimento usual é passar NULO a Abrir; nesse caso, chamadas GetDefaultSQLde Abrir .  Se você estiver usando uma classe derivada de CRecordset , GetDefaultSQL fornece os nomes de tabela que você especificou em ClassWizard.  Você pode especificar em vez de outras informações no parâmetro de lpszSQL .  

Tudo o que você passa, compilações de Abrir uma cadeia de caracteres final SQL para a consulta (a cadeia de caracteres pode ter SQL WHERE e as cláusulas de ORDENAR POR adcionadas a lpszSQL amarram-no passaram) e executar a consulta.  Você pode analisar a cadeia de caracteres construída chamando GetSQL após chamado Abrir.  Para obter detalhes adicionais sobre como o conjunto de registros constrói uma instrução SQL e selecionar registros, consulte o artigo Conjunto de registros: Como os conjuntos de registros selecione registros (ODBC).  

Membros de dados do campo de sua classe do conjunto de registros são associados às colunas de dados selecionadas.  Se qualquer registro é retornado, o primeiro registro torna-se o registro atual.  

Se você desejar definir opções para o conjunto de registros, como um filtro ou um tipo, especifique esses depois que você constrói o objeto do conjunto de registros mas antes de chamar Abrir.  Se você deseja atualizar registros no conjunto de registros após o conjunto de registros já está aberto, chame Requery.  

Para obter mais informações, incluindo exemplos adicionais, consulte os artigos Conjunto de registros (ODBC), Conjunto de registros: Como os conjuntos de registros selecione registros (ODBC), e Conjunto de registros: Criando e fechando conjuntos de registros (ODBC).

Exceções

Exception

Condition

Esse método pode lançar exceções do tipo CDBException* e CMemoryException*.

Exemplo

Os formulários diferentes dos exemplos a seguir mostram de código de chamada de Abrir .

// rsSnap, rsLName, and rsDefault are CRecordset or CRecordset-derived 
// objects

// Open rs using the default SQL statement, implement bookmarks, and turn 
// off automatic dirty field checking
rsSnap.Open(CRecordset::snapshot, NULL, CRecordset::useBookmarks | 
   CRecordset::noDirtyFieldCheck);

// Pass a complete SELECT statement and open as a dynaset
rsLName.Open(CRecordset::dynaset, _T("Select L_Name from Customer"));

// Accept all defaults
rsDefault.Open();

Requisitos

Cabeçalho: afxdb.h

Consulte também

Classe de CRecordset
Gráfico da hierarquia
CRecordset::CRecordset
CRecordset::Close
CRecordset::GetDefaultSQL
CRecordset::GetSQL
CRecordset::m_strFilter
CRecordset::m_strSort
CRecordset::Requery