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

O Que Deu Errado Programa?


Girréis

Pergunta

Boa noite, amigos!

Acabei de me cadastrar neste site, para tirar dúvidas sobre a linguagem Visual Basic 6.0, e espero aprender o mais breve possível!

Baixei na internet um arquivo em pdf que ensina os principais comando no VB 6.0, e ainda por cima tem um projeto que explica com detalhes, mas acredito que ainda falta alguns "detalhes" e estou quebrando a cabeça para resolver!

Mandarei um arquivo zipado para que vocês possam me explicar o erro.

- existe um ícone ao abrir o programa Bibliotecário, Cadastro de Livros, ao incluir algum dado pelo programa ele dá erro, e não sei se é o SQL ou alguma variável que não está retornando, pois no banco de dados, em access, certos campos são números e então essas variáveis também "transformei" em número(testei Long, Integer ) e nada, dá erro ao gravar no banco de dados.

- segue o código para análise, pois o que está destacado em vermelho não está gravando no banco de dados.

Grato à todos,

Girreis

ps:. desculpe pelo post, não sei como colocar um arquivo zipado!

Option Explicit
Dim vInclusao As Boolean
Dim vCodEditora, vCodCategoria As Long
Dim vCod As Long
Dim vAcompCD, vAcompDisquete As Boolean
Dim vIdioma As Byte

Private Sub cboCategoria_Click()

    With cboCategoria
        'Verifica se foi selecionado um item da combo:
        If .ListIndex <> -1 Then
            'Se foi, atribui à variável vCodEditora o conteúdo da
            'propriedade ItemData:
            vCodCategoria = .ItemData(.ListIndex)
        Else
            'Senão, zera a variável:
            vCodCategoria = 0
        End If
    End With
    
End Sub

Private Sub cboEditora_Click()

    With cboEditora
        'Verifica se foi selecionado um item da combo:
        If .ListIndex <> -1 Then
            'Se foi, atribui à variável vCodEditora o conteúdo da
            'propriedade ItemData:
            vCodEditora = .ItemData(.ListIndex)
        Else
            'Senão, zera a variável:
            vCodEditora = 0
        End If
    End With
    
End Sub

Private Sub chkAcompCD_Click()

    'Verifica se chkAcompCD está ou não marcada, e atribui a vAcompCD o valor
    'correspondente:
    If chkAcompCD.Value = vbChecked Then
        vAcompCD = True
    Else
        vAcompCD = False
    End If
    
End Sub

Private Sub chkAcompDisquete_Click()

    'Verifica se chkAcompCD está ou não marcada, e atribui a vAcompCD o valor
    'correspondente:
    If chkAcompDisquete.Value = vbChecked Then
        vAcompDisquete = True
    Else
        vAcompDisquete = False
    End If
    
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)

    'se a tecla Enter foi pressionada, passa o foco para o próximo controle na
    'sequência de TabIndex:
    If KeyAscii = vbKeyReturn Then
        SendKeys "{Tab}"
        KeyAscii = 0
    End If
    
End Sub

Private Sub Form_Load()

    'centraliza o formulário na área de trabalho do MDI:
    Me.Left = (frmBiblio.ScaleWidth - Me.Width) / 2
    Me.Top = (frmBiblio.ScaleHeight - Me.Height) / 2
    vCodEditora = 0
    vCodCategoria = 0
    vAcompCD = False
    vAcompDisquete = False
    vIdioma = 0
    
    'Chama a procedure ComboEditoras e passa a combo cboEditora como
    'parâmetro:
    'aqui está o problema!!!!
    ComboEditoras cboEditora
    'O mesmo para cboCategorias:
    ComboCategorias cboCategoria
    'Garante que nenhum item esteja selecionado nas combos:
    cboEditora.ListIndex = -1
    cboCategoria.ListIndex = -1
    
End Sub

Private Sub optIdioma_Click(Index As Integer)

    'Atribui à variável vIdioma o valor do parâmetro index, pois esse contém o
    'índice do botão que foi clicado: 0 = Português, 1 = Inglês e 2 = Outros:
    vIdioma = Index

