Página 2 de 2

tbrowse: atualização da tela

Enviado: 18 Dez 2021 18:04
por cjp
Sem dúvida vc tem razão. Eu tinha esquecido que é variável local e, portanto, não seria afetada mesmo por outra função.
De qualquer forma, o problema que tenho aqui ainda está sem resposta. Ainda não consigo saber onde está fechando a conexão deste browse.
Existe alguma forma de fazer algum teste que me dê uma solução pra isso?

tbrowse: atualização da tela

Enviado: 19 Dez 2021 15:02
por JoséQuintas
cjp escreveu:De qualquer forma, o problema que tenho aqui ainda está sem resposta. Ainda não consigo saber onde está fechando a conexão deste browse.
Existe alguma forma de fazer algum teste que me dê uma solução pra isso?
Se quem fez não consegue, sinal de que o fonte tá ruim.
Seguir o fonte passo a passo pra ver o que o fonte faz.
Se não resolver, faz outro.

Bloquear partes do fonte, pra ver se tirando aquela parte funciona.
É um caso seu, uma situação sua, os fontes estão aí na sua mão, só você pode resolver.
Não dá pra ficar imaginando o que seu fonte faz, ninguém tem bola de cristal.

tbrowse: atualização da tela

Enviado: 20 Dez 2021 08:16
por JoséQuintas
JoséQuintas escreveu:Não dá pra ficar imaginando o que seu fonte faz, ninguém tem bola de cristal.
O que OS SEUS FONTES fazem, porque se um depende do outro, ou uma variável é alterada por outro, só olhando TODOS OS FONTES ENVOLVIDOS.

Ponha-se em nosso lugar.

Tente resolver esta questão:

Código: Selecionar todos

PRIVATE A

A = Funcao()

?  A
Tinha que dar 10, mas tá dando 5. O que tem de errado nesse fonte?
O que está perguntando é parecido com isso, não dá pra saber olhando um só fonte, e não dá pra imaginar o que o outro fonte faz.

tbrowse: atualização da tela

Enviado: 21 Dez 2021 20:03
por cjp
Eu te entendo.
Mas, no caso, eu postei a função.
A questão me parece simples: a conexão do browse parece estar sendo fechada na função veronus(), mas a função veronus(), até onde eu pude constatar, não está fechando a conexão.
Não sei se adianta fazer de novo. Se não sei a causa do erro, vou acabar cometendo o mesmo erro de novo.

tbrowse: atualização da tela

Enviado: 22 Dez 2021 10:39
por JoséQuintas
cjp escreveu:Eu te entendo.
Mas, no caso, eu postei a função.
A questão me parece simples: a conexão do browse parece estar sendo fechada na função veronus(), mas a função veronus(), até onde eu pude constatar, não está fechando a conexão.
Não sei se adianta fazer de novo. Se não sei a causa do erro, vou acabar cometendo o mesmo erro de novo.
E ao contrário, eu não te entendo.
Passei o que fazer na função de conexão.

MESMO QUE JÁ TENHA FEITO, não é só alterar a função, precisa alterar todos os lugares que usam a função, começando nesse veronus() que é onde está tendo problema.

tbrowse: atualização da tela

Enviado: 29 Dez 2021 23:29
por cjp
Eu alterei da forma como vc disse, mas não resolveu.
E, se eu entendi bem o que vc disse, não resolveria mesmo, não? Porque, afinal, a variável da conexão deste browse é local. Então, ela não poderia mesmo ser alterada em outro ponto do sistema. Estou correto?
Então, voltamos ao ponto inicial: como pode estar perdendo a conexão em outro ponto do sistema?

tbrowse: atualização da tela

Enviado: 30 Dez 2021 11:36
por JoséQuintas
cjp escreveu:Eu alterei da forma como vc disse, mas não resolveu.
E, se eu entendi bem o que vc disse, não resolveria mesmo, não? Porque, afinal, a variável da conexão deste browse é local. Então, ela não poderia mesmo ser alterada em outro ponto do sistema. Estou correto?
Então, voltamos ao ponto inicial: como pode estar perdendo a conexão em outro ponto do sistema?
Ela ser local isola de todo restante, exceto no caso de passar por referência, pra função de abertura, que seria um lugar passado de propósito, sabendo o que iria acontecer.
Agora é tentar entender o que outras funções fazem.

tbrowse: atualização da tela

Enviado: 30 Dez 2021 12:20
por cjp
Então, mas não estou passando a variável da conexão do browse por referência para lugar algum. Isso que não estou entendendo.
Existe alguma forma de testar o status da variável?

