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: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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, 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/
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: 779
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 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
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: 3092
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: 566
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: 3092
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: 566
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