Página 1 de 1

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

Enviado: 02 Jan 2021 14:59
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!

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

Enviado: 02 Jan 2021 15:29
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

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

Enviado: 02 Jan 2021 17:54
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)!

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

Enviado: 02 Jan 2021 22:32
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í?

LISTAR NOME DE CAMPOS DURANTE EXECUÇÃO RUNTIME

Enviado: 03 Jan 2021 02:55
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()

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

Enviado: 03 Jan 2021 13:05
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.

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

Enviado: 03 Jan 2021 22:22
por alxsts
Olá!

Me perdoem. Eu não percebi a mudança no título do post. Valeu @Jairo.

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

Enviado: 03 Jan 2021 22:40
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.

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

Enviado: 04 Jan 2021 14:20
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?

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

Enviado: 04 Jan 2021 16:18
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.

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

Enviado: 04 Jan 2021 17:07
por microvolution
JoséQuintas escreveu:Mas isso fica pra outro post.
... aguardando...