Página 1 de 2

Qual o limite do dbf??

Enviado: 12 Jun 2007 18:31
por carlos_dornelas
Pessoal, qual o limite de campos que posso incluir em um .dbf? Tentei criar uma base, cfe. abaixo, com 2300 campos, mas o programa aborta com aquela mensagem do windows xp (o programa xx encontrou um problema e precisa ser fechado)? Alguém pode dar uma luz?

functio criaarq()

release aq1
close all
aq1:={}
for k=1 to 2300
l=alltrim(str(k))
z='d'+l
aadd(aq1,{z,'C',3,0})
next

alert('vou tentar criar a base')
dbcreate('ars',aq1)
close all

alert('nao chega aqui')

Enviado: 13 Jun 2007 11:09
por gvc
Tá. Só queria saber pra quê um dbf com 2300 campos.

O DBF guarda a estrutura no início dele. Uma estrutura muito grande vai estufar o dbf.
O DBU-Clipper não vai exibir todos os campos desse DBF.
No DBU-XHarbour exibiu arquivos com muitos campos, mas não chegou ainda a um limite.

Se é uma necessidade, talvez seja melhor estudar melhor esse seu DBF.

Enviado: 13 Jun 2007 11:37
por MARCELOG
Vou até conferir,
mas com 99% de certeza são 255 campos.

MarceloG

Bem...

Enviado: 13 Jun 2007 13:37
por rmg
Primeira coisa, porque um dbf com 2300 campos? Isso é inviável. Realmente nunca vi uma tabela, em banco nenhum com 2300 campos.

E quanto a quantidade de campos que um dbf suporta, isso é variável... Não dá para se definir ao certo. Fiz alguns testes aqui e o resultado foi o seguinte:

- Máquina servidor linux debian, compilando com xHarbour 0.99.60
O máximo de campos que consegui criar em um DBF foi 2096 campos. A partir deste número já apresenta falha de segmentação (core dumped).

- Máquina estação Windows XP, compilando com Clipper 5.3+Blinker
O máximo de campos que consegui criar em um DBF e abrir com a função browse() foi de 318 campos. Acima desta quantidade, consegui exibir somente utilizando o dbedit(). Mesmo assim, acima de 1793 campos tb dá erro de falta de memória.

Só que o que temos que observar é que fiz estes testes utilizando a estrutura informada pelo nosso amigo carlos_dornelas, ou seja, campos Caractere de 3 posições. Mas se eu colocasse por exemplo na estrutura para criar todos os campos com Caractere de 1, com certeza iria poder criar muito mais campos e se tivesse especificado por exemplo a estrutura com os campos Caratere de 100, por exemplo, com certeza iria poder criar MUUUUITO menos campos.

Em resumo, a quantidade de campos no DBF é muito relativa, sempre levando em conta a estrutura da tabela e o tamanho dos campos que nele estão.

Enviado: 13 Jun 2007 15:03
por Maligno
Pelo que percebo, lendo o código do colega, ele quis apenas TESTAR a criação de um DBF com uma quantidade PROPROSITALMENTE exagerada de campos.

Enviado: 14 Jun 2007 00:40
por carlos_dornelas
É isso aí pessoal! Valeu pelos comentários. Maligno, acertou na mosca!

[]s

Antonio

Enviado: 15 Jun 2007 00:41
por Stanis Luksys
Hehehehe!!!

Essa eu não sabia, 1783 campos em um DBF!!!!!

Eu ja vi muita gente criar arquivos que armazenam parâmetros nessa lógica, um campo pra cada configuração, por exemplo impressoras, cores do sistema, etc etc...

Eu prefiro usar dois campos somente, tipo CHAVE e VALOR, pois ja que vou ter que lembrar o nome do campo mesmo, ja dou logo um seek nele, mas tem a desvantagem de ficar tudo com o mesmo tipo e tamanho.

Agora, se não for pra casos como esse, não vejo o porque de tanto campo em um arquivo. Só vale como teste de stress mesmo... hehe

Quanto ao xHarbour ele melhorou mesmo um pouco o acesso a DBF, entre outras coisas acabou com o limite de 8 caracteres no nome do arquivo e principalmente no nome campo, isso é realmete bom, por que um grande sacrificio para o clippeiro sempre foi ficar criando campos com 8 letras... Bem, na verdade não foi xharbour em si, mas o acesso direto pelo Windows que possibilitou isso.

Pra aeste casos, o DBU lê a estrutura mas quebra o nome se vc salvar por ele. O DClip me parece que lê e salva certo...

Falou!!

É...

Enviado: 15 Jun 2007 11:00
por rmg
Como nosso amigo carlos_dornelas citou acima, ele queria simplesmente saber o máximo de campos que um dbf suportava, e explicou que não é um caso de uso, que foi somente para tirar dúvidas mesmo.
entre outras coisas acabou com o limite de 8 caracteres no nome do arquivo e principalmente no nome campo
Quanto ao nome do arquivo poder ser acima de 8 caracteres OK, mas "principalmente o nome do campo", não sei não, creio que ainda são 10 caracteres para o nome do campo no dbf. Os amigos do fórum me corrijam por favor, se eu estiver errado, mas creio que se colocarmos o nome do campo com mais de 10 caracteres, tipo: nome_campo01, nome_campo02, nome_campo03...etc. Exemplo:


a_arq:={}
for i=1 to 10
aadd(a_arq,{"nome_campo"+strzero(i,2),'C',10})
next
dbcreate('teste',a_arq)


