MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

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

    [Resolvido]Dúvida consulta atualização

    Compartilhe

    BrunoSanches
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2
    Registrado : 26/02/2014

    [Resolvido]Dúvida consulta atualização

    Mensagem  BrunoSanches em Qua 26 Fev 2014, 17:20

    Boa tarde

    Estou iniciando em Access e estou enfrentando a seguinte dificuldade:

    Tenho duas tabelas, Reg01 e Reg04 que entre outros campos contém com os seguintes dados:

    Reg01: CODFAMILIARFAM (texto), IDOSOS (número), CRIANCAS (número), ADOLESCENTES (número) e MAIORES (número). Esta tabela contém 14.372 registros

    Reg04: CODFAMILIARFAM (texto) e IDADE (número). Esta tabela contém 45.361 registros

    A tabela Reg01 se refere a uma família e a tabela Reg04 às pessoas residentes em cada família.

    Meu objetivo é ler o campo IDADE da tabela Reg04 e inserir a quantidade de pessoas por faixa etária em cada família no campo correspondente (criança, idoso, adolescentes e maiores) na tabela Reg01.

    Consegui fazer utilizando um FOR onde para cada registro da tabela Reg01 percorro a tabela Reg04 somando as faixas etárias. No entanto, devido ao número de registros nas tabelas isso tem sido muito demorado.

    Gostaria de tentar utilizar o código abaixo para verificar se o processo seria mais rápido.


    Option Compare Database

    Public Function FaixasEtariasSemLoop()

    Dim db As dao.Database

    Dim RS_D As dao.Recordset
    Dim RS_P As dao.Recordset

    Dim Contador_Pessoa As Long
    Dim ContaOProgresso As Long
    Dim conta_pessoa As Long
    Dim Idosos As Integer
    Dim Criancas As Integer
    Dim Adolescentes As Integer
    Dim Maiores As Integer

    Dim domicilio As String
    Dim domiciliop As String

    domicilio = ""
    domiciliop = ""

    Set db = CurrentDb()
    Set RS_P = db.OpenRecordset("reg04", dbOpenTable)

    RS_P.MoveLast
    Contador_Pessoa = RS_P.RecordCount ' Conto quantas pessoas existem no cadastro

    RS_P.MoveFirst

    SysCmd acSysCmdInitMeter, "Calculando a faixa etária e realizando as alterações, aguarde...", Contador_Domicilio

    For conta_pessoa = 1 To Contador_Pessoa
       SysCmd acSysCmdUpdateMeter, ContaOProgresso
       
       Idosos = 0
       Criancas = 0
       Adolescentes = 0
       Maiores = 0
       
       domiciliop = RS_P(1)
               
       'Set RS_D = db.OpenRecordset("select *from reg01 where CODFAMILIARFAM = '00252705670'") 'citando direto o numero do domicilio ele acha e faz as alteracoes
       Set RS_D = db.OpenRecordset("select *from reg01 where CODFAMILIARFAM = " & domiciliop & "") ' assim pega a variavel mas da erro no tipo de dados
       
       Idade = RS_P(39)
       Idosos = RS_D(42)
       Criancas = RS_D(43)
       Adolescentes = RS_D(44)
       Maiores = RS_D(45)
               
       If Idade > 59 Then
           Idosos = Idosos + 1
           ElseIf Idade < 60 And Idade > 17 Then
               Maiores = Maiores + 1
           ElseIf Idade < 18 And Idade > 14 Then
               Adolescentes = Adolescentes + 1
           Else
               Criancas = Criancas + 1
       End If
       
       RS_D.Edit
       RS_D(42) = Idosos
       RS_D(43) = Criancas
       RS_D(44) = Adolescentes
       RS_D(45) = Maiores
       RS_D.Update
       RS_D.MoveFirst

    Next conta_pessoa
       
    RS_D.Close
    RS_P.Close

    db.Close

    SysCmd acSysCmdRemoveMeter

    End Function


    No entanto, estou recebendo a seguinte de erro: “Erro em tempo de execução 3464: tipo de dados incompatível na expressão de critério.” O depurador aponta para a seguinte linha:

    Set RS_D = db.OpenRecordset("select *from reg01 where CODFAMILIARFAM = " & domiciliop & "")

    Será que alguém poderia me dar uma ajuda.

    Desde já agradeço.

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5890
    Registrado : 05/11/2009

    Re: [Resolvido]Dúvida consulta atualização

    Mensagem  Alexandre Neves em Qua 26 Fev 2014, 19:46

    Boa noite, e bem-vindo ao fórum
    Tente
    Set RS_D = db.OpenRecordset("select * from reg01 where CODFAMILIARFAM='" & domiciliop & "'")


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    BrunoSanches
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2
    Registrado : 26/02/2014

    Re: [Resolvido]Dúvida consulta atualização

    Mensagem  BrunoSanches em Qui 27 Fev 2014, 19:08

    Olá Alexandre,

    Muito obrigado pela sua atenção.

    Funcionou perfeitamente. Problema resolvido.

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5890
    Registrado : 05/11/2009

    Re: [Resolvido]Dúvida consulta atualização

    Mensagem  Alexandre Neves em Qui 27 Fev 2014, 19:11

    [Você precisa estar registrado e conectado para ver esta imagem.]


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

      Data/hora atual: Sab 10 Dez 2016, 06:52