Página 1 de 1
buscar nomes dos campos de uma tabela dinamicamente
Enviado: 14 Out 2019 14:54
por elaineosm
boa tarde!
Alguem sabe informar se existe alguma função do harbour para buscar o nome dos campos de um arquivo dbf para que eu possa armazenar em um vetor estes nomes com seus respectivos valores?
desde já agradeço.
buscar nomes dos campos de uma tabela dinamicamente
Enviado: 14 Out 2019 15:45
por Jairo Maia
Não sei se entendi direito, mas se a ideia for pegar os campos e valores de um determinado registro do DBF, após posicionar no registro faça:
Código: Selecionar todos
aVetor := {}
For x=1 To FCount()
cNomeCampo := Field( x )
nValorCampo := &cNomeCampo.
AaDd( aVetor, { cNomeCampo, nValorCampo } )
Next
buscar nomes dos campos de uma tabela dinamicamente
Enviado: 14 Out 2019 15:55
por elaineosm
Olá,
Na verdade eu precisaria pegar todos os nomes e valores dos campos. Teria como fazer isto ? Eu poderia posicionar em campo por campo sem informar manualmente?
obg
buscar nomes dos campos de uma tabela dinamicamente
Enviado: 14 Out 2019 16:41
por elaineosm
deu certo amigo.
mt obg!
buscar nomes dos campos de uma tabela dinamicamente
Enviado: 14 Out 2019 16:53
por JoséQuintas
Pequeno ajuste na rotina pra não precisar de macro:
Código: Selecionar todos
aList := {}
FOR nCont = 1 TO FCount()
AAdd( aList, { FieldName( nCont ), FIeldGet( nCont ) } )
NEXT
buscar nomes dos campos de uma tabela dinamicamente
Enviado: 15 Out 2019 14:26
por Jairo Maia
JoséQuintas escreveu:Pequeno ajuste na rotina pra não precisar de macro
Obviamente mesmo nos tempos atuais, se preocupar com velocidade da aplicação é uma preocupação que sempre deve existir.
Porém, substituir macros por Funções, DISCORDO!!!
Salvo se você me apresentar elementos técnicos para isso, e se sim, sem dúvida, dou a mão à palmatória.
PS: Macros, são resolvidas em primeira instância (LOCALMENTE), enquanto uso de funções necessitam "varredura" para encontrar e receber o retorno delas.
buscar nomes dos campos de uma tabela dinamicamente
Enviado: 15 Out 2019 15:59
por JoséQuintas
Jairo Maia escreveu:Porém, substituir macros por Funções, DISCORDO!!!
Salvo se você me apresentar elementos técnicos para isso, e se sim, sem dúvida, dou a mão à palmatória.
Em nenhuma outra linguagem existe macro, porque será?
Variáveis pra macro necessitam declaração especial, geralmente PRIVATE ou PUBLIC.
Conteúdo de macro não pode ser validado em tempo de compilação.
Macro tem conteúdo desconhecido.
É melhor trabalhar com conteúdo desconhecido, ou com conteúdo conhecido?
E dependendo do processo, pode mudar de horas pra segundos, mesmo nas máquinas atuais.
buscar nomes dos campos de uma tabela dinamicamente
Enviado: 16 Out 2019 09:51
por Jairo Maia
Olá José,
JoséQuintas escreveu:Em nenhuma outra linguagem existe macro, porque será?
Variáveis pra macro necessitam declaração especial, geralmente PRIVATE ou PUBLIC.
Conteúdo de macro não pode ser validado em tempo de compilação.
Isso não deprecia tecnicamente em nada o uso de macro substituição.
JoséQuintas escreveu:Macro tem conteúdo desconhecido.
É melhor trabalhar com conteúdo desconhecido, ou com conteúdo conhecido?
Macro tem conteúdo variável, não desconhecido.
JoséQuintas escreveu:E dependendo do processo, pode mudar de horas pra segundos, mesmo nas máquinas atuais.
De horas prá segundos? Nunca vi isso, e sempre usei e ainda uso macros. Essa questão é a que sempre dizem, mas ainda não me deparei com isso. Acho que depende muito onde aplicar o uso de macros.
Li uma vez e não me lembro onde, mas me pareceu correto: "A velocidade do uso de macros é idêntica a velocidade de declaração de variável, ela nada mais faz que atribuir um novo valor a uma variável". Sei lá...
buscar nomes dos campos de uma tabela dinamicamente
Enviado: 16 Out 2019 10:47
por Ranier
Jairo Maia escreveu:Li uma vez e não me lembro onde, mas me pareceu correto: "A velocidade do uso de macros é idêntica a velocidade de declaração de variável, ela nada mais faz que atribuir um novo valor a uma variável". Sei lá...
Macros têm que ativar um analisador léxico, compilar a macro, verificar erros e trazer o resultado.
Função, FieldName, por exemplo, é compilada nativamente, para ser usada, precisa uma pesquisa e uma CALL, somente.
Façam as contas...
buscar nomes dos campos de uma tabela dinamicamente
Enviado: 16 Out 2019 11:05
por JoséQuintas
Jairo Maia escreveu:Li uma vez e não me lembro onde, mas me pareceu correto: "A velocidade do uso de macros é idêntica a velocidade de declaração de variável, ela nada mais faz que atribuir um novo valor a uma variável". Sei lá...
Usar uma vez é uma coisa.
Pegue um arquivo grande.
Código: Selecionar todos
USE arquivo
? "macro inicio:" + Time()
DO WHILE ! Eof()
FOR nCont = 1 TO FCount()
cCampo := FieldName(nCont)
xValor := &cCampo
NEXT
SKIP
ENDDO
? "macro fim:" + Time()
? "função inicio:" + Time()
GOTO TOP
DO WHILE ! Eof()
FOR nCont = 1 TO FCount()
cCampo := FieldName(nCont)
xValor := FieldGet( nCont )
NEXT
SKIP
ENDDO
? "função final:" + Time()
Por exemplo, um arquivo com valores de entradas e saídas, aonde pode fazer cálculos usando várias vezes a macro, pode ser pior.
Ou um plano de contas contábil, com entradas/saídas para cada mês do ano: entrada01 a 12, saida01 a 12, seriam 24 vezes usando macro, no mínimo, a diferença vai aumentando conforme a quantidade de vezes que usa.
Num caso isolado, não se percebe diferença, mas num uso mais pesado a diferença é grande.
Talvez esteja pensando só no uso individual, de uma rotina simples, e não numa rotina que faz uso intensivo de macro.
buscar nomes dos campos de uma tabela dinamicamente
Enviado: 16 Out 2019 12:19
por Jairo Maia
JoséQuintas escreveu:Talvez esteja pensando só no uso individual, de uma rotina simples, e não numa rotina que faz uso intensivo de macro.
Sim. Troquei Time() por DateTime() e testei sua função usando um DBF com 19 campos por registro, e com 51.526 registros:
Código: Selecionar todos
macro inicio: 10/16/19 12:03:47.490
macro fim: 10/16/19 12:03:50.360
função inicio: 10/16/19 12:03:50.360
função final: 10/16/19 12:03:52.108
Conclusão: Com macro deu quase 3 segundos, sem a macro deu quase 2 segundos. Tem que ter cuidado mesmo onde e quando usar macro.
buscar nomes dos campos de uma tabela dinamicamente
Enviado: 17 Out 2019 09:12
por JoséQuintas
Jairo Maia escreveu:Com macro deu quase 3 segundos, sem a macro deu quase 2 segundos. Tem que ter cuidado mesmo onde e quando usar macro.
Depende o ponto de vista.
Nesse caso 1 segundo representa 50% mais demorado.
E num uso simples.