bollywood actresses hair loss hair rehab london contact number cheap hair extensions brazilian curly hair with closure hair extension fails human hair wigs black ponytail hairstyles 2018 sunny hair extensions uk hair extensions remy hair extensions weft koko one piece hair extensions clip hair
Aprenda sobre filtragens

Trabalhando com Registros - DAO e ADO

Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito, através do Paypal. 

Veja como comprar e saiba mais sobre o material oferecido,  clicando aqui.

Open v3

 

Vamos examinar as técnicas de DAO e ADO para adicionar, modificar, copiar, excluir e classificar registros.

- Arquivo Exemplo

- Adicionando um novo registro com DAO

- Adicionando um novo registro com ADO

- Adicionando anexos com DAO

- Adicionando valores a um campo, do tipo Múltiplos Valores

- Modificando um registro com DAO

- Modificando um registro com ADO

- Editando vários registros com ADO

- Atualizando dados: diferenças entre ADO e DAO

- Excluindo um registro com DAO

- Excluindo um registro com ADO

- Excluindo Anexos com DAO

- Copiando registros para uma planilha Excel

- Copiando registros para um documento do Word

- Copiando registros para um arquivo de texto

- Filtrando registros, usando a cláusula WHERE da SQL

- Filtrando registros, usando a propriedade FILTER

- Classificando registros

Arquivo Exemplo

No final deste artigo está disponível um arquivo Zip, contendo dois Bancos de Dados Ms Access na extensão ACCDB e um arquivo de imagem na extensão GIF.  As tabelas utilizadas nos referidos Bancos de Dados foram extraídas do exemplo Northwing2007, da Microsoft. 

Todos os procedimentos aqui apresentados foram testados cuidadosamente e encontram-se disponíveis, separadamente, nos módulos globais do Banco de Dados Registros_ADO_DAO.accdbQuanto ao Banco de Dados Registros_ADO_DAO_2.accdb, é utilizado por alguns dos procedimentos abaixo, com a intenção de demonstrar a técnica de acesso às tabelas externas (sem vínculo).  Em relação ao arquivo GIF, o mesmo é utilizado pelo procedimento que demonstra como adicionar arquivos em campo do tipo Anexo.

Adicionando um novo registro com DAO

Na interface do usuário do Microsoft Access, antes de adicionar um novo registro a uma tabela, você deve primeiro abrir a tabela apropriada. No código, você simplesmente abre o objeto Recordset, chamando o método OpenRecordset.  No exemplo abaixo, as seguintes instruções declaram e abrem o objeto Recordset, com base na tabela Funcionários:

Dim rst As DAO.Recordset 
Set rst = CurrentDb.OpenRecordset("Funcionários")

Depois que o objeto Recordset estiver aberto, use o método AddNew para criar um registro em branco. Por exemplo:

rst.AddNew

Em seguida, você pode definir valores para todos ou alguns dos campos no novo registro.  É necessário que você determine o valor do campo, se a propriedade obrigatória de um campo for definida como True. Na interface de usuário do Microsoft Access, no modo de exibição Design de Tabela, há uma entrada Sim ao lado da propriedade Requerido,  caso a entrada no campo selecionado seja obrigatória.  Aqui estão alguns exemplos de configuração de valores de campo no código:

rst.Fields("Sobrenome").Value = "Sampaio" 
rst.Fields("Cargo").Value = "Programador VBA"

Observe que, como Value é a propriedade padrão de um objeto Field, o uso dessa palavra-chave é opcional.

Depois de preencher os valores dos campos, você precisa usar o método Update no objeto Recordset para garantir que o registro recém-adicionado seja salvo:

rst.Update

Analise o código completo.

Faça o login aqui para ter acesso ao código.

Em um conjunto de registros do tipo Tabela, o novo registro é colocado na ordem identificada pelo índice da tabela.  Em um conjunto de registros do tipo Dynaset, o novo registro é adicionado no final do conjunto de registros.  Porém, quando você adiciona um novo registro à uma tabela, ele não se torna o registro atual, ou seja: o registro anterior, considerado atual antes do novo registro ter sido adicionado, mantem-se como atual. Em outras palavras, enquanto um novo registro está sendo adicionado ao final da tabela, o cursor permanece no registro que foi selecionado antes de adicionar um novo registro.  No entanto, você pode tornar atual, o registro recém-adicionado, usando as propriedades Bookmark e LastModified.  Para isso, basta fazer desta forma:

