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
[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

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


 ------------------------------

*De:* [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/
[EMAIL PROTECTED]






--

Lairton N de Almeida Jr.
[EMAIL PROTECTED]

Responder a