End Sub

Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)

    Select Case Button.Index
        Case 1
            GravarDados
        Case 2
            LimparTela
        Case 3
            ExcluirRegistro
        Case 4
            Unload Me
    End Select
    
End Sub

Private Sub txtCodLivro_LostFocus()
Dim cnnComando As New ADODB.Command
Dim rsSelecao As New ADODB.Recordset
'Dim vCod As Long
Dim i As Integer
    On Error GoTo errSelecao
    'Converte o código digitado para pesquisa:
    vCod = Val(txtCodLivro.Text)
    'Se não foi digitado um código válido, sai da sub:
    If vCod = 0 Then Exit Sub
    Screen.MousePointer = vbHourglass
    'Tenta selecionar o registro na tabela de livros:
    With cnnComando
        .ActiveConnection = cnnBiblio
        .CommandType = adCmdText
        .CommandText = "SELECT * FROM Livros WHERE CodLivro = " & vCod & ";"
        Set rsSelecao = .Execute
    End With
    With rsSelecao
        If .EOF And .BOF Then
            'Se o recordset está vazio, não encontrou registro com esse código:
            LimparDados
            'Identifica a operacao como inclusão:
            vInclusao = True
        Else
            'Senão, atribui aos campos e variáveis auxiliares os dados do
            'registro:
            txtTitulo.Text = !Titulo
            txtAutor.Text = !Autor
            vCodEditora = !CodEditora
            vCodCategoria = !CodCategoria
            vAcompCD = !AcompCD
            vAcompDisquete = !AcompDisquete
            vIdioma = !Idioma
            'Como Observacoes não é um campo obrigatório, devemos impedir a
            'atribuição do valor nulo (se houver) à caixa de texto:
            txtObservacoes = Empty & !Observacoes
            'Exibe os dados das variáveis nos controles correspondentes:
            With cboEditora
                'Elimina a seleção atual:
                .ListIndex = -1
                'Como ListCount retorna o número de itens da combo,
                'ListCount - 1 é igual ao índice do último item. Portanto, o
                'loop abaixo será executado para todos os itens da combo
                'através de seu índice:
                For i = 0 To (.ListCount - 1)
                    If vCodEditora = .ItemData(i) Then
                        'Se ItemData for igual ao código atual,
                        'seleciona o item e sai do loop:
                        .ListIndex = i
                        Exit For
                    End If
                Next i
            End With
        With cboCategoria
            .ListIndex = -1
            For i = 0 To (.ListCount - 1)
                If vCodCategoria = .ItemData(i) Then
                    .ListIndex = i
                    Exit For
                End If
            Next i
        End With
        'Se vAcompCD = True, marca chkAcompCD, senão desmarca:
        chkAcompCD.Value = IIf(vAcompCD, vbChecked, vbUnchecked)
        chkAcompDisquete.Value = IIf(vAcompDisquete, vbChecked, vbUnchecked)
        'Marca o botão de opção correspondente ao idioma atual:
        optIdioma(vIdioma).Value = True
        'Habilita o botão Excluir:
        Toolbar1.Buttons(3).Enabled = True
        'Identifica a operação como Alteração:
        vInclusao = False
        End If
    End With
    'Desabilita a digitação do código:
    txtCodLivro.Enabled = False

Saida:
    'Elimina o command e o recordset da memória:
    Set rsSelecao = Nothing
    Set cnnComando = Nothing
    Screen.MousePointer = vbDefault
    Exit Sub
    
errSelecao:
    With Err
        If .Number <> 0 Then
            MsgBox "Erro na recuperação do registro solicitado:", _
                    vbExclamation + vbOKOnly + vbApplicationModal, "Aviso"
            .Number = 0
            GoTo Saida
        End If
    End With
    
