ADO: Perdendo conexão

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

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: atualização da tela

Mensagem 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?
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: atualização da tela

Mensagem 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.
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

tbrowse: atualização da tela

Mensagem 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.
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: atualização da tela

Mensagem 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.
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: atualização da tela

Mensagem 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.
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: atualização da tela

Mensagem 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?
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: atualização da tela

Mensagem 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.
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: atualização da tela

Mensagem 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?
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

ADO: Perdendo conexão

Mensagem 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
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

ADO: Perdendo conexão

Mensagem por JoséQuintas »

É pra asp mas serve:

Código: Selecionar todos

https://www.w3schools.com/asp/ado_ref_connection.asp
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:

ADO: Perdendo conexão

Mensagem 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?
Inacio de Carvalho Neto
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

ADO: Perdendo conexão

Mensagem 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...
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

ADO: Perdendo conexão

Mensagem 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
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:

ADO: Perdendo conexão

Mensagem 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.
Inacio de Carvalho Neto
Responder