Quantidade de registros...
Moderador: Moderadores
-
carlos_dornelas
- Usuário Nível 3

- Mensagens: 400
- Registrado em: 25 Ago 2004 21:54
Quantidade de registros...
Prezados, como obter a quantidade de registros de um dbf sem que ele esteja aberto? É possível?
Grsto
Antonio Carlos
Grsto
Antonio Carlos
Re: Quantidade de registros...
De imediato, pelo clipper não tem como, pois essa informação esta dentro do arquivo.
Não dá para calcular, pois os campos normalmente tem tamanhos e quantidades diferentes em cada dbf.
O DBase mostrava isso, mas ele abria o arquivo para ler essa informação.
A não ser que haja alguma ferramenta/função/biblioteca que eu desconheça.
Não dá para calcular, pois os campos normalmente tem tamanhos e quantidades diferentes em cada dbf.
O DBase mostrava isso, mas ele abria o arquivo para ler essa informação.
A não ser que haja alguma ferramenta/função/biblioteca que eu desconheça.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
{POG - Programação Orientada a Gambiarra}
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Re: Quantidade de registros...
Amiguinho,
Porque voce não cria uma tabela estatistica?
Esta tabela conteria o nome do .DBF e quantidade de registros totais e deletados.
Cada vez que entrar em seu sistema voce atualiza esta tabela com a quantidade de cada um.
Caso queira ir mais a fundo voce deverá consultar via comandos de baixo nivel os bytes de 4 a 7 que informam o numero de registros existentes na tabela
Porque voce não cria uma tabela estatistica?
Esta tabela conteria o nome do .DBF e quantidade de registros totais e deletados.
Cada vez que entrar em seu sistema voce atualiza esta tabela com a quantidade de cada um.
Caso queira ir mais a fundo voce deverá consultar via comandos de baixo nivel os bytes de 4 a 7 que informam o numero de registros existentes na tabela
0 - 1 byte - dBASE III version number (03H without a .DBT file) (83H with a .DBT file)
1-3 - 3 bytes - date of last update (YY MM DD) in binary format
4-7 - 32 bit - number number of records in data file
8-9 - 16 bit - number length of header structure
10-11 - 16 bit - number length of the record
12-31 - 20 bytes - reserved bytes (version 1.00)
32-n - 32 bytes - each field descriptor array (see below)
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
carlos_dornelas
- Usuário Nível 3

