CRecordset::Open

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

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::dynaset com 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- e.

    • Recordset estático de ACRecordset::snapshot com rolagem bidirecional.A associação e ordenação de registros são determinadas quando o conjunto de registros é aberta; 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.

    • Conjunto de registros de ACRecordset::dynamic com rolagem bidirecional.As alterações feitas por outros usuários para a 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 oferecem suporte para esse tipo de conjunto de registros.

    • Recordset somente leitura deCRecordset::forwardOnly com somente para frente A rolagem.

      Para CRecordset, o valor padrão é CRecordset::snapshot.O mecanismo de valor padrão permite que os assistentes 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 Recordset (ODBC).Para informações relacionadas, consulte o artigo “usar o bloco e cursores roláveis” em Windows SDK.

    Observação de cuidadoCuidado

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

  • lpszSQL
    Um ponteiro de cadeia de caracteres contendo um de estes 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 espaços em branco entre a chave encaracolado e palavras-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.

    ObservaçãoObservação

    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 substituição na função de DoFieldExchange ou de DoBulkFieldExchange .

  • dwOptions
    Uma máscara de bits que pode especificar uma combinação de valores listados abaixo.Algumas de elas é 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 Editar ou Excluir 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::optimizeBulkAdd uma instrução SQL preparada otimizar adicione vários registros ao mesmo tempo.Aplica-se somente se você não estiver usando a função da API SQLSetPos 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 deCRecordset::useMultiRowFetch que implementam de 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 do 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 a buffer duplo (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: Para buscar registros em massa (ODBC).

    • Vá paraCRecordset::skipDeletedRecords de todos 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 Mover 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.Em o entanto, se o driver compacta 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 de maio marcaCRecordset::useBookmarks 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 (buffer duplo).Isso irá melhorar o desempenho; no entanto, você deve manualmente marcar como campos impróprios chamando as funções de membro de SetFieldDirty e de SetFieldNull . Observe que o buffer duplo na classe CRecordset é semelhante a buffer duplo na classe CDaoRecordset.Em o entanto, em CRecordset, você não pode ativar armazenamento em buffer duplo 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 Requery será chamada nunca.

    • Implemente SQLExtendedFetch deCRecordset::useExtendedFetch em 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 para frente, 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: Para buscar 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 CDatabase::Open retorna 0 (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 de esse 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 de essa função de membro tentar abrir o objeto de banco 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 banco de dados.Para obter detalhes sobre feche o conjunto de registros e a conexão em essas condições de variação, consulte Fechar.

ObservaçãoObservação

Acesso a uma fonte de dados por meio de um objeto de CRecordset sempre é compartilhado.A o 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

NULO

a cadeia de caracteres retornada por GetDefaultSQL.

 

Nome de uma tabela SQL

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

"Customer"

Predefinido nome da consulta (procedimento armazenado)

As colunas a consulta são definidas para retornar.

"{call OverDueAccts}"

Com a lista de FROM da lista de colunas deSELECIONAR

As colunas específicas de tabelas especificadas.

"SELECT CustId, CustName FROM

Customer"

Observação de cuidadoCuidado

Desconfie que você não insere espaços em branco adicional na cadeia de caracteres SQL.Por exemplo, se você inserir o espaço em branco entre a chave encaracolado e palavras-chave de CALL , o MFC interpretará errado a cadeia de caracteres SQL como um nome de tabela e a entra em uma instrução de SELECIONAR , que resulta em uma exceção que está sendo lançada.De a 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 da palavra-chave de SELECIONAR em uma instrução de SELECIONAR .

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

O que você passa, compilações de Abrir uma cadeia de caracteres final do 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 chamar Abrir.Para obter mais detalhes 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 selecionar registros (ODBC).

Membros de dados do campo da 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 recordset 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 Recordset (ODBC), conjunto de registros: Como os conjuntos de registros selecionar registros (ODBC), e conjunto de registros: Criando e de conjuntos de registros (ODBC).

Exceções

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

Referência

Classe de CRecordset

Gráfico de hierarquia

CRecordset::CRecordset

CRecordset::Close

CRecordset::GetDefaultSQL

CRecordset::GetSQL

CRecordset::m_strFilter

CRecordset::m_strSort

CRecordset::Requery