Jump to content
Fórum Script Brasil
  • 0

Erro de Sintaxe (Operador Faltando)


Jucla

Question

Pessoal, sou muito......MAS MUITO MESMO.......novato em VB e comecei a seguir uma apostila de VB6 que peguei na internet para criar um programa chamado Bibliotecario (alguém já deve ter ouvido falar dessa apostila).

No entanto, agora que tem a parte de códigos, começou a dar alguns erros. No momento estou precisando resolver um, pra depois testar os outros.

Obs: Em um módulo está declarado - Public cnnBiblio As New ADODB.Connection

A variável vInclusao foi declarada no começo assim - Dim vInclusao As Boolean - em GENERAL - DECLARATIONS

Segue abaixo o erro que está dando e mais abaixo o código.

Desde já agradeço muita a ajuda....

errosq.jpg

CÓDIGO:

________________________________________________________________________________________________________________________

'começa o comando para verificação de existência e inclusão de novo Usuario no campo CodUsuario
'pesquisando se já existe o código cadastrado
Private Sub txtCodUsuario_LostFocus()
'variável que será usada para manipular o Banco de Dados
Dim cnnComando As New ADODB.Command
'variável que recebe os dados do Banco de Dados e Grava no BD de volta
Dim rsSelecao As New ADODB.Recordset
    On Error GoTo errSelecao 'caso ocorra erro vai pra outro comando abaixo
    'Verifica se foi digitado um Código válido
    'Val vai retornar em valores numericos o que foi digitado na txtCodUsuario
    'como não foi digitado nada ele retorna 0, então acontece a MsgBox abaixo
    If Val(txtCodUsuario.Text) = 0 Then
        MsgBox "Não foi digitado um código válido, verifique", _
                vbExclamation + vbOKOnly + vbApplicationModal, "Erro"
        Exit Sub
    End If
    'o comando abaixo transforma o cursor do mouse em ampulheta
    Screen.MousePointer = vbHourglass
    'o command começa a executar operações no BD
    With cnnComando
        'ativa a conexão criada com o BD
        .ActiveConnection = cnnBiblio
        'indica o tipo de dados a ser aberto
        .CommandType = adCmdText
        'Monta o comando SELECT para selecionar o registro na tabela:
        'indica qual o campo a ser trabalhado
        .CommandText = "SELECT * FROM Usuarios WHERE codUsuario = " & _
            txtCodUsuario.Text & ";"
            'declarando que o rsSeleção será executado como declarado acima
        Set rsSelecao = .Execute
   End With
   With rsSelecao
        If .EOF And .BOF Then 'verifica o inicio e final do registro
            'Se o recordset está vazio, não retornou registro com esse código:
            LimparDados
            'Identifica a operação como Inclusão
            vInclusao = True
        Else
            'Senão, atribui aos campos os dados do registro
            txtNomeUsuario.Text = !NomeUsuario
            txtEndereco.Text = !Endereco
            txtCidade.Text = !Cidade
            txtEstado.Text = !Estado
            txtCEP.Text = !CEP
            txtTelefone.Text = Empty & !Telefone
            'Identifica a operação com alteração
            vInclusao = False
            'habilita o botão excluir
            Toolbar1.Buttons(3).Enabled = True
        End If
    End With
    'Desabilita a digitação do campo código
    txtCodUsuario.Enabled = False
    
Saida:
    'Elimina o command e o recordset da memória:
    Set rsSelecao = Nothing
    Set cnnComando = Nothing
    Screen.MousePointer = vbDefault 'volta o ponteiro normal do mouse
    
errSelecao:
    With Err
        If .Number <> 0 Then
            MsgBox "Houve um erro na recuperação do registro solicitado.", _
            vbExclamation + vbOKOnly + vbApplicationModal, "Aviso"
            .Number = 0
            GoTo Saida
        End If
    End With
End Sub
'-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
'============================================SUB ROTINAS=======================================

