Tbrowse com ADO: identificação do campo

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Tbrowse com ADO: identificação do campo

Mensagem por cjp »

Pessoal, alguém poderia me ajudar com uma coisa que imagino que seja simples no Tbrowse, mas estou apenas iniciando em Tbrowse:
Só preciso identificar o campo sobre o qual o usuário vai dar Enter num tbrowse. No dbedit(), eu faço isso usando modo/coluna.
Como fazer isso no tbrowse?
Inacio de Carvalho Neto
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20416
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

Tbrowse com ADO: identificação do campo

Mensagem por JoséQuintas »

cjp escreveu:Como fazer isso no tbrowse?
O tbrowse está sempre posicionado.

Em DBF, é só pegar o campo, exemplo cliente->nome
Em Array, idem, através de um contador, exemplo elemento[ nIndex ]
Em ADO, não é diferente, exemplo rs:Fields( "NOME" ):Value
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Tbrowse com ADO: identificação do campo

Mensagem por cjp »

Acho que não fui claro na pergunta, ou não entendi tua resposta.
Veja o seguinte: estou editando no tbrowse uma tabela com apenas um registro, mas com vários campos: A, B, C, D etc.
Então, o usuário irá se movimentar apenas com as setas pra direita e pra esquerda, e teclar Enter sobre algum campo.
Eu preciso saber sobre qual campo ele teclou Enter, entende?
A questão não é sobre qual registro, mas sim sobre qual campo.
Inacio de Carvalho Neto
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 783
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Tbrowse com ADO: identificação do campo

Mensagem por Fernando queiroz »

oBrowse1:aArray[oBrowse1:nCurrent,15]
HARBOUR 3.2, HWGUI 2.23 B7, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart, Python + FASTAPI , Android Kotlin
Claudio Soto
Colaborador
Colaborador
Mensagens: 568
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Tbrowse com ADO: identificação do campo

Mensagem por Claudio Soto »

oBrowse:colPos

https://vivaclipper.wordpress.com/2014/ ... browsenew/
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
alxsts
Colaborador
Colaborador
Mensagens: 3109
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Tbrowse com ADO: identificação do campo

Mensagem por alxsts »

Olá!
Fernando queiroz escreveu:oBrowse1:aArray[oBrowse1:nCurrent,15]
Isto é HwGUI.
Claudio Soto escreveu:oBrowse:colPos
É a resposta correta para este caso.

Segue um exemplo Harbour:

Código: Selecionar todos

// The example demonstrates the steps required for creating a
// browse view for a two dimensional array. Note that the data
// source and row pointer of the data source are stored in
// oTBrowse:cargo. The pseudo instance variables :data and :recno
// are translated by the preprocessor.

// Exemplo extraido e adaptado de "xHarbour Language Reference Guide" - Alexandre Santos

#include "box.ch"
#include "inkey.ch"
#include "setcurs.ch"
#include "tbrowse.ch"

#define DEF_CSEP " "+CHR(179)+" "             // define o caracter da coluna
#define FOOT_SEP CHR(196)+CHR(193)+CHR(196)   // define o caracter do horizontal
#define HEAD_SEP CHR(196)+CHR(194)+CHR(196)   // define o caracter do horizontal

#xtrans  :data   =>   :cargo\[1]
#xtrans  :recno  =>   :cargo\[2]

REQUEST HB_CODEPAGE_PTISO
REQUEST HB_LANG_PT

