Legal Lairton,

 

Concordo com a sua mecânica e considero-a ideal.

Obrigado pela dica.

 

Att, Rodrigo.

 

-----Mensagem original-----
De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Em nome
de Lairton Júnior
Enviada em: terça-feira, 29 de maio de 2007 15:38
Para: sqlwin@virtualand.net
Assunto: Re: [sqlwin] Qtde de Handles

 

Imagino que vcs precisam dar uma parada, analisar todo o fonte com cuidado
para que a usem SqlConnect() o mais tarde possível e o SqlDisconnect( ) o
quanto antes. Iniciem suas rotinas com If SqlConnect( ) e garantam que a
aplicação só saia desse if com um SqlDisconnect(). 

 

Se isso não for feito suas aplicações continuarão apresentando problemas e
instabilidade.

 

É chato mas é preciso ter cuidado com isso. Handles SQL sempre como
variáveis locais e sempre desconectando quando não for necessário estar
conectado ao banco.

 

Por exemplo; quando a aplicação iniciar, a janela de login deve verificar
usuário e senha válidos fazendo sqlconnect() mas após certificar-se de que
os valores foram informados pelo usuário corretamente, fazendo um
SqlConnect(), é preciso fazer SqlDisconnect() e não deixar o handle aberto.
Se as informações de login forem informadas erradas não deve sair da tela de
login. 

 

Se a aplicação chegar a mostrar o menu principal é pq o usuário informou
login válido. Mas enquanto não entrar em nenhuma tela a aplicação deve
permanecer desconectada.

 

Quando uma tela for chamada, abre-se uma conexão para carregar os combos,
tables etc e em seguida SqlDisconnect(). Sempre que a aplicação estiver
aguardando uma entrada de dados do usuário ela deve estar desconectada.
Quando o usuário informar um campo e clicar para fazer uma pesquisa,
conecte, faça a pesquisa, traga os dados na tela e desconecte do banco. Após
a edição o usuário pode clicar num botão para atualizar ou inserir os dados
no banco. Neste momento faça SqlConnect, atualiza tudo e em seguida
SqlDisconnect(). 

 

Dessa forma sua aplicação nunca terá handles abertos desnecessariamente.

 

Sugiro que vc construa uma classe funcional, por exemplo cSql, e crie
métodos conecct(), disconnect(), prepare(), execute() etc....

Assim fica bem mais fácil gerenciar as conexões.

 

1) Conectar o mais tarde possível e desconectar o mais rápido possível.

2) Jamais deixar que a aplicação esteja conectada ao banco de dados enquanto
espera de alguma intervenção do usuário.

 

Uso isso como filosofia no desenvolvimento das minhas aplicações. 

Sugiro q façam algo parecido.

 

um abraço

Lairton.

 

 

 



 

Em 29/05/07, Rodrigo Scarano - Target Sistemas <[EMAIL PROTECTED]>
escreveu: 

OK Luis. Valeu pela dica. Caso não tenha nenhuma outra sugestão do grupo,
pensarei em utilizar um procedimento análogo ao seu. 

 

[]s, Rodrigo.

 

-----Mensagem original-----
De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Em nome
de Luiz Henrique da Cruz
Enviada em: terça-feira, 29 de maio de 2007 11:39
Para: sqlwin@virtualand.net
Assunto: RES: [sqlwin] Qtde de Handles

 

Fala Rodrigão, blz?

 

Nós também estamos com o mesmo problema, em algum ponto da aplicação esta
fazendo a conexão com o banco de dados, e não está desconectando, e quando
atinge o numero de 100 conexões, apresenta esse erro. 

 

A solução que tivemos para tentar identificar o erro, foi colocando o nome
dos handles Sql em um vetor, e quando atinge um numero alto de conexões, é
gerado um arquivo com os nomes dos handles. 

 

Para isso, fiz um programinha, que varre um APT, e passa mais um parâmetro
string com o nome do handle Sql na função de conexão, e armazena num vetor,
para posteriormente gravar num arquivo. 

Exemplo: 

Antes:  DBConnect ( hSqlLeRPProgPer )

Depois: DBConnect ( hSqlLeRPProgPer, ' hSqlLeRPProgPer' )

 

Essa foi a única forma de mapear o erro, caso o handles conectados tenham
nomes distintos. 

 

Espero ter ajudado,

 

Abraços,

LUIZ HENRIQUE DA CRUZ
Centura Developer
 <mailto:[EMAIL PROTECTED]> [EMAIL PROTECTED] 
ASM Soluções em RH
Rua Álvares Penteado, 203
Cep: 01012-001 - São Paulo - SP
Tel: +55 (11) 3526-5206
Fax: +55 (11) 3526-5218

 <http://www.asm.com.br/> www.asm.com.br 

 

  _____  

De: [EMAIL PROTECTED] [mailto: [EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]> ] Em nome de Rodrigo Scarano - Target
Sistemas
Enviada em: terça-feira, 29 de maio de 2007 11:14 
Para: Centura List
Assunto: [sqlwin] Qtde de Handles

 

Bom dia a todos,

 

Hoje utilizamos a conexão com o banco de dados utilizando um "Sql Handle" e
a função "SqlConnect" para conectar-se com o SQL Server 2000. Estamos com um
erro de "No SQL Cursors Remaining" que pelo provavelmente foi causado por
uma quantidade de "Handles" que já estão abertas na máquina. Gostaria de
saber se existe alguma função do "Centura" que retorna a quantidade de
"Handles" abertas para podermos depurar o problema. 

 

Att,

 

 

 

Rodrigo Scarano
Target Sistemas
http://www.targetsis.com.br/
 <mailto:[EMAIL PROTECTED]> [EMAIL PROTECTED]

 







-- 

Lairton N de Almeida Jr. 
[EMAIL PROTECTED] 

Responder a