Clipper On Line • Ver Tópico - Tbrowse com ADO: identificação do campo

Tbrowse com ADO: identificação do campo

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

Moderador: Moderadores

 

Tbrowse com ADO: identificação do campo

Mensagempor cjp » 14 Set 2020 00:20

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
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1531
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Tbrowse com ADO: identificação do campo

Mensagempor JoséQuintas » 14 Set 2020 09:57

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, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Tbrowse com ADO: identificação do campo

Mensagempor cjp » 14 Set 2020 12:11

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
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1531
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Tbrowse com ADO: identificação do campo

Mensagempor Fernando queiroz » 14 Set 2020 12:38

oBrowse1:aArray[oBrowse1:nCurrent,15]
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 737
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 12 vezes
Mens.Curtidas: 58 vezes

Tbrowse com ADO: identificação do campo

Mensagempor Claudio Soto » 14 Set 2020 13:56

Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar de usuário

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes

Tbrowse com ADO: identificação do campo

Mensagempor alxsts » 14 Set 2020 19:32

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:
// 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)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Tbrowse com ADO: identificação do campo

Mensagempor Claudio Soto » 14 Set 2020 22:22

alxsts escreveu:Isto é HwGUI.
Claudio Soto escreveu:
oBrowse:colPos

No, es hb.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar de usuário

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes

Tbrowse com ADO: identificação do campo

Mensagempor alxsts » 14 Set 2020 23:06

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)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Tbrowse com ADO: identificação do campo

Mensagempor Claudio Soto » 15 Set 2020 00:46

Perdón yo entendí mal entonces!
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar de usuário

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes

Tbrowse com ADO: identificação do campo

Mensagempor cjp » 15 Set 2020 01:21

Consegui com o ColPos(). Obrigado.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1531
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google [Bot] e 5 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro