Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

aprendiz19

[Resolvido] Erro no Vb 6

Recommended Posts

ola amigo aprendiz 19, eu tb tou encravado neste mesmo erro que tu e pelo que li aqui o nosso erro esta nas variaveis AcompCd e AcompDisquete porque O msgbox vSQL mostra isto:

 

INSERT INTO Livros (CodLivro, Titulo, Autor, CodEditora, CodCategoria, AcompCD, AcompDisquete, Idioma, Observacoes) VALUES (4, 'A identidade bourne', 'Robert Ludlum', 3, 2, True, False, 1, 'livro ja lido')

 

reparando no exemplo acima as variaveis vAcompCD, vAcompDisquete estao como Boolean, e acho que o access esta concatenando..............

 

eu ainda nao consegui solucionar e parece que tem haver com o tipo de variaveis dos vAcompCD, vAcompDisquete. Isto li em um outro poste com o mesmo problema podes ver ai:

http://scriptbrasil.com.br/forum/index.php...mp;#entry433415

 

tem outo aqui: http://forum.imasters.com.br/index.php...p;#entry1219931

 

vamos resolver juntos, se conseguires posta ai o mesmo p mim

Compartilhar este post


Link para o post
Compartilhar em outros sites

ei aprendiz 19 consegui resolver o problema. Aqui esta a solução: copia e cola o codigo ja corregido:

 

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 (estava dar erro,por ixo tive que comentar ou apagar)
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

 

outro de gravar:

 

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

'Mostra uma mensagem com o valor da variavel vSQL
 'MsgBox vSQL

'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

se der erro é so organizar na mesma linha o vSQL do insert e update. isto é o v SQL todo ele tem que estar numa linha so.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.