buscar nomes dos campos de uma tabela dinamicamente
Moderador: Moderadores
buscar nomes dos campos de uma tabela dinamicamente
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.
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.
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
buscar nomes dos campos de uma tabela dinamicamente
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 } )
NextAbraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
buscar nomes dos campos de uma tabela dinamicamente
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
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
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
buscar nomes dos campos de uma tabela dinamicamente
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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
buscar nomes dos campos de uma tabela dinamicamente
Obviamente mesmo nos tempos atuais, se preocupar com velocidade da aplicação é uma preocupação que sempre deve existir.JoséQuintas escreveu:Pequeno ajuste na rotina pra não precisar de macro
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.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
buscar nomes dos campos de uma tabela dinamicamente
Em nenhuma outra linguagem existe macro, porque será?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.
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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
buscar nomes dos campos de uma tabela dinamicamente
Olá José,
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á...
Isso não deprecia tecnicamente em nada o uso de macro substituição.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.
Macro tem conteúdo variável, não desconhecido.JoséQuintas escreveu:Macro tem conteúdo desconhecido.
É melhor trabalhar com conteúdo desconhecido, ou com conteúdo conhecido?
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.JoséQuintas escreveu:E dependendo do processo, pode mudar de horas pra segundos, mesmo nas máquinas atuais.
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á...
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
buscar nomes dos campos de uma tabela dinamicamente
Macros têm que ativar um analisador léxico, compilar a macro, verificar erros e trazer o resultado.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á...
Função, FieldName, por exemplo, é compilada nativamente, para ser usada, precisa uma pesquisa e uma CALL, somente.
Façam as contas...
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
buscar nomes dos campos de uma tabela dinamicamente
Usar uma vez é uma coisa.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á...
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()
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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
buscar nomes dos campos de uma tabela dinamicamente
Sim. Troquei Time() por DateTime() e testei sua função usando um DBF com 19 campos por registro, e com 51.526 registros: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.
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.108Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
buscar nomes dos campos de uma tabela dinamicamente
Depende o ponto de vista.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.
Nesse caso 1 segundo representa 50% mais demorado.
E num uso simples.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/

