VB COM SQL - CONTAR REGISTROS TOTALIZANDO EM OUTRA

NAMON 10/06/2011 21:36:15
#376473
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
TECLA 10/06/2011 22:27:55
#376475
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]
NAMON 11/06/2011 11:58:54
#376493
Boma dia Tecla

Não funciona da maneira que me instruiu. Quando executo, ocorre erro logo após o Select -> Count(*).
Enéa

RODRIGOFERRO 11/06/2011 12:03:18
#376494
Qual erro ?

Abraços
NAMON 11/06/2011 12:12:11
#376495
Syntax error em Select Count(*)
MARCELO.TREZE 11/06/2011 12:53:19
#376499
Resposta escolhida
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
...
NAMON 11/06/2011 13:29:34
#376500
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[Ô].
TECLA 11/06/2011 13:36:29
#376501
Execute a consulta direto no SQL e poste o resultado (um print) no tópico.
NETMANIA 11/06/2011 13:45:31
#376507
Você pode postar a estrutura da tabela para ajudar na construção do Select?
NAMON 11/06/2011 14:22:29
#376513
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

NAMON 11/06/2011 22:11:09
#376535
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!
Página 1 de 2 [18 registro(s)]
Tópico encerrado , respostas não são mais permitidas