Compartilhar via


CDaoRecordset::Open

Você deve chamar essa função de membro para recuperar os registros para o conjunto de registros.

virtual void Open( 
   int nOpenType = AFX_DAO_USE_DEFAULT_TYPE, 
   LPCTSTR lpszSQL = NULL, 
   int nOptions = 0  
); 
virtual void Open( 
   CDaoTableDef* pTableDef, 
   int nOpenType = dbOpenTable, 
   int nOptions = 0  
); 
virtual void Open( 
   CDaoQueryDef* pQueryDef, 
   int nOpenType = dbOpenDynaset, 
   int nOptions = 0  
);

Parâmetros

  • nOpenType
    Um dos seguintes valores:

    • Conjunto de registros de dynaset- tipo dedbOpenDynaset com A rolagem bidirecional. Esse é o padrão.

    • Conjunto de registros de A tabela de tipo dedbOpenTable com rolagem bidirecional.

    • Conjunto de registros de instantâneo- tipo dedbOpenSnapshot com A rolagem bidirecional.

  • lpszSQL
    Um ponteiro de cadeia de caracteres contendo um de estes procedimentos:

    • Um ponteiro de NULO .

    • O nome de um ou mais tabledefs e/ou querydefs (separados por vírgulas).

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

    • Uma consulta passagem.

  • nOptions
    Uma ou mais das opções listadas abaixo. o valor padrão é 0. Os valores possíveis são:

    • dbAppendOnly você só pode anexar novos registros (conjunto de registros de dynaset- tipo somente). Esta opção literalmente significa que os registros só podem ser anexados. As classes de banco de dados ODBC MFC têm uma opção para acrescentar somente os registros que permite que sejam recuperados e anexados.

    • dbForwardOnly o conjunto de registros é um instantâneo somente para frente de rolagem.

    • dbSeeChanges gera uma exceção se outro usuário estiver modificando dados que você está editando.

    • dbDenyWrite que outros usuários não podem alterar ou adicionar registros.

    • dbDenyRead outros usuários não pode exibir registros (conjunto de registros de tipo com somente).

    • dbReadOnly você só pode exibir registros; outros usuários podem alterá-los.

    • As atualizações inconsistentes dedbInconsistent são permitidas (conjunto de registros de dynaset- tipo somente).

    • As atualizações consistentes dedbConsistent somente são permitidas (conjunto de registros de dynaset- tipo somente).

    Dica

    Constantes dbConsistent e dbInconsistent são mutuamente exclusivos.Você pode usar um ou outro, mas não ambos em uma determinada instância de Abrir.

  • pTableDef
    Um ponteiro para um objeto de CDaoTableDef . Esta versão é válido somente para conjuntos de registros da tabela de tipo. A o usar essa opção, o ponteiro de CDaoDatabase usado para construir CDaoRecordset não é usado; em vez de isso, o banco de dados em que o tabledef reside é usado.

  • pQueryDef
    Um ponteiro para um objeto de CDaoQueryDef . Esta versão é válido somente para conjuntos de registros de dynaset- tipo e de instantâneo- tipo. A o usar essa opção, o ponteiro de CDaoDatabase usado para construir CDaoRecordset não é usado; em vez de isso, o banco de dados em que o querydef reside é usado.

Comentários

Antes de chamar Abrir, você deve criar o objeto do conjunto de registros. Há várias maneiras para fazer isso:

  • Quando você constrói o objeto do conjunto de registros, passe um ponteiro para um objeto de CDaoDatabase que já está aberto.

  • Quando você constrói o objeto do conjunto de registros, passe um ponteiro para um objeto de CDaoDatabase que não está aberto. O conjunto de registros abre um objeto de CDaoDatabase , mas não o fechado quando o objeto do recordset fecha.

  • Quando você constrói o objeto do conjunto de registros, passe um ponteiro de NULO . O objeto do recordset chama GetDefaultDBName para obter o nome do arquivo do Microsoft Access .MDB para abrir o. O conjunto de registros em abre um objeto de CDaoDatabase e mantê-lo aberto como o conjunto de registros é aberto. Quando você chama Fechar no conjunto de registros, o objeto de CDaoDatabase também é fechado.

    Dica

    Quando o conjunto de registros abre o objeto de CDaoDatabase , abra a fonte de dados com acesso não-exclusivo.