Você até vai criar a estrutura do dbf, mas no final das contas, todos os campos terão o mesmo nome, ou seja, nome_campo (com 10 caracteres).
Se você especificar no seu programa teste->nome_campo01 não será encontrado, pois não existe este campo na tabela, e sim somente campos com nome "nome_campo".

Se eu estiver errado, por favor me corrijam.

Abraço.
Renato Martins

Re: É...

Enviado: 15 Jun 2007 23:23
por Stanis Luksys
rmg escreveu:
entre outras coisas acabou com o limite de 8 caracteres no nome do arquivo e principalmente no nome campo
Você até vai criar a estrutura do dbf, mas no final das contas, todos os campos terão o mesmo nome, ou seja, nome_campo (com 10 caracteres).
Se você especificar no seu programa teste->nome_campo01 não será encontrado, pois não existe este campo na tabela, e sim somente campos com nome "nome_campo".

Se eu estiver errado, por favor me corrijam.

Abraço.
Renato Martins
Sim, está errado, ele acessa sim, pelo programa, o campo de nome nome_campo_01 e não "confunde" com o nome_campo_02, como foi mencionado.
rmg escreveu:Você até vai criar a estrutura do dbf, mas no final das contas, todos os campos terão o mesmo nome, ou seja, nome_campo (com 10 caracteres).
Isso muito provavelmente acarretaria em erro em tempo de execução, não se pode ter dois campos com o mesmo nome em um DBF.

Para confirmar o que foi dito basta abrir no MS-Excel e verá o nome dos campos exatamente como foi criado pela função dbCreate(), tenho hoje campos com nome de até 20 caracteres lendo normalmente, por exemplo "impressora_padrão" e "impressora_auxiliar", e note que os nomes são muito parecidos entre sí no seu início. (isso quando não uso o esquema "chave valor" que mencionei acima)

Eu particularmente gosto de reler meu código e saber de cara o que são as variáveis e tudo mais, então tenho o costume de usar nomes longos em tudo, EX: VariavelQueFazTalCoisa := 0. Mas aí já pessoal... hehehe

Falou!!!

bom dia

Enviado: 18 Jun 2007 07:39
por rmg
Amigo Stanis,

Gostaria de sabe como está criando a estrutura dos seus dbfs, porque se formos criar com a dbcreate, como mostrei no exemplo, ele vai gerar campos no dbf somente com 10 caracteres sim.

E não vai dar erro em tempo de execução, pois mesmo tendo 200 campos com o mesmo nome no dbf, ele vai entender que é somente um, ou seja, vai gravar ou alterar valores em todos os campos como se fosse único.

Gostaria de lembrar que fiz testes utilizando Clipper 5.3 e também testes utilizando o xHarbour 0.99.60 no Linux.

Qualquer um, gero o dbf como no exemplo que citei e todos vão gerar os campos somente com 10 caracteres, utilizando a função dbcreate().

E se abrirmos o arquivo no Excel, ou DBU, ou DBase ou qualquer outro programa para edição de DBF, vamos ver todos os campos COM 10 CARACTERES.

Como vc cria a estrutura de seus DBFs? Confesso que nunca tinha tentado antes criar nome de campos DBF com mais de 10 posições, mas quando surgiu este tópico, fui tentar para ver a veracidade do fato, mas realmente nos testes que fiz não ocorreu como nosso amigo Stanis mencionou.

Abraço.
Renato Martins Gomes

Enviado: 18 Jun 2007 11:26
por Stanis Luksys
Hehehe,

Eu crio usando a função dbCreate() mesmo. Tanto no xhb 96 como 97. talvez você esteja com algum problema na sua versão, procure utilizar a mais recente do CVS. No linux também funciona normalmente.


Se não acredita te envio o DBF e você abre no Excel e comprova.

Falou maninho.

Olá

Enviado: 18 Jun 2007 14:30
por rmg
Caro amigo Stanis,

Em momento algum duvidei de você.
Como já citei acima, é que nunca tinha nem ao menos tentado criar um dbf contendo nome de campos com mais de 10 caracteres.

O que falei foi que quando vi sua citação, fui fazer os testes e comigo não deu certo. Realmente os dbf´s que criei aqui tanto no xHarbour quanto no Clipper ficaram com 10 caracteres nos nomes dos campos.

Mas se vc falou q cria, é pq cria mesmo. Vou continuar tentando. rsrsrs

Abraço.

Enviado: 18 Jun 2007 15:13
por Stanis Luksys
Opa,

Talvez o problema no seu caso aí seja o uso das macros.

Tente na mão mesmo, tipo assim:

Código: Selecionar todos

aDBF := {}
AAdd( aDBF, { "nome_grande_do_campo","C",30,0 } )
dbCreate( "teste.dbf", aDBF )
Falou!

Enviado: 18 Jun 2007 15:54
por edmarfrazao
Tive um problema com dbf.

tinha uma rotina que alterava a estrutura e criava novos campos

mandei criar um novo dbf com 02 campos iguais.

O DBF aceitou normalmente.


Alguem sabe se tem como fazer o dbf recusar a criarção com dois campos iguais?

Enviado: 18 Jun 2007 18:24
por sygecom
Alguem sabe se tem como fazer o dbf recusar a criarção com dois campos iguais?
Tche, seu caso acho que seria uma questão de Logica ???? acho que vc pode impedir isso antes da Criação do DBF !!!

Abraços
Leonardo Machado