CONEXAO MYSQL 5.1

ADEMIRBP 03/05/2011 14:44:08
#373095
Estou fazendo a conexão do VB6 com mysql 5.1 (Baixei e já instalei o Mysql ODBC). Consegui fazer a conexão, mas na hora de fazer a consulta ocorre o seguinte erro: Os argumentos são incorretos, estão fora do intervalo aceitável ou estão em conflito. Segue o código da conexão que está é module e a instrução sql:

MODULE
[ô]Declarações Globais
Global Cn As ADODB.Connection
Global Rs As ADODB.Recordset
Global Sql As String
Global Nl As String * 2

Public Function ConectarBanco()
[ô]**** criando a conexão
Set Cn = CreateObject([Ô]ADODB.Connection[Ô])
[ô]**** abrindo conexão
Cn.Open [Ô]driver={MySQL ODBC 5.1 Driver};server=localhost;uid=root;pwd=21052000;database=IbizCond[Ô]
[ô]**** criando recordset
Set Rs = CreateObject([Ô]ADODB.RecordSet[Ô])
[ô]**** efetuando conexão do recordset
Set Rs.ActiveConnection = Cn
End Function

FORM CADASTRO

Private Sub CmdSalvarFun_Click()
Sql = [Ô]SELECT CON_CODIGO FROM CONDOMINIO WHERE CON_CODIGO = [Ô] & Val(TxtCodigo.Text)
Set Rs = Cn.OpenResultset(Sql, rdOpenForwardOnly, 1, 64) [ô]O ERRO OCORRE BEM AQUI
If Rs.EOF Then
If Val(TxtCodigo.Text) = 0 Then
Sql = [Ô]SELECT MAX(CON_CODIGO) FROM CONDOMINIO[Ô]
Set Rs = Cn.OpenResultset(Sql, rdOpenForwardOnly, 1, 64)
If IsNull(Rs(0)) Then
TxtCodigo.Text = 1
Else
If Rs(0) = 999999 Then
Screen.MousePointer = 0
MsgBox [Ô]Sequência automática esgotada...[Ô], vbInformation, [Ô]Atenção![Ô]
Rs.Close
TxtCodigo.SetFocus
Exit Sub
End If
TxtCodigo.Text = Rs(0) + 1
End If
Rs.Close
End If

Sql = [Ô]INSERT INTO CONDOMINIO VALUES( [Ô] & Val(TxtCodigo.Text) & [Ô],[ô][Ô] & Trim(TxtNome.Text) & [Ô][ô],[Ô] & Nl
Sql = Sql & [Ô][ô][Ô] & Trim(TxtEndereco.Text) & [Ô][ô],[ô][Ô] & Trim(TxtBairro.Text) & [Ô][ô],[ô][Ô] & Trim(TxtCidade.Text) & [Ô][ô],[Ô] & Nl
Sql = Sql & [Ô][ô][Ô] & (CboUF.Text) & [Ô][ô],[ô][Ô] & (MskCNPJ.Text) & [Ô][ô],[ô][Ô] & (MskIE.Text) & [Ô][ô],[Ô] & Nl
Sql = Sql & [Ô][ô][Ô] & (MskTelefone.Text) & [Ô][ô],[ô][Ô] & Trim(TxtSindico.Text) & [Ô][ô],[ô][Ô] & Trim(TxtObs.Text) & [Ô][ô])[Ô]
Cn.Execute Sql, 64
End Sub
----------------------------------------
Se alguem puder me ajudar agradeço


NETMANIA 03/05/2011 15:03:11
#373097
O campo CON_CODIGO é do tipo numérico ou texto?

Você tento usar o OpenRecordset somente com os parâmetros do tipo de cursor e o comando SQL?
ADEMIRBP 03/05/2011 15:06:11
#373098
Numérico (Int)
ADEMIRBP 03/05/2011 15:08:20
#373099
Na verdade é a primeira vez que ligo o myslq com o VB6, geralmente eu faço isso com o delphi. Se alguem puder me orientar se a conexão está escrito certa eu agradeço...
ROMEROSISTEMAS 03/05/2011 15:24:22
#373102
Resposta escolhida
mdl_conecção

Option Explicit  [ô]exige que todos os objetos sejam declarados

Public Enum Tipo_Lado
Lado_Servidor = 2 [ô] AdUseServer
Lado_Cliente = 3 [ô] AdUseCliente
End Enum

Public Enum Tipo_CursorType
TC_adOpenForwardOnly = 0
TC_adOpenKeyset = 1
TC_adOpenDynamic = 2
TC_adOpenStatic = 3
End Enum

Public Enum Tipo_Travamento
TT_adLockReadyOnly = 1 [ô](padrão)
TT_adLockOptimistic = 3
TT_adLockPessimistic = 2
TT_adLockBatchOptimistic = 4
End Enum

Public Conexao As ADODB.Connection
Public Senha_BD As String
[ô]usar Outros Bancos
Public UsarOutroBanco As String

