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
Pergunta
Girréis
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!
Link para o comentário
Compartilhar em outros sites
22 respostass a esta questão
Posts Recomendados
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.