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.
Cuidado 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çã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çã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" |
Cuidado |
---|
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