Ir para conteúdo
Fórum Script Brasil
  • 0

Conexão com MySQL


geraldozys

Pergunta

Bom dia,

Estou com um probleminha para fazer rodar esse pequeno código:

Dim DBConnect As ADODB.Connection
Dim RecSet As Recordset
Dim StrSql As String
Dim i As Integer

Private Sub Form_Load()

    Set DBConnect = New ADODB.Connection
    Set RecSet = New Recordset
    
    DBConnect.Open "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=teste; User=teste;Password=teste;Option=3;"
    StrSql = "select NOME_CLI, CPF_CNPJ_CLI, CIDADE_CLI, UF_CLI, PESSOA_CLI, EMAIL_CLI from cliente where NOME_CLI =" & txtCodigo.Text
    RecSet StrSql, DBConnect, adOpenFowardOnly, adLockReadOnly
    
End Sub

Quando eu executo esse código, ele dá o seguinte erro: "Expected procedure, not a variable"..

eu vi e revi o código, mas não consigo entender que procedure eu preciso inserir...

(eu nunca programei em vb antes, apenas em vb.net que eu julgo muito diferente)

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

24 respostass a esta questão

Posts Recomendados

  • 0

qual a linha do erro??

isso aqui, não seria assim??

RecSet.Open StrSql, DBConnect, adOpenFowardOnly, adLockReadOnly

veja q você não pos o .Open.

(eu nunca programei em vb antes, apenas em vb.net que eu julgo muito diferente)

a gde semelhanca é na sintaxe, os objetos do .net framework são diferentes.

Link para o comentário
Compartilhar em outros sites

  • 0

olá.

desculpe a demora para responder.

assim.. eu utilizei dessa maneira

Private Sub Form_Load()

Set DBConnect = New ADODB.Connection

Set RecSet = New Recordset

DBConnect.Open "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=teste; User=root;Password=teste;Option=3;"

StrSql = "select NOME_CLI, CPF_CNPJ_CLI, CIDADE_CLI, UF_CLI, PESSOA_CLI, EMAIL_CLI from cliente where NOME_CLI =" & txtCodigo.Text

RecSet.Open(StrSql, DBConnect, adOpenFowardOnly, adLockReadOnly)

End Sub

e no caso diz erro de sintaxe, e fica em vermelho a linha do RecSet...