rst.Bookmark = rst.LastModified

O exemplo do código acima demonstra como acessar uma tabela local/vinculada. No entanto,  se desejar acessar uma base de dados não vinculada, acrescente as linhas em vermelho que estão destacadas abaixo. O código também apresenta uma forma mais sucinta de informar o nome campo, sem o uso explícito da propriedade Fields.

Faça o login aqui para ter acesso ao código.

Adicionando um novo registro com ADO

Para adicionar um novo registro, use o método AddNew, do ADO Recordset.  Use o método Update, se não for adicionar mais nenhum registro.  No ADO, não é necessário chamar o método Update se você estiver indo para o próximo registro. Chamar o método Move, implicitamente, chama o método Update, antes de mover para o novo registro.  Dê uma olhada nas seguintes declarações:

rst![Sobrenome] = "Sampaio" 
rst.MoveNext

Neste fragmento de código, o método Update é chamado automaticamente quando você passa para o próximo registro (MoveNext).  O procedimento abaixo demonstra como adicionar um novo registro à tabela Funcionários.

Para que o ADO funcione no seu projeto é preciso ativar a biblioteca Microsoft ActiveX Data Object 6.1 Library.  Para ativar esta biblioteca, abra o VBA e no menu Ferramentas clique em Referências.  Procure na lista e marque a biblioteca.

Faça o login aqui para ter acesso ao código.

Ao adicionar ou modificar registros, você pode definir os valores dos campos do registro de uma das seguintes maneiras:

rst.Fields("Sobrenome").value = "Sampaio" 
ou 
rst![Sobrenome] = "Sampaio"

Conforme mencionado, quando você usa o método AddNew para adicionar um novo registro e, em seguida, usa o método Move, o registro recém-adicionado é salvo automaticamente sem a necessidade de chamar, explicitamente, o método Update. No procedimento do exemplo anterior, usamos o método MoveFirst para mover para o primeiro registro; no entanto, você pode chamar qualquer um dos outros métodos de movimentação (Move, MoveNext, MovePrevious) para que o ADO chame, implicitamente, o método Update.  Depois de chamar o método AddNew, o novo registro passa a ser o registro atual.

Atenção:  Use o método Update, se não for adicionar mais nenhum registro.

O procedimento acima está realizando o acesso a uma tabela local/vinculada, através do comando CurrentProject.Connection.  Para se ter acesso à base de dados de um local diferente (não vinculada), observe bem, as partes em vermelho, que são acrescentadas ao código:

Faça o login aqui para ter acesso ao código.

 Caso a base de dados esteja configurada com uma senha de acesso, acrescente a parte em vermelho, conforme indicado abaixo:

strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
 "Data Source='c:\SuaPasta\seuBd.accdb';" & _ 
 "Jet OLEDB:Database Password='SuaSenha';"

Adicionando Anexos com DAO

O código exemplo abaixo demonstra como usar o DAO para adicionar arquivos externos a um campo do tipo Anexo.  Neste exemplo é adicionado apenas um arquivo de imagem (kofap1.gif).  Clique AQUI e saiba quais tipos de arquivos você pode armazenar nesta modalidade de campo. 

Faça o login aqui para ter acesso ao código.

Este procedimento adiciona um anexo ao 4º registro na tabela Clientes. Este é um registro para a cliente Christina.  O conjunto de registros filho contém os registros do campo Anexo.  Antes de adicionar um registro a este conjunto de registros, o procedimento verifica a propriedade RecordCount do conjunto de registros filho para verificar se o arquivo especificado ainda não está anexado. Caso RecordCount seja maior que zero (0), a variável boleana blnFlag é definida como True e é exibida uma mensagem de que o arquivo já está anexado, assim, o procedimento é encerrado.  Caso a variável boleana blnFlag seja False,  não há problema em adicionar o arquivo.  Observe que, antes de adicionar um novo registro ao conjunto de registros filho, você deve colocar o conjunto de registros pai no modo Editar, usando o método Edit do objeto Conjunto de registros.  Em seguida, chame o método AddNew do conjunto de registros filho para adicionar um novo registro filho e use o método LoadFromFile para carregar o novo arquivo de anexo. Certifique-se de atualizar os conjuntos de registros filho e pai.

Adicionando valores ao campo do tipo Múltiplos Valores