'----------------------------------------------------INICIO DA SUB ROTINA GRAVAR DADOS------------------------------------------------------------------
Private Sub GravarDados()
Dim cnnComando As New ADODB.Command
Dim vConfMsg As Integer
Dim vErro As Boolean
   On Error GoTo errGravacao[b]---------------Já desabilitei temporariamente esse comando para descobrir onde está erro[/b]
    'Inicializa as variáveis auxiliares
    vConfMsg = vbExclamation + vbOKOnly + vbSystemModal
    vErro = False
    'verifica os dados digitados
    If txtNomeUsuario.Text = Empty Then
        MsgBox "O Campo Nome não foi preenchido.", vConfMsg, "Erro"
        vErro = True
    End If
    If txtEndereco.Text = Empty Then
        MsgBox "O Campo Endereço não foi preenchido.", vConfMsg, "Erro"
        vErro = True
    End If
    If txtCidade.Text = Empty Then
        MsgBox "O Campo Cidade não foi preenchido.", vConfMsg, "Erro"
        vErro = True
    End If
    If txtEstado.Text = Empty Then
        MsgBox "O Campo Estado não foi preenchido.", vConfMsg, "Erro"
        vErro = True
    End If
    If txtCEP.Text = Empty Then
        MsgBox "O Campo CEP não foi preenchido.", vConfMsg, "Erro"
        vErro = True
    End If
    'se ocorreu erro de digitação, sai da Sub sem gravar
    If vErro Then
       Exit Sub
    End If
    Screen.MousePointer = vbHourglass
    With cnnComando
        .ActiveConnection = cnnBiblio
        .CommandType = adCmdText
        'verifica a operação e cria o comando SQL correspondente
        If vInclusao = True Then
            'Inclusão:
               .CommandText = "INSERT INTO Usuarios " & _
                "(CodUsuario, NomeUsuario, Endereco, Cidade, " & _
                "Estado, CEP, Telefone) VALUES ('" & _
                txtCodUsuario.Text & ",'" & _
                txtNomeUsuario.Text & "','" & _
                txtEndereco.Text & "','" & _
                txtCidade.Text & "','" & _
                txtEstado.Text & "','" & _
                txtCEP.Text & "','" & _
                txtTelefone.Text & "');"
        
        Else
            'Alteração:
            .CommandText = "UPDATE Usuarios SET " & _
            "NomeUsuario = '" & txtNomeUsuario.Text & "'," & _
            "Endereco = '," & txtEndereco.Text & "'," & _
            "Cidade = '," & txtCidade.Text & "'," & _
            "Estado = '," & txtEstado.Text & "'," & _
            "CEP = '," & txtCEP.Text & "'," & _
            "Telefone = '," & txtTelefone.Text & "' " & _
            "WHERE CodUsuario = " & txtCodUsuario.Text & ";"
        End If
        .Execute[b]--------------------APARENTEMENTE É AQUI QUE ESTÁ DANDO O ERRO.[/b]
    End With
    MsgBox "Gravação concluída com Sucesso.", _
    vbApplicationModal + vbInformation + vbOKOnly, _
    "Gravação Ok"
    'chama a Sub que limpa o formulário:
    LimparTela
    
Saida:
    Screen.MousePointer = vbDefault
    Set cnnComando = Nothing
    Exit Sub
    
errGravacao:[b]---------------Já desabilitei temporariamente esse comando para descobrir onde está erro[/b]
    With Err
        If .Number <> 0 Then
            MsgBox "Houve um erro durante a gravação dos dados na tabela.", _
                    vbExclamation + vbOKOnly + vbApplicationModal, "Erro"
            .Number = 0
            GoTo Saida
        End If
    End With
End Sub
'--------------------------------------------------------------FIM DA SUB ROTINA GRAVAR DADOS--------------------------------------------------------------

Edited by Jucla
Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

eu vi so uma coisa que me chamou a atenção, talvez seja este o problema... la na parte de inserir as informacoes você colocou assim:

.CommandText = "INSERT INTO Usuarios (CodUsuario, NomeUsuario, Endereco, Cidade, Estado, CEP, Telefone)

