08 Set 2020 22:48
O que elas tem de diferente?
consado("SELECT nrtarefa,assunto,prioridade,data,hora,tarefa FROM tarefas WHERE prioridade>0 AND soluc='N' AND (exibe='N' OR exibe='I') AND (now())>=hrexibe AND vinculo<>'MP' AND data>='"+dtsql(dtapart)+"' GROUP BY nrtarefa ORDER BY prioridade DESC,data,nrtarefa")
consado("select * from compras where codprod>0")
Chamadas por SET KEY, ou num prompt, ou misturadas com tbrowse?
Lembro daquele fonte que precisou ajuda, onde misturava o tbrowse com rotina de menu.
Algo como MeuBrowse( linha, coluna, linha, coluna, { || FuncaoDeUsuario() } )
function ADObrowse(sql)
#include "tbrowse.ch"
LOCAL oColumn, I, nLen, oTBrowse, oRs, nFieldLen
local nKey :=99999 //precisa ser private para o respsql
private conexao
@ 22,25 say "Abrindo consulta..."
do while .t.
if !AdoConecta(nProvAtiv,5)
?"Não conseguiu conectar; tente novamente mais tarde"
inkey(5)
return .f.
else
oRS := Conexao:Execute( sql )
endif
if oRS:Eof()
@ 22,25 say "Não há nenhum item "
inkey(11)
inkey(11)
return .f.
endif
cls
oTBrowse := TBrowseDB():new( 03, 3, MaxRow() - 5, 30 )
oTBrowse:goTopBlock := { || oRs:moveFirst() }
oTBrowse:goBottomBlock := { || oRs:moveLast() }
oTBrowse:skipBlock := { | n | ADORecordSetSkipper( oRs, n ) }
oTBrowse:HeadSep := Chr(196)
oTBrowse:ColSep := Chr(179)
oTBrowse:FootSep := ""
nLen := oRs:fields():count() - 1
FOR i := 0 TO nLen
oColumn := TBColumnNew( oRs:fields(i):name(), ADORecordSetFieldBlock( oRs, i ) )
nFieldLen := 13
oColumn:Width := Max( nFieldLen, Len( oRs:fields(i):name ) )
oTBrowse:addColumn( oColumn )
NEXT
do while .t.
oTBrowse:forceStable()
oTBrowse:refreshCurrent()
nKey := Inkey(0)
set cursor on
if nkey ==13 .and. procname(2)="CONSATIV" .and. ophrtar=5
ac1=oRs:Fields("acao"):Value
exit
endif
IF oTBrowse:applyKey( nKey ) == TBR_EXIT
EXIT
ENDIF
enddo
exit
ENDDO
oRs:Close()
Conexao:Close()
return .t.
08 Set 2020 23:39
08 Set 2020 23:55
oTBrowse := TBrowseDB():new( 03, 3, MaxRow() - 5, 30 )
oTBrowse:goTopBlock := { || oRs:moveFirst() }
oTBrowse:goBottomBlock := { || oRs:moveLast() }
oTBrowse:skipBlock := { | n | ADORecordSetSkipper( oRs, n ) }
oTBrowse:HeadSep := Chr(196)
oTBrowse:ColSep := Chr(179)
oTBrowse:FootSep := ""
nFieldCount := oRs:Fields():Count()
FOR nCont := 0 TO nFieldCount - 1
oColumn := TBColumnNew( oRs:Fields( nCont ):name(), ADORecordSetFieldBlock( oRs, nCont ) )
nFieldLen := 13
oColumn:Width := Max( nFieldLen, Len( oRs:Fields( nCont ):name ) )
oTBrowse:addColumn( oColumn )
NEXT
DO WHILE .T.
oTBrowse:forceStable()
oTBrowse:refreshCurrent()
nKey := Inkey(0)
IF oTBrowse:applyKey( nKey ) == TBR_EXIT
EXIT
ENDIF
ENDDO
08 Set 2020 23:58
FUNCTION BrowseADO( nTop, nLeft, nBottom, nRight, oRs )
oTBrowse := TBrowseDB():new( nTop, nLeft, nBottom, nRight )
oTBrowse:goTopBlock := { || oRs:moveFirst() }
oTBrowse:goBottomBlock := { || oRs:moveLast() }
oTBrowse:skipBlock := { | n | ADORecordSetSkipper( oRs, n ) }
oTBrowse:HeadSep := Chr(196)
oTBrowse:ColSep := Chr(179)
oTBrowse:FootSep := ""
nFieldCount := oRs:Fields():Count()
FOR nCont := 0 TO nFieldCount - 1
oColumn := TBColumnNew( oRs:Fields( nCont ):name(), ADORecordSetFieldBlock( oRs, nCont ) )
nFieldLen := 13
oColumn:Width := Max( nFieldLen, Len( oRs:Fields( nCont ):name ) )
oTBrowse:addColumn( oColumn )
NEXT
DO WHILE .T.
oTBrowse:forceStable()
oTBrowse:refreshCurrent()
nKey := Inkey(0)
IF oTBrowse:applyKey( nKey ) == TBR_EXIT
EXIT
ENDIF
ENDDO
RETURN NIL
09 Set 2020 00:00
FUNCTION BrowseADO( nTop, nLeft, nBottom, nRight, oRs, bFuncao )
oTBrowse := TBrowseDB():new( nTop, nLeft, nBottom, nRight )
oTBrowse:goTopBlock := { || oRs:moveFirst() }
oTBrowse:goBottomBlock := { || oRs:moveLast() }
oTBrowse:skipBlock := { | n | ADORecordSetSkipper( oRs, n ) }
oTBrowse:HeadSep := Chr(196)
oTBrowse:ColSep := Chr(179)
oTBrowse:FootSep := ""
nFieldCount := oRs:Fields():Count()
FOR nCont := 0 TO nFieldCount - 1
oColumn := TBColumnNew( oRs:Fields( nCont ):name(), ADORecordSetFieldBlock( oRs, nCont ) )
nFieldLen := 13
oColumn:Width := Max( nFieldLen, Len( oRs:Fields( nCont ):name ) )
oTBrowse:addColumn( oColumn )
NEXT
DO WHILE .T.
oTBrowse:forceStable()
oTBrowse:refreshCurrent()
nKey := Inkey(0)
IF bFuncao != NIL
Eval( bFuncao, oRs, oTBrowse )
ENDIF
IF oTBrowse:applyKey( nKey ) == TBR_EXIT
EXIT
ENDIF
ENDDO
RETURN NIL
09 Set 2020 00:03
FUNCTION BrowseADO( nTop, nLeft, nBottom, nRight, oRs, bFuncao )
IF oRs == NIL .OR. oRS:Eof()
@ 22,25 say "Não há nenhum item "
Inkey(11)
RETURN .F.
ENDIF
oTBrowse := TBrowseDB():new( nTop, nLeft, nBottom, nRight )
oTBrowse:goTopBlock := { || oRs:moveFirst() }
oTBrowse:goBottomBlock := { || oRs:moveLast() }
oTBrowse:skipBlock := { | n | ADORecordSetSkipper( oRs, n ) }
oTBrowse:HeadSep := Chr(196)
oTBrowse:ColSep := Chr(179)
oTBrowse:FootSep := ""
nFieldCount := oRs:Fields():Count()
FOR nCont := 0 TO nFieldCount - 1
oColumn := TBColumnNew( oRs:Fields( nCont ):name(), ADORecordSetFieldBlock( oRs, nCont ) )
nFieldLen := 13
oColumn:Width := Max( nFieldLen, Len( oRs:Fields( nCont ):name ) )
oTBrowse:addColumn( oColumn )
NEXT
DO WHILE .T.
oTBrowse:forceStable()
oTBrowse:refreshCurrent()
nKey := Inkey(0)
IF bFuncao != NIL
Eval( bFuncao, oRs, oTBrowse )
ENDIF
IF oTBrowse:applyKey( nKey ) == TBR_EXIT
EXIT
ENDIF
ENDDO
RETURN NIL
09 Set 2020 00:11
IF bFuncao != NIL
Eval( bFuncao, oRs, oTBrowse, @nkey )
ENDIF
#include "tbrowse.ch"
#include "inkey.ch"
FUNCTION BrowseADO( nTop, nLeft, nBottom, nRight, oRs, bFuncao )
LOCAL nKey, oTBrowse, nFieldCount, nCont, nFieldLen
IF oRs == NIL .OR. oRS:Eof()
@ 22,25 say "Não há nenhum item "
Inkey(11)
RETURN .F.
ENDIF
oTBrowse := TBrowseDB():new( nTop, nLeft, nBottom, nRight )
oTBrowse:goTopBlock := { || oRs:moveFirst() }
oTBrowse:goBottomBlock := { || oRs:moveLast() }
oTBrowse:skipBlock := { | n | ADORecordSetSkipper( oRs, n ) }
oTBrowse:HeadSep := Chr(196)
oTBrowse:ColSep := Chr(179)
oTBrowse:FootSep := ""
nFieldCount := oRs:Fields():Count()
FOR nCont := 0 TO nFieldCount - 1
oColumn := TBColumnNew( oRs:Fields( nCont ):name(), ADORecordSetFieldBlock( oRs, nCont ) )
nFieldLen := 13
oColumn:Width := Max( nFieldLen, Len( oRs:Fields( nCont ):name ) )
oTBrowse:addColumn( oColumn )
NEXT
DO WHILE .T.
oTBrowse:forceStable()
oTBrowse:refreshCurrent()
nKey := Inkey(0)
IF bFuncao != NIL
Eval( bFuncao, oRs, oTBrowse, @nkey )
ENDIF
IF oTBrowse:applyKey( nKey ) == TBR_EXIT
EXIT
ENDIF
ENDDO
RETURN NIL
09 Set 2020 00:18
#include "inkey.ch"
FUNCTION ADObrowse( SQL )
LOCAL oColumn, I, nLen, oTBrowse, oRs, nFieldLen
LOCAL nKey := 99999 //precisa ser private para o respsql
PRIVATE conexao
@ 22,25 SAY "Abrindo consulta..."
DO WHILE .T.
IF ! AdoConecta( nProvAtiv, 5 )
?"Não conseguiu conectar; tente novamente mais tarde"
Inkey(5)
RETURN .f.
ELSE
oRS := Conexao:Execute( sql )
ENDIF
CLS
BrowseADO( 3, 3, MaxRow() - 5, 30, oRs, { || RotinaDaqui() } )
EXIT
ENDDO
oRs:Close()
Conexao:Close()
RETURN .t.
STATIC FUNCTION RotinaDaqui( oRs, oTBrowse, nKey )
IF nkey == K_ENTER .AND. ProcName(2) = "CONSATIV" .AND. ophrtar == 5
ac1 = oRs:Fields( "acao" ):Value
nKey := K_ESC
ENDIF
RETURN NIL
09 Set 2020 00:28
FUNCTION ADObrowse( SQL )
LOCAL oColumn, I, nLen, oTBrowse, oRs, nFieldLen
LOCAL nKey := 99999 //precisa ser private para o respsql
PRIVATE conexao
@ 22,25 SAY "Abrindo consulta..."
IF ! ADOConecta( nProvAtiv, 5 )
? "Não conseguiu conectar; tente novamente mais tarde"
Inkey(5)
RETURN .f.
ENDIF
DO WHILE .T.
CLS
oRS := Conexao:Execute( sql )
BrowseADO( 3, 3, MaxRow() - 5, 30, oRs, { || RotinaDaqui() } )
oRs:Close()
EXIT
ENDDO
Conexao:Close()
RETURN .T.
09 Set 2020 00:56
FUNCTION BrowseADORC( nTop, nLeft, nBottom, nRight, cnSQL, oTBrowse, cFilterKey, bKeyboard, bUserFunction, nFixToCol, cAddFilter )
LOCAL nKey := 0, oBrowse, bAction, nMRow, nMCol, cTimeLimit
LOCAL cFilter := "", lAddFilter := .F.
hb_Default( @cAddFilter, "" )
IF ! Empty( cAddFilter )
lAddFilter := .T.
ADOFilter( cnSQL, cFilterkey, cFilter, cAddFilter )
ENDIF
oBrowse := TBrowseDb():New( nTop, nLeft, nBottom, nRight )
oBrowse:HeadSep := Chr(196)
oBrowse:ColSep := Chr(179)
oBrowse:FootSep := ""
oBrowse:FrameColor := "2/1"
oBrowse:HeaderColor := "7/8"
oBrowse:GoTopBlock := { || cnSQL:MoveFirst() }
oBrowse:GoBottomBlock := { || cnSQL:MoveLast() }
oBrowse:SkipBlock := { | n | cnSQLBrowseSkipper( cnSQL, n ) }
IF nFixToCol != NIL
oBrowse:freeze := nFixToCol
ENDIF
FUNCTION BrowseADO( cnSQL, oTBrowse, cFilterKey, bKeyboard, bUserFunction, nFixToCol, cAddFilter )
LOCAL nTop := 5, nLeft := 0, nBottom := MaxRow() - 3, nRight := MaxCol(), cColorAnt := SetColor()
LOCAL oFrm
hb_Default( @cAddFilter, "" )
IF cnSQL == NIL
MsgStop( "Não há informações para serem mostradas" )
RETURN NIL
ENDIF
SetColor( SetColorBox() )
IF Len( appForms() ) > 0
Atail( AppForms()):GuiHide()
ENDIF
oFrm := frmGuiClass():New()
oFrm:lNavigate := .F.
oFrm:cOptions := "C"
AAdd( oFrm:acMenuOptions, "<Ctrl-PgUp>Primeiro" )
AAdd( oFrm:acMenuOptions, "<PgUp>Pág.Ant" )
Aadd( oFrm:acMenuOptions, "<Up>Sobe" )
AAdd( oFrm:acMenuOptions, "<Down>Desce" )
AAdd( oFrm:acMenuOptions, "<PgDn>Pág.Seg" )
AAdd( oFrm:acMenuOptions, "<Ctrl-PgDn>Último" )
09 Set 2020 23:07
- Fica trocando de servidor dentro do aplicativo toda hora? ou trata-se de testar um servidor de cada vez?
- O comando SQL pode ser alterado? Durante o browse?
O que altera entre um browse e outro?
10 Set 2020 00:35
cjp escreveu:Se vc está falando entre uma função e outra que chama o browse, a mudança no browse é nas funções de usuário. Para uma função, a tecla Enter faz uma coisa; para outra, faz outra coisa. Para uma função, uso apenas o Enter e o Esc; para outra, uso várias teclas. E assim por diante.
10 Set 2020 01:36
10 Set 2020 21:43
oRs := conexao:Execute( "SELECT * FROM CLIENTES" )
oTbrowse := { ;
{ "CODIGO", { || Str( Rs:Fields( "CODIGO" ):Value, 5 ) } }, ;
{ "NOME", { || Pad( Rs:Fields( "NOME" ):Value, 30 ) } }, ;
{ "ENDERECO", { || Pad( Rs:Fields( "ENDERECO" ):Value, 30 ) } } }
BrowseADO( 1, 1, 20, 78, oRs, oTBrowse )
oRs:Close()
BrowseADO( 1, 1, 20, 78, oRs, oTBrowse, { || Ltrim( Str( rs:Fields( "CODIGO" ):Value ) ) } )
BrowseADO( 1, 1, 20, 78, oRs, oTBrowse, , { || MinhaRotina() } )
FUNCTION MinhaRotina( oRs, oTBrowse, nKey )
FUNCTION MinhaRotina( oRs, oTBrowse, nKey )
DO CASE
CASE nKey == K_ENTER
// mostra outra janela
CASE nKey == K_INS
// inclui
CASE nKey == K_DEL
IF MsgYesNo( "Quer excluir mesmo?" )
Excluir( oRs:Fields( "CODIGO" ):Value )
ENDIF
ENDCASE
RETURN NIL
BrowseADO( 1, 1, 20, 78, oRs, oTBrowse )
IF LastKey() == K_ENTER
nValor := oRs:Fields( "CODIGO" ):Value
ENDIF
10 Set 2020 21:54
IF oTBrowse == NIL
nLen := oRs:fields():count() - 1
FOR nCont := 0 TO nLen
oColumn := TBColumnNew( oRs:fields(i):name(), ADORecordSetFieldBlock( oRs, i ) )
nFieldLen := 13
oColumn:Width := Max( nFieldLen, Len( oRs:fields(i):name ) )
oTBrowse:addColumn( oColumn )
NEXT
ELSE
FOR EACH oElement IN oTBrowse
oThisColumn := tbColumnNew( oElement[ 1 ], oElement[ 2 ] )
IF Len( oElement ) > 2
oThisColumn:ColorBlock := oElement[ 3 ]
ENDIF
oBrowse:AddColumn( oThisColumn )
NEXT
ENDIF