Você pode adicionar um novo valor a um campo do tipo Múltiplos Valores, modificando sua propriedade RowSource quando a propriedade RowSourceType é definida como Lista de Valores.  A função abaixo adiciona novos valores ao campo de pesquisa de Múltiplos Valores de nome Carros, na tabela Clientes.

Faça o login aqui para ter acesso ao código.

Este procedimento de função leva a três argumentos: o argumento strTabela que especifica o nome de uma tabela, onde um campo de pesquisa de vários valores está localizado; o argumento strCampo que especifica o nome de um campo de pesquisa de Múltiplos Valores e, o argumento strValor que especifica o valor que você deseja adicionar à lista.  Como exemplo, observe a função que está adicionando o nome Corolla ao campo Múltiplos Valores chamado Carros, na tabela Clientes.

fncAddMultiplosValores_DAO("clientes","Carros","Corolla")

Para trabalhar com a tabela especificada, começamos definindo a variável do objeto tbl para apontar para a nossa tabela:

Set tbl = currentDb.TableDefs(strTabela)

Lembre-se de que a coleção DAO TableDefs contém objetos TableDef, que são definições de tabela. Cada objeto TableDef contém uma coleção Fields. Configuramos a variável do objeto fld para obter acesso ao campo de pesquisa de vários valores especificados por meio da coleção Fields do objeto TableDef:

Set fld = tbl.Fields(strCampo)

O objeto Field possui uma coleção de propriedades. Antes de qualquer trabalho, verificamos se a propriedade RowSourceType está definida como Lista de Valores.  Caso este teste seja True, precisamos obter o valor atual da propriedade RowSource.  Configuramos a variável do objeto prp para apontar para esta propriedade e escrever o valor da propriedade na janela Imediata:

Set prp = fld.Properties("RowSource") 
Debug.Print prp.Value

Como queremos apenas valores únicos no campo de pesquisa de Múltiplos Valores, precisamos verificar se o valor passado no parâmetro strValor já está na lista de valores.  Para fazermos isso,   a função VBA InStr() pode ser usada.

If InStr(1, prp.Value, strValor) = 0 Then

Lembre-se de que a função InStr() retorna à posição da primeira ocorrência de uma string dentro de outra.  O primeiro parâmetro é opcional. Indica a posição do caractere onde a pesquisa deve começar. Obviamente, queremos começar na primeira posição para que possamos examinar toda a string da Lista de Valores. O segundo parâmetro é a string a ser pesquisada. O valor da variável prp contém a seguinte string quando a função é chamada:

"Gol";"Civic";"Jetta";"Uno"

O terceiro parâmetro da função InStr é a string que você deseja encontrar. Especificaremos essa string quando chamarmos o procedimento de função na próxima etapa.  A função InStr também tem um quarto argumento opcional que especifica o tipo de comparação de string.  Quando omitido, o Access executa uma comparação binária em que cada caractere corresponde apenas a si mesmo.  Este é o padrão.  A função InStr retornará zero (0) quando a string que você está procurando não for encontrada na string que você pesquisou. Em seguida, adicionaremos o novo item à Lista de Valores de RowSource atual:

prp.Value = prp.Value & Chr(59) & Chr(34) & strValor & Chr(34)

Para adicionar um novo valor à lista, usamos o caractere de concatenação (&). A função Chr (59) nos dá o ponto e vírgula necessário (;) e Chr (34) é para as aspas (“).  Observe que o procedimento usa o código TrataErro para interceptar erros que podem resultar da inserção de uma tabela ou nome de coluna inexistente.

Modificando um registro com DAO

Para editar um registro existente, use o método OpenRecordset para abrir o objeto Recordset.  Em seguida, localize o registro que deseja modificar. Em um conjunto de registros do tipo Tabela, você pode usar o método Seek e um índice de tabela para localizar um registro que atenda aos seus critérios. Nos conjuntos de registros do tipo Dynaset e Snapshot, você pode usar qualquer um dos métodos Find (FindFirst, FindNext, FindPrevious, FindLast) para localizar o registro apropriado. No entanto, lembre-se de que você pode editar dados apenas em conjuntos de registros do tipo Tabela ou do tipo Dynaset (instantâneos são usados apenas para recuperar dados). Depois de localizar o registro, use o método Edit do objeto Recordset e prossiga para alterar os valores dos campos.  Quando terminar a modificação do registro, invoque o método Update para o objeto Recordset. O procedimento abaixo demonstra como modificar um registro na tabela Funcionários.