End Sub
Private Sub LimparDados()

    'Apaga o conteúdo dos campos do formulário:
    txtTitulo.Text = Empty
    txtAutor.Text = Empty
    txtObservacoes.Text = Empty
    'Elimina a seleção das combos:
    cboEditora.ListIndex = -1
    cboCategoria.ListIndex = -1
    'Desmarca as caixas de verificação:
    chkAcompCD.Value = vbUnchecked
    chkAcompDisquete.Value = vbUnchecked
    'Marca a opção Português em optIdioma:
    optIdioma(0).Value = True
    'Reinicializa as variáveis auxiliares:
    vCodEditora = 0
    vCodCategoria = 0
    vAcompCD = False
    vAcompDisquete = False
    vIdioma = 0
    
End Sub
[color="#FF0000"] ****** aqui que deu errado!!!!! *******
Private Sub GravarDados()
Dim cnnComando As New ADODB.Command
Dim vSQL As String
Dim vCod As Long
Dim vConfMsg As Integer
Dim vErro As Boolean
    On Error GoTo errGravacao
    'Converte o código digitado para gravação:
    vCod = Val(txtCodLivro.Text)
    'Verifica os dados digitados:
    vConfMsg = vbExclamation + vbOKOnly + vbApplicationModal
    vErro = False
    If vCod = 0 Then
        MsgBox "O campo Código não foi preenchido.", vConfMsg, "Erro"
        vErro = True
    End If
    If txtTitulo.Text = Empty Then
        MsgBox "O campo Título não foi preenchido.", vConfMsg, "Erro"
        vErro = True
    End If
    If txtAutor.Text = Empty Then
        MsgBox "O campo Autor não foi preenchido.", vConfMsg, "Erro"
        vErro = True
    End If
    If vCodEditora = 0 Then
        MsgBox "Não foi selecionada uma Editora.", vConfMsg, "Erro"
        vErro = True
    End If
    If vCodCategoria = 0 Then
        MsgBox "Não foi selecionada uma Categoria.", 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
    'Constrói o comando SQL para gravação:
    If vInclusao Then
        'Se é uma inclusão:
        vSQL = "INSERT INTO Livros " & _
            "(CodLivro, Titulo, Autor, CodEditora, " & _
            "CodCategoria, AcompCD, AcompDisquete, Idioma, Observacoes) VALUES (" & _
            vCod & ",'" & _
            txtTitulo.Text & "','" & _
            txtAutor.Text & "','" & _
            vCodEditora & "','" & _
            vCodCategoria & "','" & _
            vAcompCD & "','" & _
            vAcompDisquete & "','" & _
            vIdioma & "','" & _
            txtObservacoes.Text & "');"
        
    Else
        'Senão, alteração:
        vSQL = "UPDATE Livros SET Titulo = '" & txtTitulo.Text & _
            "', Autor = '" & txtAutor.Text & _
            "', CodEditora = " & vCodEditora & _
            ", CodCategoria = " & vCodCategoria & _
            ", AcompCD = " & vAcompCD & _
            ", AcompDisquete = " & vAcompDisquete & _
            ", Idioma = " & vIdioma & _
            ", Observacoes = '" & txtObservacoes.Text & _
            "' WHERE CodLivro = " & vCod & ";"
    End If
    'Executa o comando de gravação:
    With cnnComando
        .ActiveConnection = cnnBiblio
        .CommandType = adCmdText
        .CommandText = vSQL
        .Execute
    End With
    MsgBox "Gravação 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 "Erro durante a gravação dos dados no registro." & vbCrLf & _
                "A operação não foi completada.", _
                vbExclamation + vbOKOnly + vbApplicationModal, _
                "Operação cancelada"
            .Number = 0
            GoTo Saida
        End If
    End With
    
End Sub
[/color]
Private Sub txtAutor_LostFocus()

    'Converte a primeira letra de cada palavra digitada em maiúscula,
    'e as demais em minúsculas:
    txtAutor.Text = StrConv(txtAutor.Text, vbProperCase)
    
End Sub
Private Sub txtTitulo_LostFocus()
    
    txtTitulo.Text = StrConv(txtTitulo.Text, vbProperCase)
    
