Página 8 de 10
cor no tbrowse
Enviado: 04 Set 2021 07:14
por JoséQuintas
cjp escreveu:Uma outra dúvida, por favor: tentei colocar o campo PONTOS também em vermelho na mesma linha do total, mas sei como fazer isto.
Do mesmo jeito que o total, aí está procurando pela palavra "TOTAL". Ela existe?
cor no tbrowse
Enviado: 04 Set 2021 07:27
por JoséQuintas
Novamente:
A função para o browse, você chamou de BROWSEADO2()
É ela que vai usar no aplicativo.
Se está dizendo que vai usar a BROWSEADO()....
foi tempo perdido, vai acabar fazendo tudo igual antes.
Está querendo fazer o browse partindo de um comando SQL não importa de onde vém ou pra que serve.
Isso não vai ter solução nunca.
cor no tbrowse
Enviado: 04 Set 2021 10:09
por cjp
Se está dando erro de compilação, a mensagem da compilação já deve estar dizendo do que se trata.
Sim, eu esqueci de anexar o erro.
O erro é de ambiguos reference.
Eu já testei até trocar o nome da variável, mas o erro permanece.
cor no tbrowse
Enviado: 04 Set 2021 10:35
por JoséQuintas
Legal.
Isso é a variável dos GETs, que não fica visível nos fontes.
O correto é aonde tem gets, declarar essa variável.
Assim, os GETs de um fonte não interferem nos gets de outro fonte.
Esse aviso só aparece quando usamos a compilação -w3 -es2
Se olhar essas linhas, vão ter GET/READ/etc.
Se por acaso for CLEAR... então é usar o correto pra limpar tela, que é CLS.
O CLEAR, além de limpar a tela, também limpa os gets, o que acaba fazendo uso da variável GetList.
cor no tbrowse
Enviado: 04 Set 2021 10:58
por JoséQuintas
Pra curiosidade, a tradução dos comandos, em harbour\include\std.ch
Código: Selecionar todos
#command CLS => Scroll() ; SetPos( 0, 0 )
#command CLEAR SCREEN => CLS
#command CLEAR GETS => ReadKill( .T. ) ; GetList := {} ; ( GetList )
#command CLEAR => CLEAR SCREEN ; CLEAR GETS
Pode parecer uma coisa à toa, mas.... vai fazer diferença no tamanho do EXE e na velocidade.
Menos comandos, EXE menor e mais rápido.
E se fossem adaptados pra ambiente GUI... daria certo.
cor no tbrowse
Enviado: 04 Set 2021 13:30
por cjp
Esse problema foi resolvido, mas agora, prosseguindo na elaboração da função de usuário, estou com outro problema: está dando o mesmo erro "ambiguous reference 'COD'", nestas linhas:
Código: Selecionar todos
private cod
...
cod=oRs:Fields("id"):Value
...
exqado("update pontos set pontos="+alltrim(str(nPtx))+" where id="+alltrim(str(cod)))
Não consegui achar nenhum erro aí.
Uma outra dúvida, por favor: tentei colocar o campo PONTOS também em vermelho na mesma linha do total, mas sei como fazer isto.
Tentei o óbvio:
Código: Selecionar todos
{ "PONTOS", { || oRs:ToStr( "PONTOS", 6 ) }, { | x | If( At( "TOTAL ", Upper( x ) ) > 0, { 5, 5 }, { 1, 2 } ) } }, ;
Mas assim não funcionou.
Como ainda não entendi esse codeblock, não soube adaptar. Pode me ajudar?
cor no tbrowse
Enviado: 04 Set 2021 15:38
por JoséQuintas
É o mesmo erro que antes, falta declarar variável.
PRIVATE não declara variáveis, nem PUBLIC.
Se quiser usar private ou public, vai ter que declarar no início dos fontes as variáveis private/public como MEMVAR
Se retirar da compilação o -w3 -es2 não precisa disso, mas pode passar muito erro.
De qualquer forma, volta ao seu jeito de programar de antes.
Isso também é ativado por #pragma -w3 no fonte.
Agora decide:
Ou passa a trabalhar com -w3 -es2, ou volta como era antes.
cor no tbrowse
Enviado: 04 Set 2021 21:53
por JoséQuintas
Reforçar de novo:
Se me lembro bem, o browse atual recebe comando SQL, e pesquisa servidores diferentes, e bancos diferentes.
É pra CADA rotina ter seu próprio browse, chamando o ADO2()
Se for o caso.... crie funções separadas pra CADA browse.
Código: Selecionar todos
FUNCTION BrowseAcoesPraSelecionar()
AbreBanco()
FazSelect()
aCamposList := ???
BrowseADO2( aCamposList, ??? )
Se mantiver tudo no BrowseADO(), vai continuar sendo uma salada dentro do browseado().
Pense assim: CADA browse é uma tela diferente, então CADA browse precisa de sua rotina própria.
Apenas BrowseADO2() vai ser uma rotina comum, pra usar em todas essas suas rotinas.
Como vai fazer pra gerenciar os browses em vários servidores... isso já é outra história...
cor no tbrowse
Enviado: 05 Set 2021 14:01
por cjp
Esse problema do cod foi resolvido, obrigado. Agora acho que consigo fazer a função de usuário pra esta função.
Não tenho mais vários provedores.
Quanto à questão de tornar esta função genérica da forma correta, vamos ver se eu entendi: a função nova terá uma parte genérica e uma parte específica para cada função, correto?
Entendi que a função de usuário é uma das partes específicas, correto?
Agora quanto à tbrowseado ser genérica ou específica, estou em dúvida.
Atualmente esta nova função está assim: começa com a tbrowseado(), com um só parâmetro recebido: a query a ser executada. Esta faz a conexão (oRs), tem a lista de campos (aCamposList) e chama a tbrowseado2(), com os seguintes parâmestros: oRs, aCamposList e um code block com oBrowse, nkey, a função de usuário (RotinaUsuario). Então, me parece que esta tbrowseado() não é da parte genérica, e sim da parte específica, correto?
Então, a parte genérica seria a tbrowseado2() né?
Enfim, parece que eu estou começando a entender como funciona este tbrowse.
cor no tbrowse
Enviado: 05 Set 2021 15:56
por JoséQuintas
Sim, isso mesmo.
tbrowseado2() é a genérica.
O que vai ser rotina específica:
- define comando SQL
- faz pesquisa
- criar as colunas que interessam para o browse
- cria a rotina de usuário específica
A que define a informação envolvida, que define a tela, e que define o funcionamento/recursos
E isso equivale ao que é normal: cada tela é um módulo
Não tem que desviar tudo pra tbrowseADO(), só por causa de executar SQL.
Deve fazer o contrário, deixar a execução disponível nos módulos.
Exemplo:
Desta forma, elimina toda parte que envolve servidor de cada módulo, sem mover a parte específica do módulo.
Cada módulo com sua parte específica, mais fácil fazer manutenção.
cor no tbrowse
Enviado: 06 Set 2021 00:40
por cjp
Não sei se entendi esta parte.
Eu poderia transferir para a tbrowseado2() a conexão (oCN), o open e a execução (oRs)? Se for isso, como ficaria o do while da tbrowseado()? Passaria também para a tbrowseado2()? Mudaria os parâmetros para passar da tbrowseado() para a tbrowseado2()?
Queria definir bem isso para poder fazer em definitivo a parte genérica, para então passar a usar ela pra tudo.
Reitero meu pedido anterior da mudança da cor da coluna pontos também, por favor.
cor no tbrowse
Enviado: 06 Set 2021 01:40
por JoséQuintas
NÃO.
A única rotina genérica é o tratamento de browse, é a browseado2().
Abrir conexão não tem a ver com ela.
Se ela recebe o recordset (oRS), e a lista de campos validada, precisa estar tudo aberto e comando executado pra ela funcionar.
Se todo esse trabalho é pra tirar isso da sua rotina velha, perguntar se vai colocar lá dentro de novo..... é froyds...
Sobre a cor é só isso. Verifique se o iif() é válido.
cor no tbrowse
Enviado: 06 Set 2021 09:30
por cjp
Se todo esse trabalho é pra tirar isso da sua rotina velha, perguntar se vai colocar lá dentro de novo..... é froyds...
Não sei se eu não te entendi, ou vc não me entendeu. Mas eu estou do novo browse que fizemos aqui, não da minha função velha.
A ideia seria transferir para a tbrowseado2(), a genérica, o máximo de informações possíveis, para deixar as funções específicas o mais enxutas possíveis.
Por isso pensei se não seria possível deixar a conexão nesta tbrowseado2(), pra ficar genérica.
Se não é possível, tudo bem, paciência.
Sobre a cor é só isso. Verifique se o iif() é válido.
Não entendi esta parte.
Estava me referindo a esta dúvida:
Uma outra dúvida, por favor: tentei colocar o campo PONTOS também em vermelho na mesma linha do total, mas sei como fazer isto.
Tentei o óbvio:
{ "PONTOS", { || oRs:ToStr( "PONTOS", 6 ) }, { | x | If( At( "TOTAL ", Upper( x ) ) > 0, { 5, 5 }, { 1, 2 } ) } }, ;
Mas assim não funcionou.
Como ainda não entendi esse codeblock, não soube adaptar. Pode me ajudar?
cor no tbrowse
Enviado: 06 Set 2021 09:47
por JoséQuintas
cjp escreveu:Não sei se eu não te entendi, ou vc não me entendeu. Mas eu estou do novo browse que fizemos aqui, não da minha função velha.
A ideia seria transferir para a tbrowseado2(), a genérica, o máximo de informações possíveis, para deixar as funções específicas o mais enxutas possíveis.
Por isso pensei se não seria possível deixar a conexão nesta tbrowseado2(), pra ficar genérica.
Se não é possível, tudo bem, paciência.
Mover conexão, criação da lista de campos, rotinas de usuário, etc.
Centenas de rotinas diferentes no mesmo fonte.
O que tem de genérico nisso?
cjp escreveu:Estava me referindo a esta dúvida:
Eu também, se a outra funciona, verifique se esse iif() é válido.
cor no tbrowse
Enviado: 06 Set 2021 13:31
por JoséQuintas
Fico pensando se não seria mais fácil colocar o que está querendo dentro do próprio banco de dados, como VIEW ou PROCEDURE.
E o próprio banco retornar a configuração do browse.