- Mensagens: 400
- Registrado em: 25 Ago 2004 21:54
Re: Quantidade de registros...
Obrigado Gvc pela atenção!
Rochinha, teria como obter os bytes 4 a 7 sem ter que usar o fopen? Eu já havia pensado em manter uma estatística via variáveis, mas acho que vopu tentar implentar uma matriz estatística.
Grato
Antonio Carlos
Rochinha, teria como obter os bytes 4 a 7 sem ter que usar o fopen? Eu já havia pensado em manter uma estatística via variáveis, mas acho que vopu tentar implentar uma matriz estatística.
Grato
Antonio Carlos
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Re: Quantidade de registros...
Amiguinho,
Para obter informações das tabelas voce terá de abri-las de qualquer forma, seja por USE o FOpen()
Eu sugiro o USE e um Recco() sendo que voce terá de verificar se o SET DELETE ON/OFF influencia no resultado da contagem e se for o caso efetuar PACK.
Para obter informações das tabelas voce terá de abri-las de qualquer forma, seja por USE o FOpen()
Eu sugiro o USE e um Recco() sendo que voce terá de verificar se o SET DELETE ON/OFF influencia no resultado da contagem e se for o caso efetuar PACK.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Re: Quantidade de registros...
[Rochinha]
Somente para testar os meus parcos conhecimentos:
O Reccount() retorna a quantidade de registros do arquivo, contando com os marcados como apagados.
O SET DELETED ON faz com que a leitura de registro não mostre os marcados como apagados. Isso vai influenciar a contagem de registros ativos se o sistema "correr" os registros.
A contagem assim e o RECCOUNT() só serão iguais se não tiver nenhum registro marcado como apagado.
Isso normalmente acontece em arquivos "novos" ou depois de rodar o PACK no arquivo.
?Errei algo no comentário?
O problema da tabela estátistica é que se alguma outra aplicação abrir e manipular o arquivo, a tabela em questão estará errada.
Somente para testar os meus parcos conhecimentos:
O Reccount() retorna a quantidade de registros do arquivo, contando com os marcados como apagados.
O SET DELETED ON faz com que a leitura de registro não mostre os marcados como apagados. Isso vai influenciar a contagem de registros ativos se o sistema "correr" os registros.
A contagem assim e o RECCOUNT() só serão iguais se não tiver nenhum registro marcado como apagado.
Isso normalmente acontece em arquivos "novos" ou depois de rodar o PACK no arquivo.
?Errei algo no comentário?
O problema da tabela estátistica é que se alguma outra aplicação abrir e manipular o arquivo, a tabela em questão estará errada.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
{POG - Programação Orientada a Gambiarra}
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Re: Quantidade de registros...
Amiguinhos,
GVC
Voce não esta errado.
Fiz um pequeno teste no qual pude verificar que o SET DELETE não influencia mesmo em nada a não ser visualmente.
Portanto se recuperarmos as informações do .DBF via FOpen() obteremos somente o total de registros.
Eis o codigo do teste e a sugestão de se obter estas informações via USE em uma rotina no inicio da abertura de seu aplicativo e armazena-la em uma tabela.
O que se tem de repensar é:
Aplicativo extra sistema abrindo sua bases de dados para manipulação? isso é perigoso. Somente seu sistema pode abrir as tabelas em modo completo, outras aplicações só poderão abrir em modo restrito, senão o controle vai pro espaço.
GVC
Voce não esta errado.
Fiz um pequeno teste no qual pude verificar que o SET DELETE não influencia mesmo em nada a não ser visualmente.
Portanto se recuperarmos as informações do .DBF via FOpen() obteremos somente o total de registros.
Eis o codigo do teste e a sugestão de se obter estas informações via USE em uma rotina no inicio da abertura de seu aplicativo e armazena-la em uma tabela.
Código: Selecionar todos
/*
*
* Refaz estrutura do arquivo NATUREZA
*
*/
#define CRLF chr(13)+chr(10)
function main
//
Request DBFCDX
RddRegister('DBFCDX',1)
RddSetDefault('DBFCDX')
Request OrdKeyNo
Request OrdKeyCount
dbCloseAll()
erase( "teste.dbf" )
ESTRU_DBF := { { "IDTESTE" , "N", 2, 0 } , ;
{ "TESTE" , "C", 10, 0 } }
dbcreate( "TESTE", ESTRU_DBF )
use teste exclusive new
for i = 1 to 99
dbAppend()
teste->idteste := i
teste->teste := "TESTE "+alltrim(str(i))
next
MsgStop( "Passo 1 - Registros: "+str(recco()) )
dbGotop()
go 40; dbDelete()
go 50; dbDelete()
go 51; dbDelete()
go 52; dbDelete()
go 64; dbDelete()
go 73; dbDelete()
go 75; dbDelete()
go 79; dbDelete()
go 84; dbDelete()
MsgStop( "Passo 2 - Registros: "+str(recco()) )
Set Delete On
dbGotop()
MsgStop( "Passo 3 - Registros: "+str(recco()) )
Set Delete Off
Set Filter to idteste > 10 .and. idteste < 30
dbGotop()
MsgStop( "Passo 3 - Registros: "+str(recco()) )
Set Filter to idteste > 40 .and. idteste < 60
dbGotop()
MsgStop( "Passo 4 - Registros: "+str(recco()) )
Set Filter to deleted()
dbGotop()
MsgStop( "Passo 5 - Registros: "+str(recco()) )
Set Delete Off
Set Filter to
nDeletadosSIM := 0
nDeletadosNAO := 0
dbGotop()
do while .not. eof()
nDeletadosSIM := nDeletadosSIM + iif( deleted(), 1, 0 )
nDeletadosNAO := nDeletadosNAO + iif( deleted(), 0, 1 )
skip
enddo
dbGotop()
MsgStop( "Passo 6 - Registros: " + ;
CRLF+"Deletados(SIM) :" + str(nDeletadosSIM) + ;
CRLF+"Deletados(NAO) :" + str(nDeletadosNAO) )
dbCloseAll()
return .t.
function MsgStop( texto )
? texto
return nil
Aplicativo extra sistema abrindo sua bases de dados para manipulação? isso é perigoso. Somente seu sistema pode abrir as tabelas em modo completo, outras aplicações só poderão abrir em modo restrito, senão o controle vai pro espaço.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Re: Quantidade de registros...
[rochinha]
Sim. Eu sei que outro aplicativo não deveria acessar as bases de dados, mas não tem como garantir que não serão abertos via dbu ou algo assim. Roda um pack e a contagem do arquivo já era.
Mas vamos simplificar. Eu fiquei curioso sobre o motivo do colega [carlos_dornelas] querer saber a quantidade de registros sem abrir o arquivo.
Com qq aplicativo, será necessário abrir o arquivo para ler as informações de controle dele, mesmo que usando baixo nível.
Não dá para saber a quantidade de registros usando o tamanho em bytes. Lembrando que o DBF tb tem um caracter apontador de final de arquivo.
Sim. Eu sei que outro aplicativo não deveria acessar as bases de dados, mas não tem como garantir que não serão abertos via dbu ou algo assim. Roda um pack e a contagem do arquivo já era.
Mas vamos simplificar. Eu fiquei curioso sobre o motivo do colega [carlos_dornelas] querer saber a quantidade de registros sem abrir o arquivo.
Com qq aplicativo, será necessário abrir o arquivo para ler as informações de controle dele, mesmo que usando baixo nível.
Não dá para saber a quantidade de registros usando o tamanho em bytes. Lembrando que o DBF tb tem um caracter apontador de final de arquivo.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
{POG - Programação Orientada a Gambiarra}
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Re: Quantidade de registros...
Amiguinho,
Talvez o que ele queira é saber se algum registro ou a tabela teve seu dados manipulados às escondidas.
Ou talvez algum teste CRC ou coisa do tipo pode dar mais segurança.
Talvez o que ele queira é saber se algum registro ou a tabela teve seu dados manipulados às escondidas.
Ou talvez algum teste CRC ou coisa do tipo pode dar mais segurança.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
carlos_dornelas
- Usuário Nível 3

