HMG - LISTAR NOME DE CAMPOS DURANTE EXECUÇÃO RUNTIME

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

HMG - LISTAR NOME DE CAMPOS DURANTE EXECUÇÃO RUNTIME

Mensagem por microvolution »

Boa tarde!
Tô aqui com uma dúvida.
Estou fazendo uma função genérica para pegar o conteúdo de um certo DBF/NTX e preencher uma ou várias matrizes com o conteúdo completo do DBF, tais como:

NOME_CAMPO
TIPO (N/C/D)
CONTEÚDO

Então pensei um do while .not. eof()
Dentro do WHILE pretendo usar um FOR/NEXT len NOME_CAMPO pra preencher o que precisamos.

Mas, estou com dúvida em quais funções internas da linguagem uso pra saber as informações acima.

Se alguém souber, agradecido ficarei!

Feliz 2021!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

HMG - LISTAR NOME DE CAMPOS DURANTE EXECUÇÃO RUNTIME

Mensagem por alxsts »

Olá!

Código: Selecionar todos

LOCAL i, nFCount

   USE .... // abrir arquivo
   DbGoTop ()

   nFCount := FCount ()

   WHILE!   Eof ()
      For i := 1 To nFCount
         ? FName (i) // nome do campo
        ? Valtype ( FieldGet (i) ) // tipo
         ?  Transform (FieldGet (i), "" ) // conteúdo 
      Next
      DbSkip ()
   Enddo

   DbCloseArea ()

   RETURN
[]´s
Alexandre Santos (AlxSts)
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

HMG - LISTAR NOME DE CAMPOS DURANTE EXECUÇÃO RUNTIME

Mensagem por microvolution »

alxsts escreveu:nFCount := FCount ()
tinha pensado em algo como DBSTRUCT()... aí não lembrava de jeito nenhum do FCOUNT()
vou testar e darei o retorno a todos(as)!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

HMG - LISTAR NOME DE CAMPOS DURANTE EXECUÇÃO RUNTIME

Mensagem por microvolution »

microvolution escreveu:vou testar e darei o retorno a todos(as)!
fiz assim:

Código: Selecionar todos

   WHILE!   Eof ()
      For i := 1 To nFCount
         add item {FieldName(i),Transform (FieldGet (i),"")} to grid_pesquisa of form_pesquisa
      Next
      DbSkip ()
   Enddo
Só que quero exportar isso para uma grid e simular um tbrowse... só que gera n_erros...
Quero que os cabeçalhos contenham o nome do campo e nas linhas abaixo os conteúdos em formato de planilha

Talvez se os moderadores mudassem este tópico para a MINIGUI facilitaria pra outros...
do jeito que está acima, tá muito estranho, parece que só vejo 2 colunas que são os campos do DBF. Mas, se o DBF tiver 3 campos, e aí?
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

LISTAR NOME DE CAMPOS DURANTE EXECUÇÃO RUNTIME

Mensagem por alxsts »

Olá!
microvolution escreveu:Talvez se os moderadores mudassem este tópico para a MINIGUI facilitaria pra outros...
mas já está ... você colocou HMG.

Não mexo com MinGUI mas o fórum tem vários exemplos. Isto sem falar na pasta de exemplos da MiniGUI, que eu sei que existe. É só procurar...

O código abaixo está neste tópico