End Sub
Private Sub ExcluirRegistro()
Dim cnnComando As New ADODB.Command
Dim vOk As Integer
Dim vCod As Long
    On Error GoTo errExclusao
    'Solicita confirmação da exclusão do registro:
    vOk = MsgBox("Confirma a exclusão desse registro?", _
        vbApplicationModal + vbDefaultButton2 + vbQuestion + vbYesNo, _
        "Exclusão")
    If vOk = vbYes Then
        Screen.MousePointer = vbHourglass
        'Se confirmou, converte o código digitado:
        vCod = Val(txtCodLivro.Text)
        'Executa a operação:
        With cnnComando
            .ActiveConnection = cnnBiblio
            .CommandType = adCmdText
            .CommandText = "DELETE FROM Livros WHERE CodLivro = " & vCod & ";"
            .Execute
        End With
        MsgBox "Registro excluído com sucesso.", _
                vbApplicationModal + vbInformation + vbOKOnly, _
                "Exclusão OK"
        LimparTela
    End If
    
Saida:
    Screen.MousePointer = vbDefault
    Set cnnComando = Nothing
    Exit Sub
    
errExclusao:
    With Err
        If .Number <> 0 Then
            MsgBox "Erro durante a exclusão do registro." & vbCrLf & _
                    "A operação não foi completada.", _
                    vbExclamation + vbOKOnly + vbApplicationModal, _
                    "Operação cancelada"
            .Number = 0
            GoTo Saida
        End If
    End With
    
End Sub
Private Sub LimparTela()

    LimparDados
    Toolbar1.Buttons(3).Enabled = False
    txtCodLivro.Text = Empty
    txtCodLivro.Enabled = True
    txtCodLivro.SetFocus
    
End Sub

Link para o comentário
Compartilhar em outros sites

22 respostass a esta questão

Posts Recomendados

  • 0
Retire a linha...

On Error GoTo errGravacao

... depois veja realmente em qual linha ocorre o erro e qual é ele. Aí fale pra gente.

Abraços,

Graymalkin

Boa noite, Graymalkin

não entendi este erro:

Run-time error '-2147217913(80040e07)':

Tipo de dados imcompatível na expressão de critério.

grato,

Girréis

Link para o comentário
Compartilhar em outros sites

  • 0
veja realmente em qual linha ocorre o erro e qual é ele. Aí fale pra gente.

qual a linha??

mas olhando aqui, parece que o campo CodLivro da sua tabela é do tipo texto e você esta fazendo a query como se fosse numero, veja ai

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

  • 0
veja realmente em qual linha ocorre o erro e qual é ele. Aí fale pra gente.

qual a linha??

mas olhando aqui, parece que o campo CodLivro da sua tabela é do tipo texto e você esta fazendo a query como se fosse numero, veja ai

Boa noite, Kuroi

a linha em destaque que deu erro foi:

'Executa o comando de gravação:

With cnnComando

.ActiveConnection = cnnBiblio

.CommandType = adCmdText

.CommandText = vSQL

.Execute

End With

Grato,

Girréis

veja realmente em qual linha ocorre o erro e qual é ele. Aí fale pra gente.

qual a linha??

mas olhando aqui, parece que o campo CodLivro da sua tabela é do tipo texto e você esta fazendo a query como se fosse numero, veja ai

Boa noite, Kuroi

a linha em destaque que deu erro foi:

'Executa o comando de gravação:

With cnnComando

.ActiveConnection = cnnBiblio

.CommandType = adCmdText

.CommandText = vSQL

.Execute

End With

Grato,

Girréis

ps:

mais precisamente no .Execute

Link para o comentário
Compartilhar em outros sites

  • 0

o problema deve estar aqui:

If vInclusao Then
        'Se é uma inclusão:
        vSQL = "INSERT INTO Livros " & _
            "(CodLivro, Titulo, Autor, CodEditora, " & _
            "CodCategoria, AcompCD, AcompDisquete, Idioma, Observacoes) VALUES (" & _
            vCod & ",'" & _
            txtTitulo.Text & "','" & _
            txtAutor.Text & "','" & _
            vCodEditora & "','" & _
            vCodCategoria & "','" & _
            vAcompCD & "','" & _
            vAcompDisquete & "','" & _
            vIdioma & "','" & _
            txtObservacoes.Text & "');"
        
    Else
        'Senão, alteração:
        vSQL = "UPDATE Livros SET Titulo = '" & txtTitulo.Text & _
            "', Autor = '" & txtAutor.Text & _
            "', CodEditora = " & vCodEditora & _
            ", CodCategoria = " & vCodCategoria & _
            ", AcompCD = " & vAcompCD & _
            ", AcompDisquete = " & vAcompDisquete & _
            ", Idioma = " & vIdioma & _
            ", Observacoes = '" & txtObservacoes.Text & _
            "' WHERE CodLivro = " & vCod & ";"
    End If[/code]

veja que no insert você coloca todos os campos entre aspas, agora no update varios deles estao sem aspas. de uma olhada no banco, os campos que forem numericos tem que ir sem aspas. os campos textos devem ir com aspas, beleza??

Link para o comentário
Compartilhar em outros sites

  • 0
o problema deve estar aqui:

If vInclusao Then
        'Se é uma inclusão:
        vSQL = "INSERT INTO Livros " & _
            "(CodLivro, Titulo, Autor, CodEditora, " & _
            "CodCategoria, AcompCD, AcompDisquete, Idioma, Observacoes) VALUES (" & _
            vCod & ",'" & _
            txtTitulo.Text & "','" & _
            txtAutor.Text & "','" & _
            vCodEditora & "','" & _
            vCodCategoria & "','" & _
            vAcompCD & "','" & _
            vAcompDisquete & "','" & _
            vIdioma & "','" & _
            txtObservacoes.Text & "');"
        
    Else
        'Senão, alteração:
        vSQL = "UPDATE Livros SET Titulo = '" & txtTitulo.Text & _
            "', Autor = '" & txtAutor.Text & _
            "', CodEditora = " & vCodEditora & _
            ", CodCategoria = " & vCodCategoria & _
            ", AcompCD = " & vAcompCD & _
            ", AcompDisquete = " & vAcompDisquete & _
            ", Idioma = " & vIdioma & _
            ", Observacoes = '" & txtObservacoes.Text & _
            "' WHERE CodLivro = " & vCod & ";"
    End If

veja que no insert você coloca todos os campos entre aspas, agora no update varios deles estao sem aspas. de uma olhada no banco, os campos que forem numericos tem que ir sem aspas. os campos textos devem ir com aspas, beleza??

Kuroi,

já fiz isso hj de manhã lá no trabalho e não deu certo, usei os comandos do SQL manualmente e deu certo, mas agora achei um post que fala deste problema, mas diz respeito ao checkbox, pois no banco de dados em access o formato do campo AcompCD e AcompDisquete está como sim/não, mas no VB está como True/False, como contornar isso?

grato,

Girréis

Link para o comentário
Compartilhar em outros sites

  • 0

se o campo esta como Sim/Não você pode escrever a query com True para Sim e False para Não, assim como também pode ser 1 para Sim e 0 para Não. então pra gravar o chekbox, você não deve ter problema nenhum, você pode pegar o value direto já que ele retorna sempre 1 ou 0. mas não esqueca que True/False ou 0/1, sempre sem aspas.

Link para o comentário
Compartilhar em outros sites

  • 0
se o campo esta como Sim/Não você pode escrever a query com True para Sim e False para Não, assim como também pode ser 1 para Sim e 0 para Não. então pra gravar o chekbox, você não deve ter problema nenhum, você pode pegar o value direto já que ele retorna sempre 1 ou 0. mas não esqueca que True/False ou 0/1, sempre sem aspas.

Kuroi,

Em quais campos?

Nestes?

----

Private Sub chkAcompCD_Click()

'Verifica se chkAcompCD está ou não marcada, e atribui a vAcompCD o valor

