Página 2 de 5

STRU - Lista e modifica a estrutura dos arquivos dbfs

Enviado: 26 Ago 2012 12:41
por Pablo César
Puxa, obrigado Jairinho ! Vou verificar e vou limitar até 8 no decimal também.

STRU - Lista e modifica a estrutura dos arquivos dbfs

Enviado: 26 Ago 2012 16:30
por Pablo César
Como é bom contar com os olhos atentos de outra pessoa. Agradeço Jairo. Encontrei o que razão de ter deixado de funcionar a mudança de estrutura para campos no decimal. Na linha 1392 da versão anterior estava:

Coluna5 := If( Coluna2=="N", Str(Modi_Stru.Spinner_2.Value,5), "" )

e era para haver sido:

Coluna5 := If( Coluna3=="N", Str(Modi_Stru.Spinner_2.Value,5), "" )

Acontece que a primeira coluna não é exibida no Grid. Ela guarda a sequencia inicial dos campos o que é fundamental para o processamento na hora de converter e puxar os dados do dbf original, quando mudado a estrutura.

A limitação do decimal, foi fácil. Acredito que deve ter outras para o caso de TAMANHO do tipo caracter e numérico também. Mais uma vez, obrigado amigo Jairo.

STRU - Lista e modifica a estrutura dos arquivos dbfs

Enviado: 27 Ago 2012 11:00
por Jairo Maia
Olá Pablo,

Agora está funcionando corretamente os campos numéricos com casas decimais. Valeu!
Pablo César escreveu:Como é bom contar com os olhos atentos de outra pessoa.
A rigor Pablo, e sem nenhuma demagogia, ele transcendeu a idéia inicial de transformar a estrutura do banco de dados em tabela para postagem no fórum, e acabou se tornando uma ferramente prática e facil para manusear os bancos de dados. Estou usando a versão GUI, e achei bastante útil.
Pablo César escreveu:A limitação do decimal, foi fácil. Acredito que deve ter outras para o caso de TAMANHO do tipo caracter e numérico também.
Já que levantou a questão, e visto sua boa vontade em aceitar sugestões, vou fazer então outras observações:

1 - Quanto a limitação do campo caracter:
Campo do tipo caracter é simples: 1 a 65.484 caracteres (em Clipper é de 1 a 255)

2 - Quanto aos campos numércos, SEM CASAS DECIMAIS:
Se um campo não tem casas decimais, o limite permanece em 16. Em Harbour, Se definir um campo superior a 16, o banco de dados aceitará até 64 caracteres. Mas não funciona, creio que isso será para futuro, e se tentar preencher acima de 16, ele será truncado, e acima do caracter 16 será transformado em zero. Assim, pode causar danos sérios no sistema se isso ocorrer. Então sugiro que o limte para campos númericos sem casas decimais fique em 16.

3 - Campos numéricos COM CASAS DECIMAIS:
Quando o campo numérico tiver casas decimais, fica um pouco mais complexo, veja:

O limite pode chegar a 17, que comtempla 16 caracteres mais o ponto: 12345678.12345678

Ocorre que para montar esta estrutura, deve-se levar em conta as casas decimais, assim, um campo com 8 números principais mais 8 casas deciamis, NECESSARIAMENTE deve ser definido com tamanho 17.

Tentando exemplificar:

Defino na estrutura um tamnho 16, e coloco que quero 8 casas decimais. O campo será criado com o total de 16 digitos, sendo que um será o ponto, então se terá um resultado assim: 1234567.12345678

Se eu definir o tamnho do campo em 10 e 8 casas decimais, o campo será assim: 1.12345678

Se eu defino o tamanho do campo em 6 com oito casa deciamis, o resultado será assim: ********, e dá erro ao tentar gravar os dados.

Resumindo, o tamanho de um campo com casas deciamis se limita a 17, e o tamanho definido deve se levar em conta o tamanho do INTEIRO + FRAÇÃO + PONTO. Assim, de desejo trabalhar com um campo onde quero digitar 10 caractrers inteiros mais duas casas decimais, terei que definir o tamanho em 13, pois será deduzido as duas casas decimais mais o ponto e o restante será o tamanho do número "INTEIRO".

Então, se eu tentar colocar no utilitário a definição de um campo decimal desta forma: Tamnaho 6 e Decimal 8, ele deve bloquear, pois haverá erro, ou a seu critério, ajustar automaticamente observando os limites conforme as regras da criação do campo.

4 - Na janela das funções MODIFICAR, ficaria muito legal se houvesse um botão SAIR. Fica como sugestão.

Não sei se consegui ser claro, espero ter ajudado.

STRU - Lista e modifica a estrutura dos arquivos dbfs

Enviado: 27 Ago 2012 11:59
por Pablo César
Obrigado Jairo, aqui mais uma aula ! Nossa, não sabia ou não lembrava dessa capacidade para campos do tipo caracter (acho que foi mencionando aqui no fórum), mas é impressionante a capacidade entre Harbour e Clipper. Só não sei, como vou fazer para definir essa questão na hora de aumentar. Bom creio que a informação de saber se o dbf foi feito em Clipper ele poderia perguntar. Também fiquei de cara com o tamanho mais de 16 do campo numérico, ele aceitou como você tinha dito, mudou a estrutura, mas na hora de fazer o replace, ele preenche com zeros após o 16º caracter.