ADO: Perdendo conexão

Enviado: 30 Dez 2021 14:22
por JoséQuintas
Existe como testar o status da conexão.
Só confirmar nas propriedades de conexão ADO, deve ter na Microsoft.

Código: Selecionar todos

? cnSQL:State

ADO: Perdendo conexão

Enviado: 30 Dez 2021 14:23
por JoséQuintas
É pra asp mas serve:

Código: Selecionar todos

https://www.w3schools.com/asp/ado_ref_connection.asp

ADO: Perdendo conexão

Enviado: 18 Mar 2022 00:39
por cjp
Desculpe a demora, mas estou há tempo tentando resolver este problema, sem sucesso.
Fiz um arquivo só deste browse para tentar ver o problema.
Neste arquivo, está dando o seguinte erro:
Error BASE/1003 Variável não existe: TBR_EXIT
Este erro está na seguinte parte do programa:

Código: Selecionar todos

      IF oBrowse:applyKey( nKey ) == TBR_EXIT
         EXIT
      ENDIF
Entendi que está faltando a definição desta variável, realmente não tem.

O problema é que, no arquivo original, de onde tirei o browse, também não tem definição desta variável. E, estranhamente, não acontece este erro.

Poderia por favor me explicar o que é esta variável, e como defini-la corretamente?

ADO: Perdendo conexão

Enviado: 18 Mar 2022 01:29
por alxsts
Olá!

Feliz ano novo!
cjp escreveu:O problema é que, no arquivo original, de onde tirei o browse, também não tem definição desta variável. E, estranhamente, não acontece este erro.
Neste caso, TBR_EXIT não é uma variável. É uma constante manifesta.

Constantes manifestas, como o nome sugere, são valores que não se alteram durante a execução de um programa ou sistema inteiro. São definidas em arquivos de cabeçalho (.ch, (clipper header) ). Estes arquivos são processados pelo pré-processador, em tempo de compilação, quando o arquivo fonte (.Prg) é lido. Neste ponto, os nomes das constantes manifestas são trocados por seus respectivos valores. Constantes manifestas são case sensitive, ou seja, se você definiu o nome da constante como K_FOO, terá que usar este nome em seu fonte. Se usar K_foo, vai dar este erro "Error BASE/1003 Variável não existe:".

Para solucionar o teu problema, basta inserir no início do teu fonte a linha

Código: Selecionar todos

#include "tbrowse.ch"
Se você abrir este arquivo na pasta include do Harbour ou xHarbour, vai encontrar lá a linha

Código: Selecionar todos

/* tBrowse ApplyKey() method return codes */
#define TBR_EXIT        -1
O código abaixo

Código: Selecionar todos

IF oTbr:applyKey( nKey ) == TBR_EXIT
   EXIT
ENDIF
é equivalente a este

Código: Selecionar todos

IF oTbr:applyKey( nKey ) == -1
   EXIT
ENDIF
Constantes manifestas são muito úteis no caso de se desejar alterar o valor da constante. Se alguém resolver alterar o valor da constante TBR_EXIT para -1000, não será necessário alterar os fontes onde a constante estiver sendo usada. Já no caso de se estar usando o valor, teria que varrer todos os fontes e trocar -1 por -1000...

ADO: Perdendo conexão

Enviado: 18 Mar 2022 12:25
por JoséQuintas
Comentário adicional:

Em fonte formatado, geralmente o que está em maiúsculo é constante, que fica em algum #define
Por isso é importante formatação, porque fica fácil identificar.
Também é interessante formatar o prefixo, nesse caso TBR_, porque indica o conjunto do tbrowse.

Com certeza vai ver isso mais vezes em outros fontes.

Outro exemplo bastante conhecido é o K_ESC, vindo de inkey.ch
O prefixo K é sobre keyboard - teclado

ADO: Perdendo conexão

Enviado: 20 Mar 2022 00:15
por cjp
Realmente, bobeira minha. Já conhecia sobre constantes, embora não sabia dessa forma fácil de identificar as constantes.
Coloque o include e resolveu este problema.
E agora cheguei ao problema central com o qual estou me debatendo aqui desde o início: a perda da conexão.
Fiz um sistema só para este browse, para conseguir testar mais especificamente. Aqui no meu computador não dá erro.
Mas o meu sistema principal também funciona sem erro no meu computador, e dá erro nos computadores de todos os usuários. Evidentemente, tem algo errado aí.
Agora vou testar este sistema exclusivo para este browse nos computadores dos usuários, para ver se também dá erro.
Obrigado a todos por enquanto.