MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    Utilizando Duas sequencias de Loop's (Loop dentro de um Loop) para atualizar outra tabela com a quantidade de registros.

    Compartilhe
    avatar
    HARYSOHN
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12265
    Registrado : 01/03/2011

    Utilizando Duas sequencias de Loop's (Loop dentro de um Loop) para atualizar outra tabela com a quantidade de registros.

    Mensagem  HARYSOHN em Ter 20 Set 2011, 16:48

    Uma solução interessante e que pode ser util.

    Tenho aqui uma tabela com varios lancamentos de códigos de barras
    Neste código utilizando dois recordset's (um full e o outro filtrado) pesquiso a tabela e atualizo um campo quantidade com o numero de registros encontrados do codigo..


    Private Sub Atualizar()
    'Aqui declaro as variáveis a serem utilizadas no código, os recordset's e o workspace
    Dim Db As DAO.Database
    Dim Rs As DAO.Recordset
    Dim RsFiltro As DAO.Recordset
    Dim RsMax As DAO.Recordset
    Dim ws As DAO.Workspace
    Dim StrSql As String 'Variável para receber a Sql total da tabela
    Dim StrSqlFiltro As String 'Variável para receber a Sql filtrada por um código de barras especifico
    Dim CodBarraMax As Double 'Variável para receber o código de barras com o valor maior, o último da tabela. Será necessário para encerrar a sequencia de loop's
    Dim StrContador As Double 'Variável que contará o numero de código de barras com o mesmo número
    Dim StrBarra As Double 'Variável que recebe o código de barras utilizado no loop, para fazer a atualização bem como para filtrar o segundo recordset

    Set ws = DBEngine.Workspaces(0) 'Seto o Workspace
    Set Db = ws.OpenDatabase(CurrentProject.Path & "\Leitor_De_Codigo.mdb", False, False, "MS Access;PWD=senha") 'Seto o banco de dados

    StrSql = "SELECT * FROM Barras" 'Carrego a variável com a tabela
    Set Rs = Db.OpenRecordset(StrSql) 'Seto o recordeset para carregar a variável
    CodBarraMax = DMax("CpCodBarras", "Barras") 'Carrego a variável com o Cod de Barras maior na tabela

    If Rs.RecordCount = 0 Then 'Se não há registros na tabela
    MsgBox "sem registro selecionado", vbInformation, "Atenção"
    Else 'Caso contrário carrego a variável StrContador como -1 para dar certo o total de registros existente com um referido código de barras
    StrContador = -1


    Do While Not Rs.EOF 'Inicio o código para o Loop

    StrBarra = Rs!CpCodBarras 'Carrego a variável com o primeiro código de barras do recordeset
    StrSqlFiltro = "SELECT * FROM Barras WHERE CpCodBarras = " & StrBarra & "" 'Aqui utilizo um loop dentro de outro, porem carrego o segundo recordser com o filtro especifico ao código de barras carregado na variável SrtBarra, isso é necessário pois fará o loop apenas nos registro do código específico
    Set RsFiltro = Db.OpenRecordset(StrSqlFiltro) 'Carrego a outro recordset cja filtrado com o código do primeiro recordset
    Do
    StrContador = StrContador + 1 'Vai somando o contador para retornar o numero de registo do código de barras
    If RsFiltro.EOF Then GoTo Continuar 'Se chegou ao fim para o registro do código contido na variável StrBarra vai para o comando continuar
    RsFiltro.MoveNext 'Vai para o próximo registro do recordset filtrado, executando o loop e contando os mesmos
    Loop
    Continuar: 'Quando o registro do recordset filtrado chegar ao final vai para este comando, consequentemente indo para o próximo código de barras que tem como critério ser maior que o primeiro

    Rs.FindFirst "CpCodBarras > " & StrBarra & "" ' Busco no primeiro recordser o proximo código ou seja, um código maior que o que foi utilizado acima
    CurrentDb.Execute "UPDATE Codigo SET CpTotalItens= " & StrContador & " WHERE CpCodBarras =" & StrBarra & ";" 'Atualizo a tabela código com a quantidade de registro existentes na tabela barras, atualizando o campo CpTotalItens que é a quantidade de código para este produto existente na tabela Barras
    StrContador = -1 'Volto o contador para -1 para iniciar novo loop para o código seguinte que é o imediatamente maior que o anterior

    Rs.MoveNext 'Passo ao registro seguinte do primeiro recordset
    If StrBarra = CodBarraMax Then 'Aqui é feito a comparação com o registro máximo carregado no início do código, justamente para findar os loop, senão ficaria infinitamente o repetindo, então aqui encerra tudo quando o ultimo código de barras na tabela barras for analisado
    MsgBox "Fim da Pesquisa", vbInformation, "Atenção"
    Exit Sub
    End If
    Loop

    End If
    End Sub

    Private Sub btnAtualizar_Click()
    Call Atualizar 'Aqui chamo a função no botão.
    End Sub

    [Você precisa estar registrado e conectado para ver este link.]

    Cumprimentos


    .................................................................................
    PILOTO
    الله أكبر Paz, Justiça e Liberdade! الله أكبر
    [Você precisa estar registrado e conectado para ver este link.]

    Iniciando no Access? Então veja esse [Você precisa estar registrado e conectado para ver este link.] e também [Você precisa estar registrado e conectado para ver este link.]


    [Você precisa estar registrado e conectado para ver este link.]

    Quando tua dúvida for RESOLVIDA, dê retorno com AGRADECIMENTO a aqueles que gastaram seu tempo em te ajudar.
    Clique no botão Resolvido logo acima do botão Enviar, do lado direito. Todos nós agradecemos.  
    [Você precisa estar registrado e conectado para ver esta imagem.]

      Data/hora atual: Ter 12 Dez 2017, 10:16