Public Function MeuRecordset(SQL As String, _
Optional CursorLado As Tipo_Lado = Lado_Servidor, _
Optional Cursores As Tipo_CursorType = 0, _
Optional travamento As Tipo_Travamento = 1) As Recordset

Set MeuRecordset = New ADODB.Recordset
MeuRecordset.CursorLocation = 3

MeuRecordset.Open SQL, Conexao, Cursores, travamento
If Error = -2147467259 Then
If Err.Number <> 5 Then MsgBox Err.Number & vbCrLf & Err.Description: Err.Clear
End If
End Function

Public Function Plic(ByVal sTexto As String) As String
If InStr(sTexto, Chr(39)) Then
Plic = Chr(39) & Replace(sTexto, Chr(39), Chr(39) & Chr(39)) & Chr(39)
Else
Plic = Chr(39) & sTexto & Chr(39)
End If
Plic = Replace(Plic, [Ô]*[Ô], [Ô]%[Ô])
End Function

Function str_conexao_ADO(DatabasePath As String, senha As String) As Boolean

On Error GoTo TrataErr_DB:
Set Conexao = New ADODB.Connection
NomeBancoDados = DatabasePath

With Conexao
[ô] especifica o provedor Jet
[ô] Leitura/gravaçao
.Mode = adModeReadWrite

If UsarOutroBanco = [Ô]PostGre[Ô] Then
.ConnectionString = [Ô]Provider=MSDASQL.1;Persist Security Info=true;User ID=postgres;Data[Ô] & _
[Ô] Source=PostgreSQL30;Initial Catalog=Banco_de_Dados[Ô]
ElseIf UsarOutroBanco = [Ô]FireBird[Ô] Then
.ConnectionString = [Ô]Provider=ZStyle IBOLE Provider;Data Source=[Ô] & DatabasePath & [Ô][Ô] & _
[Ô] ;UID=sysdba;password=[Ô] & senha
ElseIf UsarOutroBanco = [Ô]SQLSERVER[Ô] Then
Dim X
X = GetComputerName([Ô]me[Ô])
.ConnectionString = [Ô]Driver={SQL Server};Server=[Ô] & X & [Ô];[Ô]
ElseIf UsarOutroBanco = [Ô]MySQL[Ô] Then
.ConnectionString = [Ô]DRIVER={MySQL ODBC 5.1 Driver};[Ô] & [Ô]SERVER=200.196.233.50;[Ô] & [Ô][Ô] & _
[Ô] DATABASE=romerosistemas;[Ô] & [Ô]UID=romerosistemas;PWD=maykow05; OPTION=3[Ô]
Else
.Provider = [Ô]Microsoft.Jet.OLEDB.4.0[Ô]
.ConnectionString = [Ô]data source=[Ô] & DatabasePath & [Ô] ;Jet OLEDB:Database Password= [Ô] & senha
End If
.Open
End With

str_conexao_ADO = True
Exit Function
TrataErr_DB:
str_conexao_ADO = False

If Err.Number = -2147467259 Then
MsgBox [Ô]Formato do Banco de Dados não Reconhecido![Ô], vbCritical, [Ô]Banco de Dados[Ô]
Err.Clear
End
Exit Function
End If
Screen.MousePointer = 0
MsgBox [Ô] Nº [Ô] & Str$(Err) & [Ô]: Descrição: [Ô] & Err.Description, 16
Err.Clear
End
End Function


mdl_principal