Para a versão de Abrir que usa o parâmetro de lpszSQL , uma vez que o conjunto de registros é aberto você pode recuperar os registros em uma das várias maneiras. a primeira opção é ter funções de DFX em seu DoFieldExchange. A segunda opção é usar associação dinâmico chamar a função de membro de GetFieldValue . Essas opções podem ser implementadas separada ou em combinação. Se um são combinados, você terá que passar na instrução SQL que você mesmo na chamada a Abrir.

Quando você usa a segunda versão de Abrir onde você passar em um objeto de CDaoTableDef , colunas e estarão disponíveis para que você associar através de DoFieldExchange e o mecanismo de associação DFX, e/ou dinamicamente através de GetFieldValue.

Dica

Você só pode chamar Abrir usando um objeto de CDaoTableDef para conjuntos de registros da tabela de tipo.

Quando você usa a terceira versão de Abrir onde você passar em um objeto de CDaoQueryDef , a consulta será executada, e colunas e estarão disponíveis para que você associar através de DoFieldExchange e o mecanismo de associação DFX, e/ou dinamicamente através de GetFieldValue.

Dica

Você só pode chamar Abrir usando um objeto de CDaoQueryDef para conjuntos de registros de dynaset- tipo e de instantâneo- tipo.

Para a primeira versão de Abrir que usa o parâmetro de lpszSQL , registros selecionados 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.

 

Uma lista separada por vírgulas de um ou mais tabledefs e/ou nomes de querydef.

Todas as colunas representadas em DoFieldExchange.

"Customer"

Com a lista de FROM da lista de colunas deSELECIONAR

As colunas específicas de tabledef(s) e/ou querydef(s) especificado

"SELECT CustId, CustName

FROM Customer"

O procedimento usual é passar NULO a Abrir; em esse caso, Abrir chama GetDefaultSQL, uma função de membro substituíveis que ClassWizard gerar ao criar CDaoRecordset- classe derivada. Esse valor fornece nome(s) de tabledef(s) e/ou querydef especificados 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 PEDIDOBY 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.

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, defina m_strSort ou m_strFilter 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.

Se você chamar Abrir em um conjunto de registros de dynaset- tipo ou de instantâneo- tipo, ou se a fonte de dados se refere a uma instrução SQL ou um tabledef que representa uma tabela anexado, você não pode usar dbOpenTable para o argumento do tipo; se você fizer isso, o MFC gera uma exceção. Para determinar se um objeto de tabledef representa uma tabela anexado, crie um objeto de CDaoTableDef e chamar a função de membro de GetConnect .

Use o sinalizador de dbSeeChanges se você deseja capturar alterações feitas por outro usuário ou por outro programa no seu computador quando você está editando ou deletando o mesmo registro. Por exemplo, se dois usuários iniciam editar o mesmo registro, o primeiro usuário para chamar a função de membro de Atualizar êxito. Quando Atualizar é chamado pelo segundo usuário, CDaoException é lançada. De a mesma forma, se o segundo usuário tentar chamar Excluir para excluir o registro, e ele já foi modificado pelo usuário, primeiro CDaoException ocorre.

Geralmente, se o usuário obtém este CDaoException ao atualizar, seu código deve atualizar o conteúdo dos campos e recuperar os valores recentemente modificados. Se a exceção ocorre em processo de excluir, seu código pode exibir os dados do novo registro para o usuário e uma mensagem que indica que os dados se tiverem sido recentemente modificados. Em este ponto, seu código pode solicitar uma confirmação que o usuário ainda deseja excluir o registro.

Dica

Use a opção somente para frente de rolagem (dbForwardOnly) para melhorar o desempenho quando seu aplicativo faz uma única passada com um recordset aberto de uma fonte de dados ODBC.

Para informações relacionadas, consulte o tópico “método OpenRecordset” na ajuda de DAO.

Requisitos

Cabeçalho: afxdao.h

Consulte também

Referência

Classe CDaoRecordset

Gráfico da hierarquia

CDaoRecordset::Close

CDaoRecordset::CDaoRecordset