Página 2 de 2
Atenção: Campo incremental em DBF
Enviado: 23 Set 2021 17:14
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.
Atenção: Campo incremental em DBF
Enviado: 25 Set 2021 05:57
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.
Atenção: Campo incremental em DBF
Enviado: 25 Set 2021 08:13
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.
Atenção: Campo incremental em DBF
Enviado: 25 Set 2021 09:51
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.
Atenção: Campo incremental em DBF
Enviado: 25 Set 2021 11:39
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.