VALUES ('" & txtCodUsuario.Text & ",'" & txtNomeUsuario.Text & "','" & txtEndereco.Text & "','" & txtCidade.Text & "','" & _

txtEstado.Text & "','" & txtCEP.Text & "','" & txtTelefone.Text & "');"

'SE TODOS OS CAMPOS FOREM STRING, então FALTOU FEIXAR A ASPAS SIMPLES NO txtCodUsuario.text, se caso ele for numerico, então você colocou uma aspas simples antes deste txt, e por iss esta causando o erro.

e na parte Update também está errado, tem que ficar asim:

'errado:

"Endereco = '," & txtEndereco.Text & "'," & _

'Certo:

"Endereco = '" & txtEndereco.Text & "'," & _

da uma olhada nas suas aspas simples, tem lugar que esta faltando, tem lugar que tem, mas não deveria ter, e as virgulas, como o exemplo acima...

da uma olhada e me fala se deu certo.

Edited by Ferretto
Link to comment
Share on other sites

  • 0

Ferreto, estou olhando o codigo aqui...Realmente acho que o problema está nas aspas....

Tirei aquela que estava antes de codUsuario em VALUES e já não deu o erro e fez a gravação certinha no Banco de Dados....

Por enquanto, muito obrigado, tenho que sair agora (To no trabalho ), mas assim que chegar em casa, volto a mexer no programa e qualquer dúvida posto novamente.

Como eu disse no Título do tópico, sou MUITO, MUITO, MUITO novato nesse negocio de VB.

Muito obrigado mesmo...

OBS: O UPDATE também deu certo com sua dica.......

Agora seguindo ainda no mesmo código, tem uma parte que formata as text.box de acordo com os parâmetros, Primeira Letra sempre maiuscula, mas só acontece essa formatação quando estou inserindo um novo cadastro. Quando estou alterando e digito as letras todas minusculas, elas permanecem assim. Segue o código.

'================================CODIFICAÇÃO DE FORMATAÇÃO DOS CAMPOS==============================
Private Sub txtNomeUsuario_LostFocus()
'Converte a primeira letra de cada palavra digitada em maiúscula,
'e as demais em minúsculas:
    txtNomeUsuario.Text = StrConv(txtNomeUsuario.Text, vbProperCase)
End Sub
Private Sub txtCidade_LostFocus()
txtCidade.Text = StrConv(txtCidade.Text, vbProperCase)
End Sub
Private Sub txtEndereco_LostFocus()
txtEndereco.Text = StrConv(txtEndereco.Text, vbProperCase)
End Sub
Private Sub txtEstado_LostFocus()
'Converte a sigla do Estado digitada em letras maiúsculas:
txtEstado.Text = UCase(txtEstado.Text)
End Sub
Private Sub txtCEP_LostFocus()
'Formata o CEP digitado:
txtCEP.Text = Format(txtCEP.Text, "00000-000")
End Sub
'===============================FIM DA CODIFICAÇÃO DE FORMATAÇÃO DOS CAMPOS==========================

Edited by Jucla
Link to comment
Share on other sites

  • 0
Em 30/03/2012 at 17:48, Jucla disse:

Jucla estou fazendo o mesmo aplicativo para aprender mas a unica diferença é que abri o banco de dados somente no formulário cadastro e já desativei os erros:

 

Private Sub txtCodUsuario_LostFocus()
    Dim cnnComando As New ADODB.Command
    Dim rsSelecao As New ADODB.Recordset
    '   On Error GoTo errSelecao
       'Verifica se foi digitado um código válido:
       If Val(txtCodUsuario.Text) = 0 Then
            MsgBox "Não foi digitado um código válido, verifique.", vbExclamation + vbOKOnly + vbApplicationModal, "Erro"
            Exit Sub
       End If
    Screen.MousePointer = vbHourglass
    With cnnComando
    'abrir o banco para fazer a consulta e a inclusão:
    'cnnbiblio.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};Dbq=D:\Projeto\Visual Basic\Bibliotecario\Biblio.mdb;"
    cnnbiblio.ConnectionString = "Provider=ADsDSOObject;Encrypt Password=False;Data Source=D:\Projeto\Visual Basic\Bibliotecario\Biblio.mdb;"
    cnnbiblio.Open
        .ActiveConnection = cnnbiblio
        .CommandType = adCmdText
        'Monta o comando Select para selecionar o registro na tabela:
        .CommandText = "Select * from Usuarios where CodUsuario=" & txtCodUsuario.Text & ";"
        'Set rsSelecao = .Execute
    End With
    With rsSelecao
        If .EOF And .BOF Then
            'Se o recordset esta vazio, não retornou registro com esse código:
            LimparDados
            'Identifica a operação como inclusão:
            vInclusao = True
        Else
            'Senão, atribui aos campos os dados do registro:
            txtNomeUsuario.Text = !NomeUsuario
            txtEndereco.Text = !Endereco
            txtCidade.Text = !Cidade
            txtEstado.Text = !Estado
            txtCEP.Text = !CEP
            txtTelefone = Empty & !Telefone
            'Identifica a operação como Alteração:
            vInclusao = True
            'Habilita o botão Excluir:
            Toolbar1.Buttons(3).Enabled = True
        End If
    End With
    'Desabilita a digitação do campo código:
    txtCodUsuario.Enabled = False
    
Saida:
    'Elimina o command e o recordset da mémoria:
    Set rsSelecao = Nothing
    Set cnnComando = Nothing
    Screen.MousePointer = vbDefault
    Exit Sub
    
'errSelecao:
 '   With Err
  '      If .Number <> 0 Then
            'MsgBox "Houve um  erro na recuperação do registro solicitado.", vbExclamation + vbOKOnly + vbApplicationModal, "Aviso"
            'ver o erro ao digitar o código do usuário
   '         MsgBox "Houve um  erro na recuperação do registro solicitado." & .Description, vbExclamation + vbOKOnly + vbApplicationModal, "Erro"
    '        .Number = 0
     '       GoTo Saida
     '   End If
    'End With
End Sub

 

Erro>:Run  timer error'3704', quando debugo a linha 

If .EOF And .BOF Then esta amarela informando que o .BOF =<Operação não permitida quando o objeto está fechado.>

 

Como resolver ?

 

Link to comment
Share on other sites

  • 0

Consegui fazer a inclusão alterando algumas coisas mas agora aparece a mensagem que houve erro e na descrição:object required , segue o que foi feito:

 

Private Sub txtCodUsuario_LostFocus()
'variável que será usada para manipular o Banco de Dados
    Dim cnnComando As New ADODB.Command
    'variável que recebe os dados do Banco de Dados e Grava no BD de volta
    Dim rsSelecao As New ADODB.Recordset
      On Error GoTo errSelecao 'caso ocorra erro vai pra outro comando abaixo
       'Verifica se foi digitado um código válido:
       'Val vai retornar em valores numericos o que foi digitado na txtCodUsuario
    'como não foi digitado nada ele retorna 0, então acontece a MsgBox abaixo
       If Val(txtCodUsuario.Text) = 0 Then
            MsgBox "Não foi digitado um código válido, verifique.", vbExclamation + vbOKOnly + vbApplicationModal, "Erro"
            Exit Sub
       End If
        'o comando abaixo transforma o cursor do mouse em ampulheta
    Screen.MousePointer = vbHourglass
     'o command começa a executar operações no BD
    With cnnComando
    'ativa a conexão criada com o BD
        .ActiveConnection = cnnbiblio
         'indica o tipo de dados a ser aberto
        .CommandType = adCmdText
        'Monta o comando Select para selecionar o registro na tabela:
        'indica qual o campo a ser trabalhado
        .CommandText = "Select * from Usuarios where CodUsuario=" & txtCodUsuario.Text & ";"
        'declarando que o rsSeleção será executado como declarado acima
        Set rsSelecao = .Execute
    End With
    With rsSelecao
        If .EOF And .BOF Then
            'Se o recordset esta vazio, não retornou registro com esse código:
            LimparDados
            'Identifica a operação como inclusão:
            vInclusao = True
        Else
            'Senão, atribui aos campos os dados do registro:
            txtNomeUsuario.Text = !NomeUsuario
            txtEndereco.Text = !Endereco
            txtCidade.Text = !Cidade
            txtEstado.Text = !Estado
            txtCEP.Text = !CEP
            txtTelefone = Empty & !Telefone
            'Identifica a operação como Alteração:
            vInclusao = True
            'Habilita o botão Excluir:
            Toolbar1.Buttons(3).Enabled = True
        End If
    End With
    'Desabilita a digitação do campo código:
    txtCodUsuario.Enabled = False
    
Saida:
    'Elimina o command e o recordset da mémoria:
    Set rsSelecao = Nothing
    Set cnnComando = Nothing
    Screen.MousePointer = vbDefault
    Exit Sub
    
errSelecao:
    With Err
        If .Number <> 0 Then
            MsgBox "Houve um  erro na recuperação do registro solicitado.", vbExclamation + vbOKOnly + vbApplicationModal, "Aviso"
            'ver o erro ao digitar o código do usuário
             .Number = 0
            GoTo Saida
        End If
    End With
End Sub

 

GravarDados

 

Private Sub GravarDados()
Dim cnnComando As New ADODB.Command
Dim vConfMsg As Integer
Dim vError As Boolean
    On Error GoTo errGravacao
    'Inicializa as variáveis auxiliares:
    vConfMsg = vbExclamation + vbOKOnly + vbSystemModal
    vErro = False
    'Verifica os dados digitados:
    If txtNomeUsuario.Text = Empty Then
    MsgBox "O nome não foi preenchido.", vConfMsg, "Erro"
    vErro = True
    End If
    If txtEndereco.Text = Empty Then
    MsgBox "O endereco não foi preenchido.", vConfMsg, "Erro"
    vErro = True
    End If
    If txtCidade.Text = Empty Then
    MsgBox "A cidade não foi preenchido.", vConfMsg, "Erro"
    vErro = True
    End If
    If txtEstado.Text = Empty Then
    MsgBox "O estado não foi preenchido.", vConfMsg, "Erro"
    vErro = True
    End If
    If txtCEP.Text = Empty Then
    MsgBox "O cep não foi preenchido.", vConfMsg, "Erro"
    vErro = True
    End If
    'Se aconteceu um erro de digitação, sai da sub sem gravar:
    If vErro Then Exit Sub
    Screen.MousePointer = vbHourglass
    With cnnComando
        .ActiveConnection = cnnbiblio
        .CommandType = adCmdText
        'Verifica a operação e cria o comando SQL correspondente:
        If vInclusao Then
        'Inclusão:
        .CommandText = "insert into Usuarios" & "(CodUsuario,NomeUsuario,Endereco,Cidade," & "Estado,CEP,Telefone)values ( " & txtCodUsuario.Text & ",'" & txtNomeUsuario.Text & "','" & txtEndereco.Text & "','" & txtCidade.Text & "','" & txtEstado.Text & "','" & txtCEP.Text & "','" & txtTelefone.Text & "');"
        Else
        'Alteração:
        .CommandText = "update Usuarios set " & "NomeUsuario = '" & txtNomeUsuario.Text & "'," & "Endereco = '" & txtEndereco.Text & "'," & "Cidade = '," & txtCidade.Text & "'," & "Estado = '," & txtEstado.Text & "'," & "CEP = '," & txtCEP.Text & "'," & "Telefone = '," & txtTelefone.Text & "' " & "where CodUsuario = " & txtCodUsuario.Text & ";"
        End If
        .Execute
        End With
        MsgBox "Gravaçao concluída com sucesso.", vbApplicationModal + vbInformation + vbOKOnly, "Gravação OK"
        'Chama a sub que limpa os dados do formulário:
        LimparTela
Saida:
        Screen.MousePointer = vbDefault
        Set cnnComando = Nothing
        Exit Sub
errGravacao:
       With Err
        If .Number <> 0 Then
        MsgBox "Houve um erro durante a gravação dos dados na tabela." & .Description, vbExclamation + vbOKOnly + vbApplicationModal, "Erro"
            'MsgBox "Houve um erro durante a gravação dos dados na tabela.", vbExclamation + vbOKOnly + vbApplicationModal, "Erro"
            .Number = 0
            GoTo Saida
        End If
        End With
End Sub

Link to comment
Share on other sites

  • 0

Consegui incluir e excluir agora esta dando erro quando tento alterar, segue o código:

 

Houve um erro durante a gravação dos dados na tabela.[Microsoft][Driver ]

Private Sub GravarDados()
Dim cnnComando As New ADODB.Command
Dim vConfMsg As Integer
Dim vError As Boolean
    'On Error GoTo errGravacao
    'Inicializa as variáveis auxiliares:
    vConfMsg = vbExclamation + vbOKOnly + vbSystemModal
    vErro = False
    'Verifica os dados digitados:
    If txtNomeUsuario.Text = Empty Then
    MsgBox "O nome não foi preenchido.", vConfMsg, "Erro"
    vErro = True
    End If
    If txtEndereco.Text = Empty Then
    MsgBox "O endereco não foi preenchido.", vConfMsg, "Erro"
    vErro = True
    End If
    If txtCidade.Text = Empty Then
    MsgBox "A cidade não foi preenchido.", vConfMsg, "Erro"
    vErro = True
    End If
    If txtEstado.Text = Empty Then
    MsgBox "O estado não foi preenchido.", vConfMsg, "Erro"
    vErro = True
    End If
    If txtCEP.Text = Empty Then
    MsgBox "O cep não foi preenchido.", vConfMsg, "Erro"
    vErro = True
    End If
    'Se aconteceu um erro de digitação, sai da sub sem gravar:
    If vErro Then Exit Sub
    Screen.MousePointer = vbHourglass
    With cnnComando
        .ActiveConnection = cnnbiblio
        .CommandType = adCmdText
        'Verifica a operação e cria o comando SQL correspondente:
        If vInclusao Then
        'Inclusão:
        .CommandText = "insert into Usuarios" & "(CodUsuario,NomeUsuario,Endereco,Cidade," & "Estado,CEP,Telefone)values ( " & txtCodUsuario.Text & ",'" & txtNomeUsuario.Text & "','" & txtEndereco.Text & "','" & txtCidade.Text & "','" & txtEstado.Text & "','" & txtCEP.Text & "','" & txtTelefone.Text & "');"
        Else
        'Alteração:
        .CommandText = "update Usuarios set " & "NomeUsuario = '" & txtNomeUsuario.Text & "'," & "Endereco = '" & txtEndereco.Text & "'," & "Cidade = '," & txtCidade.Text & "'," & "Estado = '," & txtEstado.Text & "'," & "CEP = '," & txtCEP.Text & "'," & "Telefone = '," & txtTelefone.Text & "' " & "where CodUsuario = " & txtCodUsuario.Text & ";"
        End If
        .Execute
        End With
        MsgBox "Gravaçao concluída com sucesso.", vbApplicationModal + vbInformation + vbOKOnly, "Gravação OK"
        'Chama a sub que limpa os dados do formulário:
        'LimparTela-> apostila vb
        LimparDados
Saida:
        Screen.MousePointer = vbDefault
        Set cnnComando = Nothing
        Exit Sub
'errGravacao:
'''      With Err
    '    If .Number <> 0 Then
     '   MsgBox "Houve um erro durante a gravação dos dados na tabela." & .Description, vbExclamation + vbOKOnly + vbApplicationModal, "Erro"
            'MsgBox "Houve um erro durante a gravação dos dados na tabela.", vbExclamation + vbOKOnly + vbApplicationModal, "Erro"
      '      .Number = 0
       '     GoTo Saida
        'End If
        'End With
End Sub 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...