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]