'correspondente:

If chkAcompCD.Value = vbChecked Then

vAcompCD = True

Else

vAcompCD = False

End If

End Sub

Private Sub chkAcompDisquete_Click()

'Verifica se chkAcompCD está ou não marcada, e atribui a vAcompCD o valor

'correspondente:

If chkAcompDisquete.Value = vbChecked Then

vAcompDisquete = True

Else

vAcompDisquete = False

End If

End Sub

-----

ou em outros, porque se for nestes já alterei e continua não dando certo?

Grato,

Girréis

Link para o comentário
Compartilhar em outros sites

  • 0

mas veja que no insert você esta gravando-os com aspas, e como eu disse no outro post, valor sim/não tem que ser sem aspas, tipo assim:

vSQL = "INSERT INTO Livros " & _
            "(CodLivro, Titulo, Autor, CodEditora, " & _
            "CodCategoria, AcompCD, AcompDisquete, Idioma, Observacoes) VALUES (" & _
            vCod & ",'" & _
            txtTitulo.Text & "','" & _
            txtAutor.Text & "','" & _
            vCodEditora & "','" & _
            vCodCategoria & "'," & _
            vAcompCD & "," & _
            vAcompDisquete & ",'" & _
            vIdioma & "','" & _
            txtObservacoes.Text & "');"[/code]

mas se o erro continuar, tenta pegar o conteudo da sua variavel vSQL e executar direto no access, pra ver se ele aponta qual é o campo.

Link para o comentário
Compartilhar em outros sites

  • 0
mas veja que no insert você esta gravando-os com aspas, e como eu disse no outro post, valor sim/não tem que ser sem aspas, tipo assim:

vSQL = "INSERT INTO Livros " & _
            "(CodLivro, Titulo, Autor, CodEditora, " & _
            "CodCategoria, AcompCD, AcompDisquete, Idioma, Observacoes) VALUES (" & _
            vCod & ",'" & _
            txtTitulo.Text & "','" & _
            txtAutor.Text & "','" & _
            vCodEditora & "','" & _
            vCodCategoria & "'," & _
            vAcompCD & "," & _
            vAcompDisquete & ",'" & _
            vIdioma & "','" & _
            txtObservacoes.Text & "');"

mas se o erro continuar, tenta pegar o conteudo da sua variavel vSQL e executar direto no access, pra ver se ele aponta qual é o campo.

Kuroi,

o conteúdo do sql está correto, ele inclui, mas o estranho que o único que está com o formato diferente é o AcompCD e o AcompDisquete, pois no banco de dados ele está como Sim/Não e no VB está como True/False; e já troquei usando 1(True) e 0(False) e nada!

acho que o melhor é não usar checkbox, mas como irei aprender, né?

grato,

Girréis

Link para o comentário
Compartilhar em outros sites

  • 0

então, funcionou??

mas tipo, não é que esteja em formato diferente. tanto True/False, como 1/0 como Sim/Não são formato Boolean, so que são modos diferentes de demonstrar. No accessa sempre vai estar Sim/Não, porque no fundo, Sim/Não é apenas outro modo de falar True/False

Link para o comentário
Compartilhar em outros sites

  • 0
então, funcionou??

mas tipo, não é que esteja em formato diferente. tanto True/False, como 1/0 como Sim/Não são formato Boolean, so que são modos diferentes de demonstrar. No accessa sempre vai estar Sim/Não, porque no fundo, Sim/Não é apenas outro modo de falar True/False

Kuroi,

quer dizer que devo usar Sim/Não no lugar do True/False?

Girréis

Link para o comentário
Compartilhar em outros sites

  • 0

não, quero dizer que Sim é a mesma coisa que True e Não é a mesma coisa que False.

mas afinal de contas, o erro "Tipo de dados imcompatível na expressão de critério." ainda continua, ou agora ele esta inserindo normal??

veja no banco, que quando você grava True, ele mostra um check checado (ou seja Sim). e quando você grava False, ele mostra um check vazio (ou seja, Não).