Faça o login aqui para ter acesso ao código.

O procedimento abre um conjunto de registros do tipo Tabela com base na tabela Funcionários e altera o CEP de todos os funcionários.  Em seguida, o procedimento localiza o registro de um funcionário específico. Observe que a propriedade Index deve ser definida antes de usar o método Seek para pesquisar o conjunto de registros do tipo Tabela.  Se você definir a propriedade Index para um índice que não existe, ocorrerá um erro de tempo de execução. Uma vez localizado o registro desejado, o procedimento exibe o nome do funcionário em uma caixa de mensagem. O ponto de exclamação (!) é usado para separar o nome de um objeto, do nome da coleção da qual ele é membro. Como a coleção padrão do objeto Recordset é a coleção Fields, você pode omitir o nome da coleção padrão. Em seguida, o procedimento coloca o registro do funcionário encontrado no modo Editar e modifica o valor do campo País/Região.  A propriedade EditMode do objeto Recordset é usada para determinar se a operação Edit está em andamento.  As constantes EditModeEnum, que são mostradas na Tabela abaixo, indicam o estado de edição do registro atual. Antes de confirmar as alterações nos dados, o usuário é solicitado a verificar se as alterações devem ser salvas ou canceladas. Caso o botão Sim seja selecionado na caixa de mensagem, o método de atualização do Recordset é chamado; em situação contrária, o método CancelUpdate do objeto Recordset descartará as alterações no registro atual.

Constantes EditModeEnum usadas na propriedade EditMode do objeto DAO Recordset.

Nome Constante Valor Descrição
 dbEditNone 0 Método de edição não invocado
 dbEditInProgress 1 Método de edição invocado
 dbEditAdd 2 AddNew método invocado

Nota 1: Às vezes, ao trabalhar com registros, você precisará deixar o registro e descartar as alterações. Para cancelar qualquer atualização pendente nos dados, chame o método CancelUpdate do objeto DAO Recordset. Este método aborta todas as alterações feitas na linha atual. Você pode usar o método CancelUpdate para cancelar quaisquer alterações feitas depois que o método Edit ou AddNew foi chamado. Você pode verificar se há uma operação pendente que pode ser cancelada usando a propriedade EditMode do objeto Recordset.

Nota 2: A propriedade NoMatch , que não foi utilizada no nosso exemplo , tem por objetivo identificar se o método Seek localizou o registro especificado.  Detalhes de sua utilização AQUI neste artigo da Microsoft.

Modificando Registros com ADO

Para modificar os dados em um campo específico, localize o registro e defina a propriedade Value, do campo obrigatório, com um novo valor. Sempre chame o método Update, se não estiver planejando editar mais nenhum registro. Se você modificar uma linha e, em seguida, tentar fechar o conjunto de registros sem chamar o método Update primeiro, o ADO disparará um erro de tempo de execução.

O procedimento abaixo modifica um registro de funcionário:

Faça o login aqui para ter acesso ao código.

Este procedimento modifica o registro de uma tabela, acessando primeiro, os campos desejados. Você pode modificar vários campos em um registro específico chamando o método Update e transmitindo a ele duas matrizes. O primeiro Array deve especificar os nomes dos campos e o segundo deve listar os novos valores a serem inseridos.  Por exemplo, a instrução a seguir atualiza os dados nos campos Cidade, Estado/Província e País/ Região com os valores correspondentes:

rst.Update Array("Cidade", "Estado/Província", "País/Região"), _
 Array("Rio de Janeiro", "RJ", "Brasil")

Você pode usar a mesma técnica com o método AddNew.

Nota: Às vezes, ao trabalhar com registros, você precisará deixar o registro e descartar as alterações. Para evitar que o ADO confirme automaticamente essa linha de dados, chame o método CancelUpdate, do objeto ADO Recordset.  Este método aborta todas as alterações feitas na linha atual.

Editando vários registros com o ADO

ADO tem a capacidade de realizar atualizações em lote.  Isso significa que você pode editar vários registros e enviá-los ao provedor OLE DB, em uma única operação.  Para aproveitar as atualizações em lote, você deve usar o conjunto de chaves ou o cursor estático.  O procedimento abaixo encontra todos os registros na tabela Funcionários, onde o cargo é "Representante de vendas" e o altera para "Programador VBA".  As alterações são confirmadas no Banco de Dados em uma única operação de atualização.