Public Sub AbreBanco(NomeDoBanco As String, Optional senha As String)
If str_conexao_ADO(NomeDoBanco, senha) = True Then
Set RectTMP = MeuRecordset([Ô]SELECT * FROM Configuracao[Ô], 3, , 3)
If RectTMP.RecordCount = 0 Then
RectTMP.AddNew [ô]ADICIONA NOVO REGISTRO
[ô]RectTMP.Fields([Ô]id[Ô]) = 1
RectTMP.Fields([Ô]Data[Ô]).Value = Date
RectTMP.Fields([Ô]Hora[Ô]) = time
RectTMP.Fields([Ô]Descricao[Ô]).Value = LoadResString(100) & [Ô] [Ô] & LoadResString(113)
[ô]RectTMP.Fields([Ô]Vercao[Ô]) = Format(App.Major, [Ô]0#[Ô]) & Format(App.Minor, [Ô]0#[Ô]) &
[ô] Format(App.Revision, [Ô]0#[Ô])
RectTMP.Update [ô]ATUALIZA/SALVA O REGISTRO
[ô]Serial_Int = MdiMain.BtnSerial1.DataParaChave(Day(Date) & [Ô]/[Ô] & Month(Date) & [Ô]/[Ô] &
[ô] Year(Date))
[ô]GravarValorSTRING HKEY_LOCAL_MACHINE, [Ô]SOFTWARE\RM [Ô] & LoadResString(100), [Ô]Serial[Ô],
[ô] Serial_Int
End If
Else [ô]mensagem Personalizada
MdiMain.Mensagem1.Mensagem [Ô]O Banco de dados [Ô] & [Ô][ô][ô][Ô] & NomeDoBanco & [Ô][ô][ô][Ô] & [Ô] não existe ou[Ô] & _
[Ô] foi removido![Ô] & [Ô] Deseja criar um Novo? [Ô], [Ô]Erro[Ô], AbortarPadrão, DlgSimNão, [Ô]Erro[Ô] & _
[Ô] Número :[Ô] & Err.Number & vbCrLf & [Ô]Descrição :[Ô] & Err.Description & vbCrLf & [Ô]Precione [Ô] _
& [Ô][ô][ô][Ô] & [Ô]Sim[Ô] & [Ô][ô][ô][Ô] & [Ô] e tente LOCALIZAR o Banco de Dados padão, ou crie um NOVO Banco[Ô] & _
[Ô] de Dados.[Ô]
If MdiMain.Mensagem1.Retorno = MsgNão Then
MdiMain.Mensagem1.Mensagem [Ô]Sendo assim o Programa será finalizado!!![Ô], [Ô]RM_PLACE[Ô], _
informaçãoAzul, DlgOk: End
End
end if
On Error GoTo 0
End Sub

Public Sub Main()
Dim BancoDeDados As String
UsarOutroBanco = [Ô]MySQL[Ô]
If UsarOutroBanco = [Ô]MySQL[Ô] Then
AbreBanco [Ô]IP+LocalBanco[Ô], [Ô]Senha[Ô]
[ô]Altera_Banco
FrmSpan.Show [ô]abre a tela de Span
FrmSpan.Tag = [Ô]login[Ô]
FrmLogin.Show , FrmSpan [ô]abre a tela de login
FrmLogin.ZOrder [ô]coloca a tela de login na frente
end if
End Sub


eu uso assim e meu banco abre certinho sem problema...
ADEMIRBP 03/05/2011 15:38:28
#373108
Resolvi de outra maneira, onde continuo mantendo a minha conexão, a diferença está na maneira como o MYSQL trata uma string SQL: Segue abaixo o código caso alguem precise:

FORM CADASTRO

Private Sub CmdSalvarFun_Click()
Sql = [Ô]SELECT CON_CODIGO FROM CONDOMINIO WHERE CON_CODIGO = [Ô] & Val(TxtCodigo.Text)
[txt-color=#e80000] [ô][ô] Set Rs = Cn.OpenResultset(Sql, rdOpenForwardOnly, 1, 64)[/txt-color] [ô]ERRADO
[txt-color=#007100] Set Rs = Cn.Execute(Sql)[/txt-color] [ô]CERTO
If Rs.EOF Then
If Val(TxtCodigo.Text) = 0 Then
Sql = [Ô]SELECT MAX(CON_CODIGO) FROM CONDOMINIO[Ô]
[txt-color=#e80000] [ô][ô] Set Rs = Cn.OpenResultset(Sql, rdOpenForwardOnly, 1, 64)[/txt-color] [ô]ERRADO
[txt-color=#007100] Set Rs = Cn.Execute(Sql)[/txt-color] [ô]CERTO
If IsNull(Rs(0)) Then
TxtCodigo.Text = 1
Else
If Rs(0) = 999999 Then
Screen.MousePointer = 0
MsgBox [Ô]Sequência automática esgotada...[Ô], vbInformation, [Ô]Atenção![Ô]
Rs.Close
TxtCodigo.SetFocus
Exit Sub
End If
TxtCodigo.Text = Rs(0) + 1
End If
Rs.Close
End If

Sql = [Ô]INSERT INTO CONDOMINIO VALUES( [Ô] & Val(TxtCodigo.Text) & [Ô],[ô][Ô] & Trim(TxtNome.Text) & [Ô][ô],[Ô] & Nl
Sql = Sql & [Ô][ô][Ô] & Trim(TxtEndereco.Text) & [Ô][ô],[ô][Ô] & Trim(TxtBairro.Text) & [Ô][ô],[ô][Ô] & Trim(TxtCidade.Text) & [Ô][ô],[Ô] & Nl
Sql = Sql & [Ô][ô][Ô] & (CboUF.Text) & [Ô][ô],[ô][Ô] & (MskCNPJ.Text) & [Ô][ô],[ô][Ô] & (MskIE.Text) & [Ô][ô],[Ô] & Nl
Sql = Sql & [Ô][ô][Ô] & (MskTelefone.Text) & [Ô][ô],[ô][Ô] & Trim(TxtSindico.Text) & [Ô][ô],[ô][Ô] & Trim(TxtObs.Text) & [Ô][ô])[Ô]
Cn.Execute Sql, 64
End Sub
----------------------
Set Rs = Cn.OpenResultset(Sql, rdOpenForwardOnly, 1, 64) [ô]FUNCIONA BEM PARA ACESS MDB
Set Rs = Cn.Execute(Sql) [ô]Funcionou para minha conexão VB6 com MYSQL 5.1

---------------------
Agradeço ao ROMEROSISTEMAS pela dica, está guardada para futuras pesquisas. Vlw
Tópico encerrado , respostas não são mais permitidas