Link para o comentário
Compartilhar em outros sites

  • 0
não, quero dizer que Sim é a mesma coisa que True e Não é a mesma coisa que False.

mas afinal de contas, o erro "Tipo de dados imcompatível na expressão de critério." ainda continua, ou agora ele esta inserindo normal??

veja no banco, que quando você grava True, ele mostra um check checado (ou seja Sim). e quando você grava False, ele mostra um check vazio (ou seja, Não).

Kuroi,

entendi, mas o erro ainda continua..... ´

grato,

Girréis

Link para o comentário
Compartilhar em outros sites

  • 0

cara, você tentou executar o conteudo do vSQL direto no banco?? tipo, o problema não deve ser do True/False, não. de teste criei um banco aqui cum um campo Sim/Não, executei o seguinte codigo:

Dim x As New Connection
    
    x.Provider = "Microsoft.Jet.OLEDB.4.0"
    x.ConnectionString = "Banco.mdb"
    
    x.CursorLocation = adUseClient
    x.Open
    
    x.Execute "Insert Into a(a) Values(1)"
    x.Execute "Insert Into a(a) Values(True)"[/code] e os dois inserts funcionaram certinho. tipo, sabe a linha do execute?? clica nela e aperta F9. então rode o programa (F5). quando chegar la, aperte Ctrl + G pra mostrar a janelinha do Immediate. nela, digite
[code]? vSQL

copie o conteudo que vai aparecer e tente executar direto no access. se der erro, ele deve apontar (vai parar o cursor em cima) o campo que esta errado.

Link para o comentário
Compartilhar em outros sites

  • 0
cara, você tentou executar o conteudo do vSQL direto no banco?? tipo, o problema não deve ser do True/False, não. de teste criei um banco aqui cum um campo Sim/Não, executei o seguinte codigo:

Dim x As New Connection
    
    x.Provider = "Microsoft.Jet.OLEDB.4.0"
    x.ConnectionString = "Banco.mdb"
    
    x.CursorLocation = adUseClient
    x.Open
    
    x.Execute "Insert Into a(a) Values(1)"
    x.Execute "Insert Into a(a) Values(True)"
e os dois inserts funcionaram certinho. tipo, sabe a linha do execute?? clica nela e aperta F9. então rode o programa (F5). quando chegar la, aperte Ctrl + G pra mostrar a janelinha do Immediate. nela, digite
? vSQL

copie o conteudo que vai aparecer e tente executar direto no access. se der erro, ele deve apontar (vai parar o cursor em cima) o campo que esta errado.

Kuroi,

executei o que me instruiu e a saída do immediate foi?

INSERT INTO Livros (CodLivro, Titulo, Autor, CodEditora, CodCategoria, AcompCD, AcompDisquete, Idioma, Observacoes) VALUES (1,'Teste','Testes','1','2','Verdadeiro','Falso','1','testtse');

ao meu ver está certo, não é?

Girréis

Link para o comentário
Compartilhar em outros sites

  • 0

não, ela tem pelo menos dois erros.

primeiro - as aspas, já falei pra tirar naqueles dois campos.

segundo - o Visual Basic esta convertendo o valor boolean na concatenacao. em vez de escrever "True", ele esceve "Verdadeiro".

tente fazer o insert assim, e veja se funciona:

vSQL = "INSERT INTO Livros " & _
            "(CodLivro, Titulo, Autor, CodEditora, " & _
            "CodCategoria, AcompCD, AcompDisquete, Idioma, Observacoes) VALUES (" & _
            vCod & ",'" & _
            txtTitulo.Text & "','" & _
            txtAutor.Text & "','" & _
            vCodEditora & "','" & _
            vCodCategoria & "'," & _
            CStr(vAcompCD) & "," & _
            CStr(vAcompDisquete) & ",'" & _
            vIdioma & "','" & _
            txtObservacoes.Text & "');"[/code]

apesar de que seria mais facil pegar o value do checkbox direto em vez de por em variavel.

e depois, você também tem que por o CStr() no Uptade.

