VB COM SQL - CONTAR REGISTROS TOTALIZANDO EM OUTRA
Tenho um sistema que importa dados de arquivo DBF (dica apresentada aqui no Fórum) e que após ajustes está funcionando relativamente bem.
Após a importação necessito contar os registros de cada campo e lançar em outra tabela c pelo TOTAL de registros encontrados. Com a rotina abaixo esperava resolver o problema:
[ô]Contagem de registros e lançamento pelo TOTAL de registros de cada campo
Private Function Conta_cri() As Double
Dim qt_reg As Integer
Dim rsCriancas As RecordSet
Set rsCriancas = vgDb(2).OpenRecordSet([Ô]Select * from Criancas [Ô], dbOpenDynaset)
If rsCriancas.RecordCount > 0 Then
rsCriancas.MoveFirst
Do While Not rsCriancas.EOF
If rsCriancas!Idade = [Ô]0[Ô] And Criancas!Idademes = [Ô]0[Ô] And Criancas!Idadedia <> [Ô]0[Ô] And Criancas!A_sexo = [Ô]F[Ô] Then
qt_reg = qt_reg + 1
End If
rsCriancas.MoveNext
Loop
End If
Conta_cri = qt_reg
End Function
[i]
Mas a lentidão nesse processamento é tamanho que inviabiliza sua utilização, mesmoporque, a tendência do BD Access é sempre crescer.
Gostaria, se puderem meajudar, montar uma instrução SQL(para o BD MDB) que pudesse agilizar essa rotina mas tenho muito pouco conhecimento sobre SQL.
Desde já agradeço
Enéa Monteiro
Após a importação necessito contar os registros de cada campo e lançar em outra tabela c pelo TOTAL de registros encontrados. Com a rotina abaixo esperava resolver o problema:
[ô]Contagem de registros e lançamento pelo TOTAL de registros de cada campo
Private Function Conta_cri() As Double
Dim qt_reg As Integer
Dim rsCriancas As RecordSet
Set rsCriancas = vgDb(2).OpenRecordSet([Ô]Select * from Criancas [Ô], dbOpenDynaset)
If rsCriancas.RecordCount > 0 Then
rsCriancas.MoveFirst
Do While Not rsCriancas.EOF
If rsCriancas!Idade = [Ô]0[Ô] And Criancas!Idademes = [Ô]0[Ô] And Criancas!Idadedia <> [Ô]0[Ô] And Criancas!A_sexo = [Ô]F[Ô] Then
qt_reg = qt_reg + 1
End If
rsCriancas.MoveNext
Loop
End If
Conta_cri = qt_reg
End Function
[i]
Mas a lentidão nesse processamento é tamanho que inviabiliza sua utilização, mesmoporque, a tendência do BD Access é sempre crescer.
Gostaria, se puderem meajudar, montar uma instrução SQL(para o BD MDB) que pudesse agilizar essa rotina mas tenho muito pouco conhecimento sobre SQL.
Desde já agradeço
Enéa Monteiro
Com base no que você escreveu, tente assim:
[txt-color=#0000f0]Select Count(*)
From Criancas
Where Idade = [ô]0[ô]
And IdadeMes = [ô]0[ô]
And IdadeDia != [ô]0[ô]
And A_Sexo = [ô]F[ô][/txt-color]
[txt-color=#0000f0]Select Count(*)
From Criancas
Where Idade = [ô]0[ô]
And IdadeMes = [ô]0[ô]
And IdadeDia != [ô]0[ô]
And A_Sexo = [ô]F[ô][/txt-color]
Boma dia Tecla
Não funciona da maneira que me instruiu. Quando executo, ocorre erro logo após o Select -> Count(*).
Enéa
Não funciona da maneira que me instruiu. Quando executo, ocorre erro logo após o Select -> Count(*).
Enéa
Qual erro ?
Abraços
Abraços
Syntax error em Select Count(*)
tenta assim
Set rsCriancas = vgDb(2).OpenRecordSet([Ô]Select count(idade) as TotalIdade,count(idademes) As TotalMes, count(idadedia) As totaldias, A_SEXO from Criancas [Ô], dbOpenDynaset)
if rsCriancas.RecordCount > 0 Then
rsCriancas!totalidade= [Ô]0[Ô] And Criancas!totalmes= [Ô]0[Ô] And Criancas!totaldias <> [Ô]0[Ô] And Criancas!A_sexo = [Ô]F[Ô] Then
...
Set rsCriancas = vgDb(2).OpenRecordSet([Ô]Select count(idade) as TotalIdade,count(idademes) As TotalMes, count(idadedia) As totaldias, A_SEXO from Criancas [Ô], dbOpenDynaset)
if rsCriancas.RecordCount > 0 Then
rsCriancas!totalidade= [Ô]0[Ô] And Criancas!totalmes= [Ô]0[Ô] And Criancas!totaldias <> [Ô]0[Ô] And Criancas!A_sexo = [Ô]F[Ô] Then
...
Mas o que necessito é quantidade de registros na coluna que atenda à s condições:
Idadeano = 0 e idademes = 0 e a_sexo = [Ô]F[Ô] e idadedias <> [Ô]0[Ô]
A tabela origem da contagem tem as colunas Idadeano, Idademes e Idadedias. Na rotina que postei quero somente o total de crianças com menos de 1 mes de idade do sexo [Ô]F[Ô], que corresponde à tabela origem com os campos Idadeano = 0, idademes = 0 e idade dia <> 0 e sexo [Ô]F[Ô].
Idadeano = 0 e idademes = 0 e a_sexo = [Ô]F[Ô] e idadedias <> [Ô]0[Ô]
A tabela origem da contagem tem as colunas Idadeano, Idademes e Idadedias. Na rotina que postei quero somente o total de crianças com menos de 1 mes de idade do sexo [Ô]F[Ô], que corresponde à tabela origem com os campos Idadeano = 0, idademes = 0 e idade dia <> 0 e sexo [Ô]F[Ô].
Execute a consulta direto no SQL e poste o resultado (um print) no tópico.
Você pode postar a estrutura da tabela para ajudar na construção do Select?
Arquivo Origem (CRIANCAS)
Codigo/INTEIROR LONGO/Chave prfimária
Cod_seg/Texto/10
COD_AREA/Texto/11
Cod_micoa/Texto/13
NFamilia/Texto/9
DTNASC/Texto/10
NASCIMENTO/DataHora
IDADE/Texto/6
IDADEMES/Texto/6
IDADEDIA/Texto/6
A_SEXO/Texto/6
ESCOLA/Texto/8
COD_OCUP/Texto/11
NOME_OCUP/Texto/52
Arquivo Destino (RCAD) sem nenhuma chave
Cri_menos1mf/Inteiro Longo
Cri_1a11mf
Cri_1a4af
Cri_5a9af
Cri_menos1mm
Cri_1a11mm
Cri_1a4am
Cri_5a9am
Total_cri
Ado_10a14af
Ado_15a19af
Ado_10a14am
Ado_15a19am
Total_ado
Adu_20a24f
Adu_25a29f
Adu_30a34f
Adu_35a39f
Adu_40a44f
Adu_45a49f
Adu_50a54f
Adu_55a59f
Adu_20a24m
Adu_25a29m
Adu_30a34m
Adu_35a39m
Adu_40a44m
Adu_45a49m
Adu_50a54m
Adu_55a59m
Total_adu
Ido_60a64f
Ido_65a69f
Ido_70a74f
Ido_75a79f
Ido_mais80f
Ido_60a64m
Ido_65a69m
Ido_70a74m
Ido_75a79m
Ido_mais80m
Total_ido
Total_geral
Codigo/INTEIROR LONGO/Chave prfimária
Cod_seg/Texto/10
COD_AREA/Texto/11
Cod_micoa/Texto/13
NFamilia/Texto/9
DTNASC/Texto/10
NASCIMENTO/DataHora
IDADE/Texto/6
IDADEMES/Texto/6
IDADEDIA/Texto/6
A_SEXO/Texto/6
ESCOLA/Texto/8
COD_OCUP/Texto/11
NOME_OCUP/Texto/52
Arquivo Destino (RCAD) sem nenhuma chave
Cri_menos1mf/Inteiro Longo
Cri_1a11mf
Cri_1a4af
Cri_5a9af
Cri_menos1mm
Cri_1a11mm
Cri_1a4am
Cri_5a9am
Total_cri
Ado_10a14af
Ado_15a19af
Ado_10a14am
Ado_15a19am
Total_ado
Adu_20a24f
Adu_25a29f
Adu_30a34f
Adu_35a39f
Adu_40a44f
Adu_45a49f
Adu_50a54f
Adu_55a59f
Adu_20a24m
Adu_25a29m
Adu_30a34m
Adu_35a39m
Adu_40a44m
Adu_45a49m
Adu_50a54m
Adu_55a59m
Total_adu
Ido_60a64f
Ido_65a69f
Ido_70a74f
Ido_75a79f
Ido_mais80f
Ido_60a64m
Ido_65a69m
Ido_70a74m
Ido_75a79m
Ido_mais80m
Total_ido
Total_geral
Tentei com a instrução abaixo:
Private ....
Dim SQL As String
Dim Qtreg As Integer
[ô]Dim Criancas As RecordSet
SQL = [Ô]SELECT Count(Criancas.[A_sexo]) As Total, Criancas][Ô] & _
[Ô]FROM Criancas[Ô] & _
[Ô]WHERE(Criancas.[Idade] = [ô]0[ô]) And (Criancas.[Idademes] = [ô]0[ô]) And (Criancas.[Idadedia] > [ô]0[ô]) And (Criancas.[A_sexo] = [ô]F[ô])[Ô]
Set Criancas = vgDb(2).OpenRecordSet(SQL, dbOpenDynaset)
Qtreg = Criancas!Total
mas dá erro OverFlow!
Private ....
Dim SQL As String
Dim Qtreg As Integer
[ô]Dim Criancas As RecordSet
SQL = [Ô]SELECT Count(Criancas.[A_sexo]) As Total, Criancas][Ô] & _
[Ô]FROM Criancas[Ô] & _
[Ô]WHERE(Criancas.[Idade] = [ô]0[ô]) And (Criancas.[Idademes] = [ô]0[ô]) And (Criancas.[Idadedia] > [ô]0[ô]) And (Criancas.[A_sexo] = [ô]F[ô])[Ô]
Set Criancas = vgDb(2).OpenRecordSet(SQL, dbOpenDynaset)
Qtreg = Criancas!Total
mas dá erro OverFlow!
Tópico encerrado , respostas não são mais permitidas