Sei que devo fazer uma rotina de verificação do tamanho decimal para que não sobrepasse o tamanho principal, considerando decimais mais ponto. Isso já sabia, mas era bom fazer uma regra, vou ver ainda. Também preciso alertar ao usuário quando a estrutura for menor que a do tamanho original e que haverá perda de dados, seja em qualquer tipo de campo.
4 - Na janela das funções MODIFICAR, ficaria muito legal se houvesse um botão SAIR. Fica como sugestão.
Crees que fica melhor substituir o botão cancelar por sair, na hora de edição dos campos ? Atualmente o botão Cancelar, cancela a edição e outra vez clicando faz a saída do módulo de "Modificar". Acho que poderia mudar a descrição do mesmo botão e ainda manter a dupla função do mesmo botão. O único inconveniente que acho, que já existe o botão Salvar (que começar com a letra "S", que serve também para hotkey) e Sair coincide na mesma letra. Alguma sugestão ? Talvez ao invés de "Sair" colocar como "Retornar", mas fica meio ambíguo o seu significado (o usuário poderá entender em retornar valores)...

STRU - Lista e modifica a estrutura dos arquivos dbfs

Enviado: 27 Ago 2012 15:43
por Jairo Maia
Olá Pablo,

Entendi. O botão cancelar realmente volta. Mas veja você que eu não tinha notado, pois achava que mesmo depois de salvar se eu clicasse CANCELAR seria cancelado as alterações.

Hoje está assim:
1 - Se não há campo selecionado, apenas o botão Cancelar fica disponível
2 - Ao selecionar um campo, o botão Salvar passa a ficar disponível também.

Não pode ser assim?:
1 - Adicionar um Campo Voltar (por exemplo, para fugir da coincidência do hotkey)
2 - Ele será o único disponível se nada estiver selecionado
3 - Ao selecionar um campo, o botão Voltar fica indisponível, e os botões Salvar e Cancelar ficam disponível
4 - Ao pressionar Salvar ou Cancelar, volta a situação anterior, ou seja, apenas o botão Voltar fica disponível, até ser selecionado outro campo, e repete o processo acima, até pressionar Voltar.

É uma idéia, espero ter ajudado.

STRU - Lista e modifica a estrutura dos arquivos dbfs

Enviado: 27 Ago 2012 16:38
por Pablo César
Atualmente o botão Salvar, só é habilitado, quando realmente acontece alguma mudança. Se der um duplo click e sem alterar algo e clicar no salvar, ele vai verificar se houve mudança a ser processada. Se não houver retorna para o Grid. E se houver mudança de estrutura ao clicar em "Salvar", este aplica a mudança devida no dbf. Mas se clicar nos botões de Delete irá apagar os registros nos grid e só será efetivados ao clicar no botão Salvar. O botão "Processos" ao salvar o código, também irá habilitar o botão salvar. Isso, na minha opinião está funcionando adequadamente. Talvez coloque no caption do botão "Sair e deixarei o ultimo "r" como hot key (isso realmente, não faz muita diferença).

Na verdade quero evitar de colocar botões para não ter que fazer muitas alterações de layout e deixar o mais enxuto possível. O que me arrependo é ter disponibilizado dois botões ao invés de um. Os botões "Inserir" e "Adicionar", basicamente cumprem quase a mesma função, ao contrário do botão adicionar q(que adiciona no final dos registros do grid) o botão inserir insere o registro no lugar abaixo onde o cursor estiver posicionado no grid. No entanto, tudo isso parece ser desnecessário na presença dos botões que alteram a sequência dos campos. Mas como isso foi adicionado mais tarde, acabei deixando.

Agora o que o outro fórum está solicitando é a tradução do aplicativo. Mas ainda quero acondicionar a questão dos tamanhos com os decimais e o alerta para usuário caso haja perda de dados quando o tamanho do campo ficar menor.

STRU - Lista e modifica a estrutura dos arquivos dbfs

Enviado: 30 Ago 2012 15:12
por Pablo César
Finalmente, a versão em Inglês! Lançamento da versão 3.5.
Dois arquivos. LNG foram anexadas (Português e Inglês).
As traduções devem ser feito para a língua local, de acordo com o arquivo English.lng e deve seguir a sequência de linha a alinha.
Quem deseje colaborar anexando o arquivo do idioma local já traduzido, será bem vindo pela gentileza.

STRU - Lista e modifica a estrutura dos arquivos dbfs

Enviado: 30 Ago 2012 16:09
por esgici
Ola Pablo
Pablo Cesar escreveu:Finalmente, a versão em Inglês! Lançamento da versão 3.5.
Dois arquivos. LNG foram anexadas (Português e Inglês).
As traduções devem ser feito para a língua local, de acordo com o arquivo English.lng e deve seguir a sequência de linha a alinha.
Quem deseje colaborar anexando o arquivo do idioma local já traduzido, será bem vindo pela gentileza.
Google escreveu:Finally, the English version! Release of version 3.5.
Two files. LNG were attached (Portuguese and English).
The translations must be made ​​to the local language, according to the file English.lng and must follow the sequence of the line gear.
Those who wish to collaborate attaching the file already translated local language, will welcome the kindness.
Thanks a lot :)

