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.
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.