já não sei o que fazer, isso que estou no início do projeto e tenho até sexta feira pra entregar :(

Link para o comentário
Compartilhar em outros sites

  • 0

qual a mensagem exatamente. se ele diz erro de sintaxe entoa deve ser com o mysql, o problema ta na query.

o nome do cliente é do tipo texto não?? então tem q tar entre aspa assim:

StrSql = "select NOME_CLI, CPF_CNPJ_CLI, CIDADE_CLI, UF_CLI, PESSOA_CLI, EMAIL_CLI from cliente where NOME_CLI = '" & txtCodigo.Text & "'"

só ta estranho q você ta pegando o nome num text q chama codigo, mas td bem.

Link para o comentário
Compartilhar em outros sites

  • 0

a mensagem não é so "syntax error", certo?? qual é a mensagem toda??

normalmente quando ele diz syntax error é do banco, é erro de sintaxe na query.

a query você escreve na linha de cima, ele aponta essa linha porque é ela q tenta executar.

então você teria q corrigir a query q você escreve na variavel strSql. você tentou fazer o q eu passei no post de cima??

Link para o comentário
Compartilhar em outros sites

  • 0

hum, foi mal eu não tinha visto o Compile Error. isso significa q o erro é na hora de compilar, eu tava achando q era em tempo de execucao.

nesse caso, o erro é na linha do open mesmo.

a linha não fica em vermelho mesmo antes de você tenta compilar?? isso significa q tem erro de sintaxe mesmo.

a não ser q você tenha desabilitado a opcao, se você tentar editar essa linha e ela continua com o erro de sintaxe, ele vai dar uma mensagem quando você tirar o foco dela, q explica exatamente qual é o erro.

mas imagino q seja por conta dos partenteses. faca assim ó:

RecSet.Open StrSql, DBConnect, adOpenFowardOnly, adLockReadOnly

é frescura do visual basic, mas você tem q passar os parametros sem parenteses, a não ser q você va retornar valor em outra variavel.

se continuar erro de sintaxe, posta aqui a mensagm q aparece quando você edita essa linha e depois tira o foco dela.

Link para o comentário
Compartilhar em outros sites

  • 0

aqui está tda a babunça.. hehehe

Private Sub Form_Load()

Set DBConnect = New ADODB.Connection

Set RecSet = New Recordset

DBConnect.Open "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=teste; User=root;Password=teste;Option=3;"

StrSql = "select NOME_CLI, CPF_CNPJ_CLI, CIDADE_CLI, UF_CLI, PESSOA_CLI, EMAIL_CLI from cliente where CODIGO_CLI = " & txtCodigo.Text & " "

RecSet.Open StrSql, DBConnect, adOpenFowardOnly, adLockReadOnly

End Sub

quando executo, dá o seguinte erro:

"Run-time error '-2147217900(80040e14)':

[MySQL][ODBC 3.51 Driver][mysql-5.0.67-community-nt]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to user near " at line 1"

to pensando em desistir de vb... vo tentá convence o chefe a usá .net q é muito melhor :(

minha sql tá certinha pombas...

axo que é complô do vb 6.. só porque eu prefiro o .net.. aiuhauihuahuia

Link para o comentário
Compartilhar em outros sites

  • 0

Primeiro uma pergunta, neste Txtcodigo já possui um numero ? pois você está colocando o codigo no evento Form_Load, ou seja, será que quando ocorre o Load do Form o TxtCodigo não está EM BRANCO ? o que pode estar gerando o erro devido a busca de dados iguais ao campo codigo = BRANCO ? entendeu ?

Outra Pergunta hehehe: Em seu select você não colocou o campo código antes do from só após o Where, isto também gera erro, certo ?

Caso não seja isto ...

Quer fazer um teste ?...vamos lá

'No General Declarations 

Dim DBConnect As New ADODB.Connection
Dim RecSet As New Recordset
Dim Cmd as New ADODB.Command
Dim StrSql As String
Dim i As Integer

Private Sub Form_Load()
    
    DBConnect.Open "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=teste; User=teste;Password=teste;Option=3;"
With cmd
    .ActiveConnection = DBConnect
    .CommandType = adCmdText
    .CommandText = "select CODIGO_CLI, NOME_CLI, CPF_CNPJ_CLI, CIDADE_CLI, UF_CLI, PESSOA_CLI, EMAIL_CLI from cliente where CODIGO_CLI  =" & txtCodigo.Text & ""
    Set RecSet = .Execute
End With
    
End Sub

Link para o comentário
Compartilhar em outros sites

  • 0
"Run-time error '-2147217900(80040e14)':

[MySQL][ODBC 3.51 Driver][mysql-5.0.67-community-nt]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to user near " at line 1"

a agora sim é erro na query. da uma olhada nas dica do macedo.

acho q é aquilo mesmo q ele falou, o txtcodigo ta preenchdio com alguma coisa?? você ta chamando a query no form load. tem alguma coisa escrita no txtcodigo??

to pensando em desistir de vb... vo tentá convence o chefe a usá .net q é muito melhor :(

é muito melhor sim, mas o visual basic 6 é muito mais facil.

Link para o comentário
Compartilhar em outros sites

  • 0

bom.. dei uma ajeitada melhor no código, tava vendo q eu estava meio anormal.. hehehe

Dim DBConnect As New ADODB.Connection
Dim RecSet As New Recordset
Dim Cmd As New ADODB.Command

Private Sub Command1_Click()
    
    DBConnect.Open "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=teste; User=root;Password=teste;Option=3;"
    
    With Cmd
        .ActiveConnection = DBConnect
        .CommandType = adCmdText
        .CommandText = "select NOME_CLI, CPF_CNPJ_CLI, CIDADE_CLI, UF_CLI, PESSOA_CLI, EMAIL_CLI from cliente where CODIGO_CLI = " & txtCodigo.Text & " "
        Set RecSet = .Execute
    End With
        
    txtNome.Text = Cmd.Parameters("NOME_CLI")
    txtCPFCNPJ.Text = Cmd.Parameters("CPF_CNPJ_CLI")
    txtCidade.Text = Cmd.Parameters("CIDADE_CLI")
    txtUF.Text = Cmd.Parameters("UF_CLI")
    txtPessoa.Text = Cmd.Parameters("PESSOA_CLI")
    txtEmail.Text = Cmd.Parameters("EMAIL_CLI")
        
End Sub

está rodando beleza.. unica coisa que não está fazendo é trazendo os valores para os textbox, mas isso eu creio q conseguirei outra hora, e se não conseguir, tenho q criar outro tópico, afinal, eu creio que está resolvido esse.. hehehe

creio q essa é a maneira certa.

obrigado a todos pela ajuda :)

Link para o comentário
Compartilhar em outros sites

  • 0

pra mostrar no textbox tem q ser tipo assim ó:

txtNome.Text = RecSet.Fields("NOME_CLI").Value
onde o 0 é o indice do campo, comecando no 0. ou:
txtNome.Text = RecSet.Fields(0).Value
em todos os exemplos de cima, o .Value é opcional. exemplo, você pode fazer assim:
txtNome.Text = RecSet.Fields("NOME_CLI")
ou tb ainda assim:
txtNome.Text = RecSet("NOME_CLI")
ou:
txtNome.Text = RecSet(0)
mas o jeito q acho melhor pra usar, já q é o mais curto (e como acho melhor tb passar o nome em vez do indice, pois se depois você adiciona mais um campo no select e a ordem muda, vai dar mo trampo pra mudar o indice. alem de q com o nome você já sabe q campo q é, com o indice você pode não lembrar):
txtNome.Text = RecSet!NOME_CLI

Editado por kuroi
Link para o comentário
Compartilhar em outros sites

  • 0

fiz dessa maneira

With RecSet
        txtNome.Text = .Fields("NOME_CLI")
        txtCPFCNPJ.Text = .Fields("CPF_CNPJ_CLI")
        txtCidade.Text = .Fields("CIDADE_CLI")
        txtUF.Text = .Fields("UF_CLI")
        txtPessoa.Text = .Fields("PESSOA_CLI")
        txtEmail.Text = .Fields("EMAIL_CLI")
End With

e não puxa...

(vocês devem estar me axando o rei dos noobs.. heheheh)

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia

a tabela não está vazia, tem 2 registros na tabela.... e o código está dessa maneira:

Dim DBConnect As New ADODB.Connection
Dim RecSet As New Recordset
Dim Cmd As New ADODB.Command

Private Sub Command1_Click()
    
    DBConnect.Open "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=teste; User=root;Password=teste;Option=3;"
    
    With Cmd
        .ActiveConnection = DBConnect
        .CommandType = adCmdText
        .CommandText = "select NOME_CLI, CPF_CNPJ_CLI, CIDADE_CLI, UF_CLI, PESSOA_CLI, EMAIL_CLI from cliente where CODIGO_CLI = " & txtCodigo.Text & " "
        Set RecSet = .Execute
    End With
        
    With RecSet
        txtNome.Text = .Fields("NOME_CLI")
        txtCPFCNPJ.Text = .Fields("CPF_CNPJ_CLI")
        txtCidade.Text = .Fields("CIDADE_CLI")
        txtUF.Text = .Fields("UF_CLI")
        txtPessoa.Text = .Fields("PESSOA_CLI")
        txtEmail.Text = .Fields("EMAIL_CLI")
    End With
        
End Sub

o engraçado é q não dá erro nenhum quando clico no botão... apenas não preenche :(

Editado por geraldozys
Link para o comentário
Compartilhar em outros sites

  • 0
Dim DBConnect As New ADODB.Connection
Dim RecSet As New ADODB.Recordset
Dim Cmd As New ADODB.Command

Private Sub Command1_Click()
    
    DBConnect.Open "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=teste; User=root;Password=teste;Option=3;"
    
    With Cmd
        .ActiveConnection = DBConnect
        .CommandType = adCmdText
        .CommandText = "select NOME_CLI, CPF_CNPJ_CLI, CIDADE_CLI, UF_CLI, PESSOA_CLI, EMAIL_CLI from cliente where CODIGO_CLI = " & txtCodigo.Text & " "
        Set RecSet = .Execute
    End With
        
With RecSet
textnome = !nome_cli
txtCPFCNPJ = !CPF_CNPJ_CLI
txtCidade = !CIDADE_CLI
txtUF = !UF_CLI
txtPessoa = !PESSOA_CLI
txtEmail = !EMAIL_CLI
End With        

End Sub

Editado por Macêdo
Link para o comentário
Compartilhar em outros sites

  • 0

Dim DBConnect As New ADODB.Connection
Dim RecSet As New ADODB.Recordset
Dim Cmd As New ADODB.Command

Private Sub Command1_Click()
    
    DBConnect.Open "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=teste; User=root;Password=_$0ft$ul_;Option=3;"
    
    With Cmd
        .ActiveConnection = DBConnect
        .CommandType = adCmdText
        .CommandText = "select NOME_CLI, CPF_CNPJ_CLI, CIDADE_CLI, UF_CLI, PESSOA_CLI, EMAIL_CLI from cliente where CODIGO_CLI = " & txtCodigo.Text & " "
        Set RecSet = .Execute
    End With
        
    With RecSet
        txtNome = !NOME_CLI
        txtCPFCNPJ = !CPF_CNPJ_CLI
        txtCidade = !CIDADE_CLI
        txtUF = !UF_CLI
        txtPessoa = !PESSOA_CLI
        txtEmail = !EMAIL_CLI
    End With
        
End Sub

continua não indo pra frente :(

Link para o comentário
Compartilhar em outros sites

  • 0

Iaew pessoal beleza?!

Não li todos os post mas percebi que o problema é na hora de conectar no mysql...

bom eu me conecto com mysql normalmente em um de meus sistemas da seguinte maneira:

Criando uma ODBC no "Fontes de dados (ODBC)" utilizando o MySQL ODBC 5.1 Driver e

me conecto com a seguinte QueryString: "DSN=NomeDaODBC;Uid=Usuário;Pwd=Senha;"

Baixe o MySQL Connector 5.1

http://dev.mysql.com/downloads/connector/odbc/5.1.html

Não sei se ajudei, mas eu tambem tive problemas pra me conectar no mysql e está foi a forma mais fácil que encontrei.

Até +!

RecSet.Open StrSql, DBConnect, adOpenFowardOnly, adLockReadOnly
é frescura do visual basic, mas você tem q passar os parametros sem parenteses, a não ser q você va retornar valor em outra variavel. se continuar erro de sintaxe, posta aqui a mensagm q aparece quando você edita essa linha e depois tira o foco dela.
Também é possivel da seguinte maneira:
Call RecSet.Open(StrSql, DBConnect, adOpenFowardOnly, adLockReadOnly)

Editado por Anderson Fernandes
Link para o comentário
Compartilhar em outros sites

  • 0
Public Type tParamentrosConexao
    strDNS As String
    strUser As String
    strPass As String
End Type

Public vParamConn As tParamentrosConexao
Public ConnObjetos As ADODB.Connection

Private Sub Form_Load()
      Dim auxRS As Recordset
      Dim auxSQL As String

      vParamConn.strDNS = "NomeDaODBC"
      vParamConn.strUser = "NomeDeUsuário"
      vParamConn.strPass = "Senha"

     If Conexao(Conn, vParamConn) = True Then
            auxSQL = "SELECT * FROM TABELA WHERE CAMPO1 ='ABCD'"
            Call CloseRS(auxRS)
            Set auxRS = New Recordset
           If OpenRS(auxRS, auxSQL, ConnObjetos) = True Then        
                   if auxRS.recordcount > 0 then
                            msgbox "" & auxRS!Campo1
                   else
                            msgbox "Não Existe nenhum registro!"
                   end if

                   Call CloseRS(auxRS)
           Else
                   MsgBox "Não foi possivel efetuar o select!"
           End If

           Call CloseDatabase(Conn)
End Sub



Public Function Conexao(ByRef DB As Connection, Parametros As tParamentrosConexao) As Boolean
On Error GoTo Err_Conexao

    Dim strAux As String

    If (DB Is Nothing) Then
        Set DB = New ADODB.Connection
    Else
        If DB.State = 1 Then
            DB.Close
        End If
        Set DB = New ADODB.Connection
    End If

    DB.CursorLocation = adUseClient

    strAux = "DSN=" & Parametros.strDNS & ";Uid=" & Parametros.strUser & ";Pwd=" & Parametros.strPass & ";"
    
    DB.Open strAux
            
    If DB.State = 1 Then
        Conexao = True
    Else
        Conexao = False
    End If

    Exit Function
Err_Conexao:
    Conexao = False
    Debug.Print Err.Raise; Err.number, Err.Source, Err.Description
End Function


Public Sub CloseRS(ByRef vRecordSet As Recordset)
    If Not vRecordSet Is Nothing Then
        If vRecordSet.State = 1 Then
            vRecordSet.Close
        End If
        Set vRecordSet = Nothing
    End If
    
End Sub

Public Function OpenRS(ByRef vRecordSet As Recordset, ByVal strSQl As String, Optional ByRef Conection As ADODB.Connection) As Boolean
On Error GoTo TrataErro
    OpenRS = False
    
    If Conection Is Nothing Then
        vRecordSet.Open strSQl, Conn, 1, 3
    Else
        vRecordSet.Open strSQl, Conection, 1, 3
    End If
    OpenRS = True
Exit Function
TrataErro:
    MsgBox Err.Description
    
End Function

Public Sub CloseDatabase(ByRef vConn As ADODB.Connection)
    If Not vConn Is Nothing Then
        If vConn.State = 1 Then
            vConn.Close
        End If
        Set vConn = Nothing
    End If
End Sub


Public Function MyDate(Data As String) As String
On Error Resume Next
    Dim DTAux As Date
    
    DTAux = CDate(Data)
    
    MyDate = Format(DTAux, "yyyy-MM-dd HH:nn:ss")
End Function

Public Function MyValue(value As String) As String
    On Error GoTo TrataErros
    
    MyValue = value
    
    If IsNumeric(value) = False Then
        MyValue = Replace(Val(value), ",", ".")
    Else
        MyValue = Replace(value, ",", ".")
    End If
    
    Exit Function
TrataErros:
    
End Function

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...