veja ai se funciona

Link para o comentário
Compartilhar em outros sites

  • 0
não, ela tem pelo menos dois erros.

primeiro - as aspas, já falei pra tirar naqueles dois campos.

segundo - o Visual Basic esta convertendo o valor boolean na concatenacao. em vez de escrever "True", ele esceve "Verdadeiro".

tente fazer o insert assim, e veja se funciona:

vSQL = "INSERT INTO Livros " & _
            "(CodLivro, Titulo, Autor, CodEditora, " & _
            "CodCategoria, AcompCD, AcompDisquete, Idioma, Observacoes) VALUES (" & _
            vCod & ",'" & _
            txtTitulo.Text & "','" & _
            txtAutor.Text & "','" & _
            vCodEditora & "','" & _
            vCodCategoria & "'," & _
            CStr(vAcompCD) & "," & _
            CStr(vAcompDisquete) & ",'" & _
            vIdioma & "','" & _
            txtObservacoes.Text & "');"

apesar de que seria mais facil pegar o value do checkbox direto em vez de por em variavel.

e depois, você também tem que por o CStr() no Uptade.

veja ai se funciona

Kuroi,

me explica melhor onde tirar as aspas?

e tenho que trocar True por Verdadeiro?

Girréis

Link para o comentário
Compartilhar em outros sites

  • 0
Kuroi,

me explica melhor onde tirar as aspas?

e tenho que trocar True por Verdadeiro?

Girréis

mas eu já te passei o codigo do insert certinho como tem que ficar já sem as aspas e já com esse problema do verdadeiro corrigido.

bom, mas eu tava me referindo às aspas simples que você estava pondo nos campos Sim/Não. Eles devem ser gravados sem aspas (apesar de que se você passar 0/1 o access aceita com aspas, mas não sei quanto aos otros bancos).

exemplo:

Insert Into Tabela(Campo) Values(True) //está certo
Insert Into Tabela(Campo) Values('True') //está errado[/code]

agora quanto ao negocio do Verdadeiro, é justamente o contrario. o VB estava trocando True por Verdadeiro, e isso é errado. você concatenando com o CStr() resolve. olha o insert que eu te passei no otro post, ele deve funcionar (pelo menos essa parte do Sim/Não não deve mais dar problemas).

Link para o comentário
Compartilhar em outros sites

  • 0
Kuroi,

me explica melhor onde tirar as aspas?

e tenho que trocar True por Verdadeiro?

Girréis

mas eu já te passei o codigo do insert certinho como tem que ficar já sem as aspas e já com esse problema do verdadeiro corrigido.

bom, mas eu tava me referindo às aspas simples que você estava pondo nos campos Sim/Não. Eles devem ser gravados sem aspas (apesar de que se você passar 0/1 o access aceita com aspas, mas não sei quanto aos otros bancos).

exemplo:

Insert Into Tabela(Campo) Values(True) //está certo
Insert Into Tabela(Campo) Values('True') //está errado

agora quanto ao negocio do Verdadeiro, é justamente o contrario. o VB estava trocando True por Verdadeiro, e isso é errado. você concatenando com o CStr() resolve. olha o insert que eu te passei no otro post, ele deve funcionar (pelo menos essa parte do Sim/Não não deve mais dar problemas).

Kuroi,

agora entendi o funcionamento.... deu certo!

obrigadão!

Girréis

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Henrique --

'Chama a procedure ComboEditoras e passa a combo cboEditora como

'parâmetro:

'aqui está o problema!!!!

ComboEditoras cboEditora

'O mesmo para cboCategorias:

ComboCategorias cboCategoria

'Garante que nenhum item esteja selecionado nas combos:

cboEditora.ListIndex = -1

cboCategoria.ListIndex = -1

End Sub

O meu programa esta dando problema quando chama a procedure ComboEditoras e passa a combo para cboEditora

ComboEditoras cboEditora

o erro é o seguinte: Label not Defined

Obrigado.

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,4k
×
×
  • Criar Novo...