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