Código: Selecionar todos

      DEFINE GRID Grid_1
         PARENT Form_Main
         ROW 140
         COL 405
         WIDTH  360
         HEIGHT 200
         HEADERS {"Cod","Descricao","Cobrar S/N","Valor"}
         COLUMNCONTROLS { {'TEXTBOX','NUMERIC','9'},{'TEXTBOX','CHARACTER','AAAAAAAAAAAAAAAAAAAA'},{'TEXTBOX','CHARACTER','A'},{'TEXTBOX','NUMERIC','9.99'} }
         WIDTHS {40,200,80,55}
      ITEMS aRows  // se optar por usar ITEMS não pode usar ROWSOURCE e COLUMNFIELDS
         // ROWSOURCE "DCI10035" // abre os campos da tabela DBF dentro do GRID automaticamente  // campos da tabela DBF - se usar este tem q usar em conjunto o COLUMNFIELDS e não pode usar ITEMS aROWS
         // COLUMNFIELDS { "DCI10035->DESCRICAO", "DCI10035->SIMNAO", "DCI10035->VALOR" } // campos da tabela DBF - se usar este tem q usar em conjunto o ROWSORCE e não pode usar ITEMS aROWS
         CELLNAVIGATION .T.
         DYNAMICFORECOLOR { fColor , fColor, fColor, fColor, fColor } // muda as cores de frente dinamicamente uma linha após a a outra
      DYNAMICBACKCOLOR { bColor , bColor , bColor , bColor , bColor , bColor } // muda as cores de fundo dinamicamente uma linha após a aoutra 7/2/19w
         ALLOWEDIT .T. // se estiver em .T. não funciona o ONDBLCLICK e funciona o COLUMNWHEN
         // COLUMNVALID 1
         // NOLINES .T. // desaparece as linhas de grade em .T.
       JUSTIFY { BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT, BROWSE_JTFY_CENTER, BROWSE_JTFY_CENTER }   
         // COLUMNWHEN  { { || This.CellValue <> nil } , Nil , Nil , Nil } 
      COLUMNWHEN { { || .F. } ,  { || .F. } , { || .T. } ,  { || .T. }  } // trava/destrava colunas pra serem editadas. Mas, o ALLOWEDIT tem que estar em .T. pra funcionar
         // LOCKCOLUMNS 2
      // VALUE { 1 , 4 } 
         // ONDBLCLICK MOVE_GRID_ARQUIVO () // duplo click do mouse aciona esta função
         // ONCHANGE MOVE_GRID_ARQUIVO () // apenas um click do mouse aciona esta função
      // EDIT 
      // ALLOWAPPEND .T. // pra usar esse tem q usar o ROWSOURCE senão não funciona
      // ALLOWDELETE .T. // pra usar esse tem q usar o ROWSOURCE senão não funciona
         ONSAVE OnSaveTest()
      END GRID
No teu caso, use ROWSOURCE com o nome da tua tabela. Em HEADERS coloque os nomes dos campos ou cabeçalhos que desejar. Em COLUMNFIELDS coloque o nome dos campos que deseja exibir. Analise as outras opções e ajuste conforme sua necessidade.

Edit:
Respondendo ao que pede o título do post, use o código abaixo:

Código: Selecionar todos

FUNCTION GetFieldNames()

   LOCAL aFieldNames := {}, nFieldCount, nPos
 
   USE SuaTabela SHARED NEW
   
   nFieldCount := FCount()
   
   For nPos := 1 To nFieldCount
      AAdd( aFieldNames, FieldName( nPos ) )       
   Next

 RETURN aFieldNames
Esta função pode ser usada em HEADERS na definição do grid

Código: Selecionar todos

HEADERS GetFieldNames()
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

HMG - LISTAR NOME DE CAMPOS DURANTE EXECUÇÃO RUNTIME

Mensagem por Jairo Maia »

Olá Alexandre,
alxsts escreveu:mas já está ... você colocou HMG.
Alexandre, agora está porque ele pediu para mudar para MiniGui. Foi trocado DBF do título por HMG para deixar claro a todos que ele está usando HMG. HMG usa MiniGui.
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)
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

HMG - LISTAR NOME DE CAMPOS DURANTE EXECUÇÃO RUNTIME

Mensagem por alxsts »

Olá!

Me perdoem. Eu não percebi a mudança no título do post. Valeu @Jairo.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

HMG - LISTAR NOME DE CAMPOS DURANTE EXECUÇÃO RUNTIME

Mensagem por JoséQuintas »

É que as LIBs causam confusão até nisso...

HMG é a MINIGUI original
HMG Extended, chamam de MINIGUI ou HMG
OOHG, chamam de OOHG, ou HMG orientada a objeto, ou minigui orientada a objeto

As três podem ser consideradas minigui ou hmg, e isso causa confusão.
Até a sintaxe.... pode ser a mesma, mas com menos ou mais opções.
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/
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

HMG - LISTAR NOME DE CAMPOS DURANTE EXECUÇÃO RUNTIME

Mensagem por microvolution »

JoséQuintas escreveu:OOHG, chamam de OOHG, ou HMG orientada a objeto, ou minigui orientada a objeto
mas afinal, qual diferença de ser OOP?
pois todas as 3 não são OOP?
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

HMG - LISTAR NOME DE CAMPOS DURANTE EXECUÇÃO RUNTIME

Mensagem por JoséQuintas »

microvolution escreveu:pois todas as 3 não são OOP?
Não, mas simulam isso.
Mas isso fica pra outro post.
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/
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

HMG - LISTAR NOME DE CAMPOS DURANTE EXECUÇÃO RUNTIME

Mensagem por microvolution »

JoséQuintas escreveu:Mas isso fica pra outro post.
... aguardando...
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Responder