Qual o limite do dbf??
Moderador: Moderadores
-
carlos_dornelas
- Usuário Nível 3

- Mensagens: 400
- Registrado em: 25 Ago 2004 21:54
Qual o limite do dbf??
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')
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')
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.
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.
"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}
Bem...
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.
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.
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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
carlos_dornelas
- Usuário Nível 3

- Mensagens: 400
- Registrado em: 25 Ago 2004 21:54
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
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!!
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!!
Stanis Luksys
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
É...
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.
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
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:entre outras coisas acabou com o limite de 8 caracteres no nome do arquivo e principalmente no nome campo
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
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
Re: É...
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).entre outras coisas acabou com o limite de 8 caracteres no nome do arquivo e principalmente no nome campo
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
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.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).
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!!!
Stanis Luksys
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
bom dia
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
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
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
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.
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.
Stanis Luksys
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Olá
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.
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.
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
Opa,
Talvez o problema no seu caso aí seja o uso das macros.
Tente na mão mesmo, tipo assim:
Falou!
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 )Stanis Luksys
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
-
edmarfrazao
- Usuário Nível 3

- Mensagens: 185
- Registrado em: 06 Dez 2005 11:16



