Atenção: Campo incremental em DBF

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
vailton
Colaborador
Colaborador
Mensagens: 390
Registrado em: 17 Nov 2005 19:08
Localização: Brasil
Contato:

Atenção: Campo incremental em DBF

Mensagem por vailton »

Olá

Um ponto que percebi lendo o código da função PsqControle() acima, que por sinal é muito boa, foi o seguinte: se o nome do DBF (nome+extensao) for maior de 12 bytes ele vai cortar o nome do arquivo e isto pode ser um problema. Como hoje é possível ter nome de arquivos maiors que o 8+3, seria interessante aumentar o tamanho do campo para prever isto em alguns cenários.

Espero ter ajudado para o assunto.
Vailton Renato
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"

E-mail/MSN: contato@vailton.com.br
Skype: vailtom
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Atenção: Campo incremental em DBF

Mensagem por rochinha »

Amiguinhos,

A versão de Harbour que uso em meu sistema é a mais jurássica possível, Alpha Build 45.0 Flex, portanto não poderia fazer uso desta maravilha, mas tenho em mente que um campo incremental sirva somente para impedir uma duplicidade.

Não sei como o campo incremental guardaria a sequência a não ser se no cabeçalho da estrutura, mas lembro que em Clipper tinhamos o controle SET UNIQUE para indices que poderia prevenir duplicidades.

O controle incremental dentro do DBF pode ter problema se por acaso registros paularem e ao transportar os registros intactos perdem o controle portanto campos incrementais não podem ser usados como CPFs de registros.

Creio até que os campos incrementais sejam reescritos ao se deletar alguns registros porque senão acontecem falhas de sequencia. A mesma flha que ocorre ao usar Recco() como contador de registros para dar sequencia: recco()+1.

A nossa função PSQControle() armazena os sequenciais em tabela separada, mas também não é segurança perpétua pois se perdermos o arquivo que contém os controles também se perde a sequencia.

Esperamos muito tempo para ter um recurso assim e para mudar leva tempo e coragem para deixar velhas técnicas.

A função PSQControle() recebe no primeiro parâmetro o resultado da função dbf(), se no Harbour ela retorna um nome maior que 8+3 nada impede de alterar o tamanho do campo nome para comportar outros tamanhos.

Em suma devemos fazer o melhor uso de toda oportunidade.
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.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Atenção: Campo incremental em DBF

Mensagem por JoséQuintas »

O incremental é guardado no cabeçalho.
NÃO é igual RecNo().

Na primeira implementaçào tinha falha, que não dava acesso ao incremental, e podia até renumerar numa cópia.
O campo incremental fica gravado no DBF, como um registro, então se torna único.
Não é igual SET UNIQUE ON, porque UNISQUE não impede nada, pode gravar duplicado à vontade, apenas só um registro fica visível no índice.
No Advantage Database é outra história, ele dá erro se tentar gravar duplicado, mas no Clipper/Harbour não.
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/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Atenção: Campo incremental em DBF

Mensagem por Itamar M. Lins Jr. »

Olá!
Creio até que os campos incrementais sejam reescritos ao se deletar alguns registros porque senão acontecem falhas de sequencia.
O comportamento é o mesmo de um SGBD qualquer.
Inclusive vc pode SETAR para ser 2, 3, 4 ... o PULO por exemplo vai contar de o primeiro será 2, o segundo 4...
Se apagar o registro não afeta a contagem.
O DBF do Harbour tem os PRINCIPAIS campos dos SGBD's, tem BLOB, TIME STAMP etc...
O Polonês(?) Przemek fez coisas no Harbour que chega 2040 e se vacilar não usaremos tudo que tem pronto no Harbour.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Atenção: Campo incremental em DBF

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu:O Polonês(?) Przemek fez coisas no Harbour que chega 2040 e se vacilar não usaremos tudo que tem pronto no Harbour.
O limite de variáveis atual, por exemplo, se você tiver uma máquina com 1 terabyte de memória, talvez ainda não consiga chegar no limite final do Harbour.
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/
Responder