PROCEDURE Main

   LOCAL i, nKey, bBlock, oTBrowse, oTBColumn
   LOCAL aHeading := { "File Name", ;
                       "File Size", ;
                       "File Date", ;
                       "File Time", ;
                       "File Attr"  }
   LOCAL aWidth := { 20, 10, 9, 9, 9 }, cSep := Chr(10), nCursor := SetCursor( SC_NONE )
   
   HB_CDPSELECT( 'PTISO' )
   HB_LANGSELECT( 'PT' )
   
   // Create TBrowse object
   oTBrowse := TBrowse():new( 3, 2, MaxRow()-2, MaxCol()-2 )

   // data source is the Directory() array
   oTBrowse:cargo      := { Directory( "*.*" ), 1 }

   oTBrowse:border     := B_SINGLE
   oTBrowse:headSep    := HEAD_SEP
   oTBrowse:colSep     := DEF_CSEP
   oTBrowse:footSep    := FOOT_SEP
   oTBrowse:colorSpec  := "N/W,W+/N"
   
   // Navigation code blocks for array
   oTBrowse:goTopBlock    := {|| oTBrowse:recno := 1 }
   oTBrowse:goBottomBlock := {|| oTBrowse:recno := Len( oTBrowse:data ) }
   oTBrowse:skipBlock     := {|nSkip| ArraySkipper( nSkip, oTBrowse ) }
   
   // create TBColumn objects and add them to TBrowse object
   FOR i:=1 TO Len( aHeading )
      // code block for individual columns of the array
      bBlock    := ArrayBlock( oTBrowse, i )
      oTBColumn := TBColumn():new( aHeading[i], bBlock )
      oTBColumn:width := aWidth[i]
      oTBrowse:addColumn( oTBColumn )
   NEXT
   
   CLS
   DispOutAt( 1, 1, PadR( " PATH " + hb_CurDrive() + ":\" + Curdir() + "\", MaxCol()-2 ), "N/W" )
   DispOutAt( MaxRow(), 1, PadC( " Pressione [ENTER] para informações ou [ESC] para finalizar", MaxCol()-2 ), "N/W" )
   
   // display browser and process user input
   DO WHILE .T.
      oTBrowse:forceStable()
   
      nKey := Inkey(0)
   
      IF oTBrowse:applyKey( nKey ) == TBR_EXIT
         If hb_Alert( "Fechar?", { " Sim ", " Não " }, "W+/N" ) == 1
            EXIT
         Endif
      ENDIF
   
      DO CASE
         CASE nKey == K_ENTER
              hb_Alert( "Linha atual na janela  : " + Transform( oTBrowse:rowPos(), "@ 99999" ) + cSep + ;
                        "Coluna atual na janela : " + Transform( oTBrowse:colPos(), "@ 99999" ) + cSep + ;
                        "Valor atual : "            + Transform( Eval( oTBrowse:getColumn( oTBrowse:colPos() ):block ), "@X" )  + cSep + ;
                        "Linha atual no ARRAY : "   + Transform( oTBrowse:recno, "@ 99999" ),, "W+/B" ;
                      )
      ENDCASE
   ENDDO

   SetCursor( nCursor )
   
RETURN

// This code block uses detached LOCAL variables to
// access single elements of a two-dimensional array.
FUNCTION ArrayBlock( oTBrowse, nSubScript )
RETURN {|| oTBrowse:data[ oTBrowse:recno, nSubScript ] }

// This function navigates the row pointer of the
// the data source (array)
FUNCTION ArraySkipper( nSkipRequest, oTBrowse )
   LOCAL nSkipped
   LOCAL nLastRec := Len( oTBrowse:data ) // Length of array

   IF oTBrowse:recno + nSkipRequest < 1
      // skip requested that navigates past first array element
      nSkipped := 1 - oTBrowse:recno
   ELSEIF oTBrowse:recno + nSkipRequest > nLastRec
      // skip requested that navigates past last array element
      nSkipped := nLastRec - oTBrowse:recno
   ELSE
      // skip requested that navigates within array
      nSkipped := nSkipRequest
   ENDIF
   // adjust row pointer
   oTBrowse:recno += nSkipped
// tell TBrowse how many rows are actually skipped.
RETURN nSkipped
A respeito do método rowPos(), mostrado no exemplo, vale destacar que este método retorna a posição da linha corrente em relação ao início da janela e não da fonte de dados.
Anexos
Capturar.PNG
[]´s
Alexandre Santos (AlxSts)
Claudio Soto
Colaborador
Colaborador
Mensagens: 568
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Tbrowse com ADO: identificação do campo

Mensagem por Claudio Soto »

alxsts escreveu:Isto é HwGUI.
Claudio Soto escreveu:
oBrowse:colPos
No, es hb.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
alxsts
Colaborador
Colaborador
Mensagens: 3109
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Tbrowse com ADO: identificação do campo

Mensagem por alxsts »

Olá!

A disposição do texto, em meio aos quotes, realmente ficou confusa. Mas o que escrevi está correto:
Fernando queiroz escreveu:oBrowse1:aArray[oBrowse1:nCurrent,15] ===> Isto é HwGUI
Claudio Soto escreveu:oBrowse:colPos ===> É a resposta correta para este caso.
Creio que agora está claro. Gracias Claudio.
[]´s
Alexandre Santos (AlxSts)
Claudio Soto
Colaborador
Colaborador
Mensagens: 568
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Tbrowse com ADO: identificação do campo

Mensagem por Claudio Soto »

Perdón yo entendí mal entonces!
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Tbrowse com ADO: identificação do campo

Mensagem por cjp »

Consegui com o ColPos(). Obrigado.
Inacio de Carvalho Neto
Responder