Faça o login aqui para ter acesso ao código.

O procedimento usa o método ADO Find para localizar todos os registros que precisam ser modificados. Depois que o primeiro registro é localizado, ele é alterado na memória e a operação de localização prossegue para procurar o próximo registro e assim por diante, até que o final do conjunto de registros seja alcançado. Observe que a seguinte instrução é emitida para pesquisar além do registro atual:

.Find strFiltro, 1

Depois que todos os registros foram localizados e alterados, as alterações são todas confirmadas no Banco de Dados em uma única operação, emitindo a instrução UpdateBatch.

Atualizando dados: diferenças entre ADO e DAO

ADO difere do DAO na forma como as operações de atualização e exclusão são realizadas. No DAO, você deve usar o método Edit do objeto Recordset, antes de fazer qualquer alteração em seus dados. ADO não exige que você faça isso; conseqüentemente, não há método Edit no ADO.  Além disso, no ADO, as suas alterações são salvas automaticamente quando você modifica um registro.  No DAO, deixar uma linha, sem primeiro chamar o método Update do objeto Recordset, descartará automaticamente as alterações.

Excluindo um registro com DAO

Para excluir um registro existente, abra o objeto Recordset chamando o método OpenRecordset e localize o registro que deseja excluir.  Em um conjunto de registros do tipo Tabela, você pode usar o método Seek e um índice de tabela para localizar um registro que atenda aos seus critérios.  Em um conjunto de registros do tipo Dynaset, você pode usar qualquer um dos métodos Find (FindFirst, FindNext, FindPrevious, FindLast) para localizar o registro apropriado.  Em seguida, use o método Delete no objeto Recordset para executar a exclusão.  Antes de usar o método Delete, é uma boa idéia escrever um código para pedir ao usuário que confirme ou cancele a exclusão.  Imediatamente após a exclusão de um registro, não há registro atual. Use o método MoveNext para mover o ponteiro do registro para um registro existente.

O procedimento abaixo exclui os funcionários que possuem o campo Identificação maior que 9.

Faça o login aqui para ter acesso ao código.

A instrução Do While Not tblRst.EOF diz ao Visual Basic para executar as instruções dentro do loop, até que o fim do arquivo (EOF) seja alcançado.  A instrução condicional dentro do loop verifica o valor do campo Identificação e exclui o registro atual apenas se a condição especificada for True.  Cada vez que um registro é excluído, o valor da variável n é aumentado em 1.  Depois que o registro é excluído, o método MoveNext é chamado para mover o ponteiro do registro para o próximo registro existente, desde que o final do arquivo ainda não tenha sido alcançado. Embora você possa usar o método Delete e o loop While para remover os registros necessários, conforme mostrado no exemplo acima, é mais eficiente excluir registros com uma consulta Delete.

Excluindo um registro com ADO

Para excluir um registro, encontre o registro que deseja excluir e chame o método Delete.  Depois de excluir um registro, ele ainda é o registro atual. Você deve usar o método MoveNext para mover para a próxima linha se estiver planejando executar operações adicionais com os seus registros. Uma tentativa de fazer qualquer coisa com a linha que acabou de ser excluída gerará um erro de tempo de execução. O procedimento abaixo exclui um registro da tabela Funcionários.

Faça o login aqui para ter acesso ao código.

Excluindo Anexos com DAO

O código abaixo usa o método Delete do objeto Recordset2 para excluir um anexo de um registro de tabela.

Faça o login aqui para ter acesso ao código.

Copiando registros para uma planilha Excel

Você pode copiar o conteúdo de um objeto DAO ou ADO Recordset ,diretamente para uma planilha do Excel ou um intervalo de planilha, usando o método CopyFromRecordset do objeto Workbook Range.

Para copiar todos os registros no objeto Recordset para um intervalo de planilha, começando na célula A1, use a seguinte instrução:

Set rng = objSheet.Cells(2, 1) 
rng.CopyFromRecordset rst

O primeiro, após o nome do método é uma variável de objeto que representa um objeto Recordset.

Para copiar cinco registros para um intervalo de planilha, use a seguinte declaração:

Set rng = objSheet.Cells(2, 1) 
rng.CopyFromRecordset rst, 5