- Mensagens: 400
- Registrado em: 25 Ago 2004 21:54
Re: Quantidade de registros...
Amigos, eu preciso controlar o tamanho das bases para evitar que o usuário troque as bases e utilize o programa para controlar operaçoes de mais de um usuário. Já resolvi o problema. Se tivéssemos uma forma de autenticar os .dbs de alguma forma, seria muito útil.
Antonio Carlos
Antonio Carlos
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Re: Quantidade de registros...
Amiguinho,
Eu parei de acompanhar o projeto WAPI porque fiquie muito tempo sem acessar o forum e agora vejo que esta num patamar muito acima da linha de raciocionio que eu vinha acompanhando.
Mas se voce der uma verificada, talvez encontre algo a respeito.
Eu parei de acompanhar o projeto WAPI porque fiquie muito tempo sem acessar o forum e agora vejo que esta num patamar muito acima da linha de raciocionio que eu vinha acompanhando.
Mas se voce der uma verificada, talvez encontre algo a respeito.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Re: Quantidade de registros...
HB_MD5File()
Calculates a message digest for a file using the MD5 algorithm.
Vc pode usar isto então para validar alguns arquivos de controle do seu sistema.
Calculates a message digest for a file using the MD5 algorithm.
Vc pode usar isto então para validar alguns arquivos de controle do seu sistema.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
{POG - Programação Orientada a Gambiarra}
