ERRO MYSQL VERSAO 5.01

ADELMOMELO 15/09/2010 17:45:56
#353054
Olá colegas,

Estou me deparando com um erro que acredito pouco comum, pois, quando rodo a aplicação e conecto ao banco de dados do mysql, acesso normalmente, e em determinados momentos está dando o erro abaixo, e eu não sei como resolver alguém já se deparou com isto? acontece quando faço um select em um determinada tabela ao tentar abrir o resultado está dando o erro abaixo, após está o código.
Run-Time erro: ‘-2147467259(80004005)’:
[MySQL][IDBC 5.1 Driver][mysqld-5.0.91-community]MySQL server has gone away

código:

Set RSMySQL = New ADODB.Recordset
[ô]Prepara o recordset

RSMySQL.CursorType = adOpenStatic
[ô]Este é o unico tipo de cursor a ser usado
[ô]com um cursor localizado no lado do cliente

RSMySQL.CursorLocation = adUseClient
[ô]estamos usando o cursor no cliente

RSMySQL.LockType = adLockPessimistic
[ô]Isto garente que o registros que esta sendo editado
[ô]pode ser salvo
RSMySQL.Source = [Ô]Select * From arquivos Where Id = [ô][Ô] + ListView2.ListItems(i).Text + [Ô][ô][Ô]
[ô]a fonte de dados usamos uma instrucal SQL

RSMySQL.ActiveConnection = cn
[ô]O recordset precisa saber qual a conexao em uso

RSMySQL.Open <---- aqui ocorre o erro


A Conexão com o Banco foi feito com mostra abaixo e funciona para outros selects.
mySqlIP = [Ô]001.00.00.00[Ô] [ô] a localizacao do usuario (localhost)
usr_id = [Ô]usuario[Ô] [ô] identificacao
pass = [Ô]senhal[Ô] [ô] senha
strDataBaseName = [Ô]Banco[Ô]
Set cn = New ADODB.Connection
strConnect = [Ô]driver=MySql ODBC 5.1 Driver;server=[Ô] & mySqlIP & [Ô];uid=[Ô] & usr_id & [Ô];pwd=[Ô] & pass & [Ô];database=[Ô] & strDataBaseName & [Ô][Ô]

Set cn = New ADODB.Connection
[ô]preparando o objeto connection
cn.ConnectionString = strConnect
cn.Open
cn.CursorLocation = adUseClient


O mais estranho é que fiz todos os teste de forma local e funciona normalmente, quando passo os parametros do banco que está hospedado no servidor está acontecendo isto, alguém poderia me ajudar?
JESUEL.OLIVEIRA 15/09/2010 20:31:04
#353065
Resposta escolhida
Amigo, confome documentação da MYSQL, é a perca de conexão do servidor mysql sql, precisa conectar e desconectar do banco,

segue Tradução Documentação MYSQL

Eu ja enfrentei isso, nunca deixe aberto um conexão, abre e fecha, principalmente em servidor web você vai ter este problema.
ADELMOMELO 16/09/2010 13:54:33
#353123
OK, eu já faço isto, abro(open) o select e após fecho(close), inclusive agora estou antes de cada rotina com o mysql estarei abrindo e fechando a conexão com o bando de dados, isto resolve?. Bem além do relatado, também ocorre que, quando faço um select em uma tabela consigo manipular os resultado sem problemas, agora se preciso fazer um segundo select em outra tabela com outro recordset, o mysql até abre como se tudo funcionasse bem mais não traz o resultado da consulta, e ainda, não dá erro nenhum durante a execução só mostrando o mesmo quando uso o debug do VB6, então quando verifico se retornou algum registro é mostrado a mensagem abaixo:
Run-Time error: 3265
O item não pode ser encontrado na coleção correspondente ao nome ou ao ordinal solicitado

Como utilizo o mysql recentemente e não tenho muita experiência e ainda não tenho nenhuma noção de como possa resolver isto, alguém saberia?

O que percebo é que se eu fizer com consulta em uma tabela com o resultado dela, se eu precisar usar outro select de outra tabela o mysql não está permitindo, ou seja, seria por exemplo se eu consultasse uma tabela de cliente(ai ele mostra normalmente todos os registros) e dentre os campos dos clientes tivesse o campo banco(numerico) e agencia(numerico) e precisasse, baseado nestes campos selecionar em outra tabela chamada banco através de outra consulta e ai está acontecendo o informado acima. Para exemplificar melhor abaixo segue o código que está acontecendo:

Codigo abaixo usa dois record set um é RSmSQL(tabela arquivos) e outro RSmSQL_tmp(tabela usuarios):

Do While Not RSmSQL.EOF
ListView2.ForeColor = 3

Set lst = ListView2.ListItems.Add
On Error Resume Next
With lst
.Text = RSmSQL([Ô]Id[Ô])

.SubItems(1) = RSmSQL([Ô]Nome[Ô])
ListView2.ListItems(ListView2.ListItems.Count).ListSubItems(1).ForeColor = vbBlue
.SubItems(2) = RSmSQL([Ô]Descricao[Ô])
mySqlIP = [Ô]000.00.00.00[Ô] [ô] a localizacao do usuario (localhost)
usr_id = [Ô]usu[Ô] [ô] identificacao
pass = [Ô]senha[Ô] [ô] senha
strDataBaseName = [Ô]BD[Ô]
strConnect = [Ô]driver=MySql ODBC 5.1 Driver;server=[Ô] & mySqlIP & [Ô];uid=[Ô] & usr_id & [Ô];pwd=[Ô] & pass & [Ô];database=[Ô] & strDataBaseName & [Ô][Ô]

Set cn = New ADODB.Connection
[ô]preparando o objeto connection
cn.ConnectionString = strConnect
cn.Open
cn.CursorLocation = adUseClient
[ô]usamos um cursor do lado do cliente pois os dados
[ô]serao acessados na maquina do cliente e nao de um servidor
Set RSmSQL_tmp = New ADODB.Recordset
[ô]Prepara o recordset

RSmSQL_tmp.CursorType = adOpenStatic
[ô]Este é o unico tipo de cursor a ser usado
[ô]com um cursor localizado no lado do cliente

RSmSQL_tmp.CursorLocation = adUseClient
[ô]estamos usando o cursor no cliente

RSmSQL_tmp.LockType = adLockPessimistic
[ô]Ist garente que o registros que esta sendo editado
[ô]pode ser salvo

RSmSQL_tmp.Source = [Ô]Select * From usuarios where Id_Usuario = [Ô] & Val(RSmSQL([Ô]Id_Origem[Ô]))

RSmSQL.ActiveConnection = cn
[ô]O recordset precisa saber qual a conexao e

RSmSQL_tmp.Open
[ô]abre o recordset com isto o evento MoveComplete sera disparado

If Not RSmSQL_tmp.EOF Then <--- O ERRO OCORRE AQUI OU SEJA, NÃO TRAZ REGISTROS!!
.SubItems(3) = RSmSQL_tmp([Ô]Usu_Nome[Ô]) <--- CADA RESULTADO DO CAMPO CONTéM O ERRO ACIMA
Else
.SubItems(3) = [Ô]Não Existe[Ô]
End If
.SubItems(4) = Format(RSmSQL([Ô]Data[Ô]), [Ô]DD/MM/YYYY[Ô])
.SubItems(5) = RSmSQL_tmp([Ô]Usu_Cod_Banco[Ô])
.SubItems(6) = RSmSQL_tmp([Ô]Usu_Cod_Agencia[Ô])
End With
RSmSQL.MoveNext

Loop


Será que algém poderia me ajudar?
Tópico encerrado , respostas não são mais permitidas