Compartilhar via


Método Database.OpenRecordset (DAO)

Aplica-se a: Access 2013 | Office 2013

Cria um novo objeto Conjunto de registros e o acrescenta à coleção Conjuntos de registros.

Sintaxe

expressão.OpenRecordset (Nome, Tipo, Opções, LockEdit)

expressão Uma variável que representa um objeto do Banco de dados.

Parâmetros

Nome

Necessária/opcional

Tipo de dados

Descrição

Name

Obrigatório

String

A origem dos registros para o novo Recordset. A origem pode ser um nome de tabela, um nome de consulta ou uma instrução SQL que retorna registros. Para objetos de Recordset do tipo tabela nos mecanismos de banco de dados do Microsoft Access, a origem pode ser apenas um nome de tabela.

Type

Opcional

Variant

Uma constante RecordsetTypeEnum que indica que tipo de Recordset abrir.

OBSERVAÇÃO: Se você abrir um Conjunto de Registros em um espaço de trabalho do Microsoft Access e não especificar um tipo, o OpenRecordset criará uma tabela do tipo Conjunto de Registros, se possível. If you specify a linked table or query, OpenRecordset creates a dynaset-type Recordset.

Opções

Opcional

Variant

Uma combinação de constantes RecordsetOptionEnum que especifica as características do novo Recordset.

Observação: As constantes dbConsistent e dbInconsistent são mutuamente exclusivas e usar ambas causará um erro. Fornecer um argumento LockEdit quando Opções usa a constante dbReadOnly também causará um erro.

LockEdit

Opcional

Variant

Uma constante LockTypeEnum que determina o bloqueio do Recordset.

Observação: É possível usar dbReadOnly tanto no argumento Opções ou quanto no LockedEdit, mas não em ambos. Se usá-la para ambos argumentos, ocorrerá um erro de tempo de execução.

Valor de retorno

Conjunto de Registros

Comentários

Normalmente, se o usuário obtém esse erro ao atualizar um registro, seu código deve atualizar o conteúdo dos campos e recuperar os valores modificados recentemente. Se o erro ocorrer ao excluir um registro, seu código poderá exibir os dados do novo registro para o usuário e uma mensagem indicando que os dados foram alterados recentemente. Nesse momento, seu código pode solicitar uma confirmação de que o usuário ainda deseja excluir o registro.

Você também deve usar a constante dbSeeChanges se for abrir um Recordset em um espaço de trabalho ODBC conectado ao mecanismo do banco de dados do Microsoft Access versus uma tabela do Microsoft SQL Server 6.0 (ou posterior) com uma coluna IDENTIDADE, caso contrário pode resultar em um erro.

Abrir mais de um Recordset em uma fonte de dados ODBC pode falhar porque a conexão está ocupada com uma chamada OpenRecordset anterior. Uma forma de contornar essa situação é preencher totalmente o Recordset usando o método MoveLast assim que o Recordset for aberto.

Fechar o Recordset com o método Close o exclui automaticamente da coleção de Recordsets.

Observação

Se a origem se referir a uma instrução SQL composta por uma cadeia de caracteres concatenada com um valor não inteiro, e os parâmetros do sistema especificar um não-eua. caractere decimal, como uma vírgula (por exemplo, strSQL = "PRICE > " & lngPrice e lngPrice = 125,50), ocorre um erro ao tentar abrir o Recordset. Isso se deve ao fato de que, durante a concatenação, o número é convertido em uma cadeia de caracteres usando o caractere decimal padrão do seu sistema, e o SQL aceita apenas caracteres decimais americanos.

Link fornecido pela comunidade UtterAccess. UtterAccess é o fórum wiki e ajuda principal do Microsoft Access.

Exemplo

O exemplo a seguir mostra como abrir um Conjunto de Registros baseado em uma consulta de parâmetro.

Código de exemplo fornecido pelaReferência do programador do Microsoft Access 2010.

    Dim dbs As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim rst As DAO.Recordset
    
    Set dbs = CurrentDb
    
    'Get the parameter query
    Set qdf = dbs.QueryDefs("qryMyParameterQuery")
    
    'Supply the parameter value
    qdf.Parameters("EnterStartDate") = Date
    qdf.Parameters("EnterEndDate") = Date + 7
    
    'Open a Recordset based on the parameter query
    Set rst = qdf.OpenRecordset()

O exemplo a seguir mostra como abrir um Conjunto de Registros baseado em uma tabela ou uma consulta.

    Dim dbs As DAO.Database
    Dim rsTable As DAO.Recordset
    Dim rsQuery As DAO.Recordset
    
    Set dbs = CurrentDb
    
    'Open a table-type Recordset
    Set rsTable = dbs.OpenRecordset("Table1", dbOpenTable)
    
    'Open a dynaset-type Recordset using a saved query
    Set rsQuery = dbs.OpenRecordset("qryMyQuery", dbOpenDynaset)

O exemplo a seguir mostra como abrir um Conjunto de Registros baseado em uma instrução de linguagem SQL (SQL).

    Dim dbs As DAO.Database
    Dim rsSQL As DAO.Recordset
    Dim strSQL As String
    
    Set dbs = CurrentDb
    
    'Open a snapshot-type Recordset based on an SQL statement
    strSQL = "SELECT * FROM Table1 WHERE Field2 = 33"
    Set rsSQL = dbs.OpenRecordset(strSQL, dbOpenSnapshot)

O exemplo a seguir mostra como usar a propriedade do Filtro para determinar que registros incluir em um Recordset aberto subsequentemente.

    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim rstFiltered As DAO.Recordset
    Dim strCity As String
    
    Set dbs = CurrentDb
    
    'Create the first filtered Recordset, returning customer records
    'for those visited between 30-60 days ago.
    Set rst = dbs.OpenRecordset(_ 
        "SELECT * FROM Customers WHERE LastVisitDate BETWEEN Date()-60 " & _
        "AND Date()-30 ORDER BY LastVisitDate DESC")
    
    'Begin row processing
    Do While Not rst.EOF
        
        'Retrieve the name of the first city in the selected rows
        strCity = rst!City
    
        'Now filter the Recordset to return only the customers from that city
        rst.Filter = "City = '" & strCity & "'"
        Set rstFiltered = rst.OpenRecordset
    
        'Process the rows
        Do While Not rstFiltered.EOF
            rstFiltered.Edit
            rstFiltered!ToBeVisited = True
            rstFiltered.Update
            rstFiltered.MoveNext
        Loop
    
        'We've done what was needed. Now exit
        Exit Do
        rst.MoveNext
       
    Loop
    
    'Cleanup
    rstFiltered.Close
    rst.Close
    
    Set rstFiltered = Nothing
    Set rst = Nothing