Boa tarde Pessoal
To precisando contar os registros agrupando pelo campo "codpro" da tabela em questão e guardar em uma variável para gravar em banco posteriomente e estou enfrentando dificuldades.
Gostaria de um exemplo com poderia fazer usando o count ou outra forma de fazer no clipper, pois em sql eu já sei como fazer.
Contar registros antigo count do clipper
Moderador: Moderadores
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Contar registros antigo count do clipper
Olá!
Veja se atende tua necessidade:
Veja se atende tua necessidade:
Código: Selecionar todos
// Alexandre Santos - 20/10/2022
#include "inkey.ch"
PROCEDURE Main()
LOCAL p, aProd, cProd, aList := {}, Getlist := {}
Cls
If ! hb_FileExists( "SE225.DBF" )
If ! DbCreate( "SE225.DBF", { { "codpro", "C", 5, 0 } }, NIL, .T., "tbProd", NIL, NIL, NIL )
Alert( "Falha ao criar arquivo teste" )
Return
Else
For Each p In { "00005", "00005", "04798", "04154", "00005", "00011", "00005", "00007", "00005", "00007", "04798" }
tbProd->( DbAppend() )
tbProd->codpro := p
Next
Endif
Else
If ! DbUseArea( .T., NIL, "SE225.DBF", "tbProd", .T. )
Alert( "Falha ao abrir arquivo teste" )
Return
Endif
Endif
cProd := " "
@ 10,10 Say "Digite um codigo de produto ou ENTER para contar todos:" Get cProd Pict "99999"
Read
If LastKey() == K_ESC
RETURN
Endif
tbProd->( DbGoTop() )
aProd := ContarProd( cProd )
If Empty( aProd )
Alert( "Nenhum produto encontrado" )
Else
If Len( aProd ) > 1
ASort( aProd,,, { |x,y| x[1] <= y[1] } )
Endif
For Each p in aProd
AAdd( aList, PadC( p[1], 10 ) + Transform( p[2], "99999" ) )
Next
AChoice( 12, 10, 20, 30, aList )
Endif
tbProd->( DbCloseArea() )
Cls
RETURN
//--------------------------------------------------
FUNCTION ContarProd( cProd )
LOCAL aRet := {}, bFilter, nPos
If Empty( cProd )
bFilter := { || .T. }
Else
bFilter := { || tbProd->codpro == cProd }
Endif
While tbProd->( ! Eof() )
If Eval( bFilter )
If ( nPos := AScan( aRet, { |x| x[1] == tbProd->codpro } ) ) == 0
AAdd( aRet, { tbProd->codpro, 1 } )
Else
aRet[ nPos, 2 ] += 1
Endif
Endif
tbProd->( DbSkip() )
Enddo
RETURN aRet
//--------------------------------------------------[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Contar registros antigo count do clipper
Apenas comentário:
No caso do DBF, todo processamento é no próprio programa, e não na base de dados, como é o caso do SQL.
Lógico, tem como fazer acesso a DBF usando comandos SQL, mas isso não faz parte do Harbour padrão.
O que está querendo poderia ser feito usando TOTAL ON ...., o que criaria um outro DBF com os totais.
Sinceramente nunca usei, vai precisar procurar detalhes se quiser usar.
Nem sempre o "automático" é o mais rápido, e acabamos acostumando a não usar certas coisas automáticas.
Não é o caso do SQL, onde o gerenciador do SQL otimiza tudo ao máximo pra ganhar velocidade.
No caso do DBF, todo processamento é no próprio programa, e não na base de dados, como é o caso do SQL.
Lógico, tem como fazer acesso a DBF usando comandos SQL, mas isso não faz parte do Harbour padrão.
O que está querendo poderia ser feito usando TOTAL ON ...., o que criaria um outro DBF com os totais.
Sinceramente nunca usei, vai precisar procurar detalhes se quiser usar.
Nem sempre o "automático" é o mais rápido, e acabamos acostumando a não usar certas coisas automáticas.
Não é o caso do SQL, onde o gerenciador do SQL otimiza tudo ao máximo pra ganhar velocidade.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Contar registros antigo count do clipper
Olá!
Claro que não dá para comparar DBF com SQL mas, se compararmos as funcionalidades de alguns comandos DBF com comandos SQL que utilizam funções agregadas, podemos dizer que:
- TOTAL ON... equivale a SELECT SUM(...)...
- AVERAGE ... TO equivale a SELECT AVG(...)...
- COUNT TO... equivale a SELECT COUNT(...)...
O exemplo que postei equivale a
Nada a ver... você consegue fazer isto? Se, ao invés de TOTAL ON tivesse escrito COUNT TO, faria mais sentido e resolveria o problema para um código específico de produto...JoséQuintas escreveu:O que está querendo poderia ser feito usando TOTAL ON ...., o que criaria um outro DBF com os totais.
Claro que não dá para comparar DBF com SQL mas, se compararmos as funcionalidades de alguns comandos DBF com comandos SQL que utilizam funções agregadas, podemos dizer que:
- TOTAL ON... equivale a SELECT SUM(...)...
- AVERAGE ... TO equivale a SELECT AVG(...)...
- COUNT TO... equivale a SELECT COUNT(...)...
O que o colega precisa é o equivalente em DBF para um SELECT COUNT(...)...,GROUP BY... o que não existe em DBF.alexlucc escreveu:To precisando contar os registros agrupando pelo campo "codpro" da tabela em questão e guardar em uma variável para gravar em banco posteriomente e estou enfrentando dificuldades.
O exemplo que postei equivale a
Código: Selecionar todos
SELECT codpro, COUNT(*) FROM product_details GROUP BY codpro;[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Contar registros antigo count do clipper
Ok, TOTAL ON não tem pra quantidade de registros, a não ser que exista um campo com o valor 1.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