The world become smaller day to day;

we too, must more international at least by language ;)

TIA

STRU - Lista e modifica a estrutura dos arquivos dbfs

Enviado: 30 Ago 2012 16:21
por Pablo César
You are very good wellcome my friend Esgici ! You help me much in this APP And I hope it be usefull for you and others.

My Best regards !

STRU - Lista e modifica a estrutura dos arquivos dbfs

Enviado: 30 Ago 2012 16:49
por Pablo César
Faltou uma pequena implementação mas grande no seu sentido.

Minha menção de "Meus agradecimentos a:" + Amigos_Contribuidores() no item do StatusBar do Leia-me.

Obrigado a todos, pelas dicas.

STRU - Lista e modifica a estrutura dos arquivos dbfs

Enviado: 30 Ago 2012 23:09
por Pablo César
Existia uns bugs por eu ter alterado algumas funções com caixa alta começando com HB_ para Hb_ e um erro na hora de impressão.

STRU - Lista e modifica a estrutura dos arquivos dbfs

Enviado: 03 Set 2012 11:01
por Jairo Maia
Olá Pablo,

As alterações dos botões que você fez tornou o utilitário bem mais intuitivo. Valeu.

Uma sugestão para você analizar caso ache interessante para a próxima versão quanto aos limites dos campos numéricos (não sei se é a melhor forma, mas funciona):

Na função Stru_Salva(), abaixo da linha: Coluna5 := If( Coluna3=="N", Str(Modi_Stru.Spinner_2.Value,5), "" ), colquei o seguinte:

Código: Selecionar todos

If Coluna3 == "N"
 If ! ValCpNumeric( Val(Coluna4), Val(Coluna5) )
  Volta_Grid()
  Return Nil
 Endif
Endif
Função ValCpNumeric():

Código: Selecionar todos

Function ValCpNumeric( nValor1, nValor2 )

 Local lReturn := .t.

 // Até que as mensagens sejam definidas no arquivo .Lng
 Local cMsg, cTit := "ERRO no Campo Númerico!"

 If nValor2 > 0

  If ( nValor1 <= ( nValor2 + 1 ) )

   // MsgStop( aLng[xxx], aLng[xxx] )
   cMsg := "O tamanho do Campo deve ser no mínimo 2 dígitos maior que o DECIMAL"
   cMsg += CRLF + "Exemplo: Tamanho = 5 e Decimal = 2 => Resulta: 99.99"
   MsgStop( cMsg, cTit )
   lReturn := .f.

  ElseIf ( nValor1 ) > 17

   // MsgStop( aLng[xxx], aLng[xxx] )
   cMsg := "O tamanho do Campo Numérico com casa Decimal não pode ser maior que 17"
   cMsg += CRLF + "Exemplo: ( INTEIRO + PONTO + DECIMAL ) <= 17"
   MsgStop( cMsg, cTit )
   lReturn := .f.

  Endi

 ElseIf nValor1 > 16

  // MsgStop( aLng[xxx], aLng[xxx] )
  cMsg := "O tamanho máximo do campo numérico sem casas decimais é de 16 dígitos"
  MsgStop( cMsg, cTit )
  lReturn := .f.

 Endif

Return ( lReturn )

STRU - Lista e modifica a estrutura dos arquivos dbfs

Enviado: 03 Set 2012 14:59
por Pablo César
Valeu Jairinho ! Espero que você goste da forma que implementei suas sugestões. Mais uma vez, obrigado.

Fiz algumas adaptações, ficam fácil quando vem mastigadinho como você nos apresentou. Ao invés de fazer a verificação após confirmação, adaptei para que funcionasse na hora que muda os Spinners pelo evento on change. Claro que as vezes apresentará falha dependendo a sequência e valores que irão ser testados. Mas gostei e agradeço muito. O seu nome foi incluso com os meus agradecimentos pelas contribuições que nos fez (veja em no statusbar: Leia-me).

STRU - Lista e modifica a estrutura dos arquivos dbfs

Enviado: 07 Set 2012 09:33
por Jairo Maia
Olá Pablo,

Ficou muito legal. Muito melhor alertar na hora do que quando tentar salvar.

Outra coisa, fiz vários testes, e não apresentou erro nenhum. Aliás, me pareceu tudo correto.

PS: Apenas uma coisa se me permite: A tradução das mensagens para o inglês não estão refletindo a idéia desejada. É apenas uma observação.

STRU - Lista e modifica a estrutura dos arquivos dbfs

Enviado: 07 Set 2012 23:50
por Pablo César
Apenas uma coisa se me permite: A tradução das mensagens para o inglês não estão refletindo a idéia desejada. É apenas uma observação.
Oi Jairo, sabe a forma de expressar as vezes em inglês difere. Em quais pontos você acha que não está de acordo com o português ?