Para copiar cinco registros e quatro campos para um intervalo de planilha, use a seguinte instrução:

Set rng = objSheet.Cells(2, 1) 
rng.CopyFromRecordset rst, 5, 4;

Você também pode especificar o número de registros (linhas) e campos a serem copiados, usando variáveis:

Set rng = objSheet.Cells(2, 1) 
rng.CopyFromRecordset rst, Linhas, Colunas

O procedimento abaixo usa o método CopyFromRecordset para copiar dados da tabela Funcionários para uma planilha do Excel:

Faça o login aqui para ter acesso ao código.

Este procedimento cria um conjunto de registros com base na tabela Funcionários e armazena o número total de registros na variável de contagem.  O usuário é solicitado a especificar o número de registros a serem copiados para o Excel.  Se o número especificado for menor ou igual ao número total de registros no conjunto de registros, o código continuará a copiar os registros para o Excel, usando o método CopyFromRecordset. Observe que o procedimento usa a cláusula As Object para declarar variáveis ​​de objeto que passarão a conter referências a objetos do Excel quando o procedimento for executado. Quando você define uma variável de objeto como Object, a variável é atrasada. Isso significa que o VBA não sabe a que tipo de objeto a variável faz referência até que o programa seja executado. Para definir uma referência ao Microsoft Excel, é necessário usar a função CreateObject.  Depois que o objeto é criado (Excel.Application), ele é referenciado com a variável do objeto (xlApp).  A função CreateObject cria uma nova instância do aplicativo Excel.  Para usar a instância atual ou iniciar o Excel e carregar um arquivo específico enquanto o Excel já está em execução, use a função GetObject. Para visualizar o que está acontecendo enquanto o procedimento está em execução, defina a propriedade Visible do aplicativo Microsoft Excel como True. Então, se você executar o procedimento no modo de etapas (pontos de interrupção), poderá verificar o conteúdo da janela do Excel à medida que executa cada instrução.

Antes de copiar os dados do Access para a planilha do Excel, você precisa definir referências aos objetos Pasta de trabalho, Planilha e Intervalo. Depois que essas referências são definidas, o procedimento usa o método Add para adicionar uma nova pasta de trabalho do Excel e, em seguida, ativa a primeira planilha. Os nomes dos campos do conjunto de registros são escritos como nomes de coluna na primeira linha da planilha.  Em seguida, a referência é definida para o objeto Range que receberá os dados do conjunto de registros. O método CopyFromRecordset é usado para copiar o número especificado de registros para a planilha.  Depois que os dados são colocados na planilha, eles são ajustados às colunas com a propriedade AutoFit.  A planilha do Excel é salva no formato de arquivo compatível com o Excel 97-2003.  O método SaveAs da pasta de trabalho requer o parâmetro FileFormat que especifica o formato do arquivo para a pasta de trabalho.  Os seguintes formatos de arquivo são usados no Excel:

51 = xlOpenXMLWorkbook (without macro's in 2007-2019, xlsx)
52 = xlOpenXMLWorkbookMacroEnabled (with or without macro's in 2007-2019, xlsm)
50 = xlExcel12 (Excel Binary Workbook in 2007-2019 with or without macro's, xlsb)
56 = xlExcel8 (97-2003 format in Excel 2007-2019, xls)

Depois de salvar a pasta de trabalho, o procedimento usa o método Workbook Close para fechar o arquivo do Excel. O método Quit do objeto Aplicativo Excel é usado para fechar o aplicativo Excel.

Copiando registros para um documento do Word

Existem várias técnicas para colocar dados do Microsoft Access em um documento do Microsoft Word.  O procedimento abaixo demonstra como usar o método GetString do Recordset para inserir dados da tabela de dados de fornecedores em um documento do Word recém-criado.  O exemplo abaixo mostra como inserir dados da tabela Fornecedores e formatar a saída usando o objeto Tabela do Word.

Escolha Ferramentas | Referências na janela Editor do Visual Basic. Role para baixo para localizar Microsoft Word xx.x Object Library, clique na caixa de seleção ao lado dela e, em seguida, clique em OK para sair.

Faça o login aqui para ter acesso ao código.

Este procedimento usa o método GetString do objeto Recordset para retornar os dados do conjunto de registros como uma variante com valor de string.  Antes de executar este procedimento, você deve definir uma referência para a Biblioteca de objetos do Microsoft Word Versão xx.x. Essa referência permite que o procedimento acesse objetos, propriedades e métodos do aplicativo Word por meio de sua própria biblioteca.  A parte superior do módulo contém a declaração da variável de objeto myWord que apontará para o aplicativo Word.  Observe que essa variável é declarada com o Escopo Público; portanto, ele pode ser acessado por outros procedimentos no projeto VBA atual. (O próximo exemplo prático também usa essa variável.)

Para iniciar o Word e criar um novo documento, definimos o objeto Aplicativo como uma nova instância do Word.Application, usando a palavra-chave New:

Set myWord = New Word.Application

Para trabalhar com um documento do Word, o método Add da coleção de documentos do Word é usado para criar um documento em branco.  Armazenamos a referência a este documento na variável do objeto doc.  Para permitir que o usuário veja o que está acontecendo enquanto o procedimento está em execução, a propriedade Visible do aplicativo Word é definida como True.  Em seguida, o conteúdo do Recordset e os nomes dos campos que salvamos anteriormente nas variáveis de string são gravados no documento do Word usando a propriedade Paragraphs do objeto Document. O procedimento termina solicitando ao usuário que salve as alterações no documento do Word.  Se o usuário não optar por salvar o documento, o erro 4198 será acionado.

Vamos a outro exemplo, usando o DAO.  Este procedimento usa a variável de objeto myWord que foi declarada no exemplo anterior.

Faça o login aqui para ter acesso ao código.

Copiando registros para um arquivo de Texto

Para gravar registros em um arquivo de texto, salve-os como uma string usando o método GetString do objeto Recordset. Em seguida, crie um arquivo de texto com o método CreateTextFile do FileSystemObject da Microsoft Scripting Runtime Library.

O procedimento abaixo demonstra como gravar os registros da tabela Detalhes do Pedido em um arquivo de texto denominado TesteArq.txt

Faça o login aqui para ter acesso ao código.

Este procedimento usa a função CreateObject para acessar o FileSystemObject. O objeto File é criado usando o método CreateTextFile de FileSystemObject.  O primeiro argumento deste método especifica o nome do arquivo a ser criado e o segundo argumento (True) indica que o arquivo deve ser sobrescrito, se ele já existir.  Em seguida, o procedimento itera por meio do conjunto de registros com base na tabela Detalhes do Pedido e grava os nomes dos campos no arquivo de texto, usando o método Write do objeto File.  Os dados do conjunto de registros são convertidos em uma string usando o método GetString do objeto Recordset e então, gravados no arquivo de texto usando o método Write do objeto File.

O arquivo de texto é fechado com o método Close.

Filtrando registros usando a cláusula WHERE da SQL

Quando você deseja trabalhar apenas com um determinado subconjunto de registros, pode filtrar os registros que não deseja ver, usando a cláusula SQL WHERE ou a propriedade Filter.  Você pode aplicar um filtro a um objeto Recordset do tipo Dynaset ou Snapshot.  A maneira mais rápida de filtrar registros é abrir um novo objeto Recordset usando uma instrução SQL que inclui uma cláusula WHERE. O exemplo abaixo demonstra o uso da cláusula SQL WHERE para recuperar pedidos de produtos com uma quantidade de pedidos superior a 100.  Exemplo de código, usando o DAO:

Faça o login aqui para ter acesso ao código.

Este procedimento cria uma consulta Selecionar simples, com base na tabela Detalhes do Pedido. A cláusula SQL WHERE na instrução SQL especifica que apenas os pedidos com uma quantidade maior que 100 devem ser retornados.  Se a expressão contida na cláusula WHERE for True, o registro será selecionado; caso contrário, o registro é excluído do conjunto de registros aberto.

O procedimento abaixo abre um conjunto de registros da tabela Clientes, listando apenas os Gerentes de Compras da cidade de New York .

Código exemplo usando o ADO:

Faça o login aqui para ter acesso ao código.

Filtragem de registros, usando a propriedade FILTER

Você pode usar a propriedade DAO ou ADO Filter para obter um conjunto de registros que atendam a critérios específicos.

O exemplo abaixo usa a propriedade Filter com o DAO Recordset para restringir o subconjunto de registros àqueles em que a cidade do funcionário começa com a letra "R."

Faça o login aqui para ter acesso ao código.

Este procedimento começa abrindo um objeto Recordset do tipo Dynaset com base na tabela Funcionários e definindo a propriedade Filter neste conjunto de registros:

rst.Filter = "Cidade like 'R*'"

Para que o filtro tenha efeito depois de defini-lo, você deve abrir um novo conjunto de registros com base no objeto Conjunto de registros ao qual o filtro foi aplicado:

Set FiltroRst = rst.OpenRecordset()

Em seguida, o procedimento grava na janela Verificação Imediata o valor do campo Sobrenome para todos os registros no conjunto de registros filtrado.

O procedimento abaixo cria uma exibição filtrada de clientes listados que estão localizados em Boston, EUA.

Código exemplo usando o ADO:

Faça o login aqui para ter acesso ao código.

Este procedimento define o filtro na tabela Clientes e exibe os registros filtrados.  Em seguida, o filtro é removido definindo a propriedade Filter como adFilterNone.

Use a propriedade Filter como uma solução alternativa para o método ADO Find sempre que precisar localizar registros que atendam a mais de uma condição. Se o conjunto específico de registros que você deseja obter estiver localizado no SQL Server, você deve usar procedimentos armazenados em vez da propriedade Filter.

Classificando Registros

Você pode usar a propriedade Sort do objeto Recordset para alterar a ordem em que os registros são exibidos. A propriedade Sort não reorganiza fisicamente os registros; ele simplesmente exibe os registros na ordem especificada pelo índice.  Se você estiver classificando em campos não indexados, um índice temporário será criado para cada campo especificado no índice. Este índice é removido automaticamente quando você define a propriedade Sort como uma string vazia.  No ADO, você só pode usar Classificar em cursores do lado do cliente. Se você usar o cursor do lado do servidor, receberá este erro: “A operação solicitada pelo aplicativo não é compatível com o provedor.”

A ordem de classificação padrão é crescente. Para ordenar um conjunto de registros por país em ordem crescente e, a seguir, por cidade em ordem decrescente, você usaria a seguinte instrução:

rst.Sort = "País ASC, Cidade DESC" 

Embora você possa usar a propriedade Sort para classificar seus dados, provavelmente obterá melhor desempenho especificando uma cláusula SQL ORDER BY na instrução ou consulta SQL usada para abrir o conjunto de registros.  O procedimento abaixo exibe os registros dos clientes em ordem decrescente por cidade.

Faça o login aqui para ter acesso ao código.

Neste procedimento, após classificar os registros na ordem especificada, a propriedade Sort é definida como uma string vazia (Empty) e os registros são exibidos na ordem em que aparecem fisicamente na tabela.

Baixar Arquivo Zip

Para você que é meu assinante, baixe o arquivo Zip.  Ao descompactar, os seguintes arquivos estarão disponíveis:

- Registros_ADO_DAO.accdb (este é o arquivo que contém os procedimentos)
- Registros_ADO_DAO_2.accdb (senha: a1234#)
- Kofap1.gif

Sucesso!


 

 


 

Envie seu comentário:



4 comentários

Cleber   10/09/2023 18:49:14

Tenho um Servidor de Dados uma maquina na rede com SQL Server 2017.
no dominio tenho minha maquinas acessando o sistema. hj uso a vinculo das tabelas porem se a maquina nao esta no dominio fica pedindo a senha do DSN criado para vincular as tabelas.

Gostaria de um exemplo simples de conexão a esse banco de dados. Tipo ter um modulo com a conexão onde insiro os dados da conexao, endereço do Servidor, senha so msm.

E uma função tipo ao carregar o formulario que chama a funçao conexao e executa a query para aquele formulario.

Jeser Borges Cotrim   02/07/2023 11:54:10

Olá AVelino! Feliz Ano Novo!
Faz muito tempo que não faço contato contigo. Achei até que não estava mais na ativa.
Por favor, me dê um "help". Como faço para preencher uma "combobox" de um formulário no EXCEL usando um banco de ados do ACCESS?
Desde já, agradeço pela sua atenção, lhe desejando uma Feliz Ano Novo! Que seja realmente com saúde e de grandes realizações! Forte abraço!

Rogério   03/11/2021 04:17:54

Sempre uma boa surpresa em cada artigo.
Muito obrigado!

Washington   01/11/2021 16:06:58

Que conteúdo! Obrigado mais uma vezes por uma grande aula. Aprendendo cada dia mais.