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

    [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.
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 6260
    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.
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 6260
    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: Qua 26 Jul 2017, 09:47