ERRO AO USAR O COMBOBOX COM VIEW

OMAR2011 02/09/2016 21:39:32
#466491
No lugar de Falso use [txt-color=#e80000]0[/txt-color] True use [txt-color=#e80000]1[/txt-color]
JACKTRINTA 03/09/2016 09:35:16
#466492
Em todas as opções ou somente nos campos que possui disquete e cd ?
Se for eu alterei mas ao gravar os dados um dos campos esta trazendo falso e não consegui identificar, segue o print e a programação com a alteração.

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 = 1
Else
vAcompCD = 0
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 = 1
Else
vAcompDisquete = 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
[ô]inicializa as variáveis auxiliares:
vCodEditora = 0
vCodCategoria = 0
vAcompCD = 0
vAcompDisquete = 0
vIdioma = 0
[ô]chama a procedure ComboEditoras e passa o combo cboEditora como parâmetro:
ComboEditoras cboEditora
[ô]o mesmo para cboCategorias
ComboCategorias cboCategoria
[ô]Garante que nenhum item esteja selecionado nos combos:
cboEditora.ListIndex = -1
cboCategoria.ListIndex = -1
End Sub

[ô]começa o comando para verificação de existência e inclusão de novo Livro no campo CodLivro
[ô]pesquisando se já existe o código cadastrado
Private Sub txtCodLivro_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
Dim vCod As Long
Dim i As Integer
On Error GoTo errSelecao [ô]caso ocorra erro vai pra outro comando abaixo
[ô]converte o código digitado para a pesquisa:
vCod = Val(txtCodLivro.Text)
[ô]Verifica se foi digitado um código válido:
[ô]Val vai retornar em valores numericos o que foi digitado na txtCodLivro
[ô]como não foi digitado nada ele retorna 0, então acontece a MsgBox abaixo
If vCod = 0 Then Exit Sub
[ô]o comando abaixo transforma o cursor do mouse em ampulheta
Screen.MousePointer = vbHourglass
[ô]tenta selecionar o registro na tabela de livros:
[ô]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 Livros where CodLivro= [Ô] & vCod & [Ô];[Ô]
[ô]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 ->errado na apostila, deve dar continuidade tanto na inclusão como na alteração
[ô]Identifica a operação como inclusão:
vInclusao = True
Else
[ô]Senão, atribui aos campos os dados do registro:
txtTitulo.Text = !Titulo
txtAutor.Text = !Autor
vCodEditora = !CodEditora
vCodCategoria = !CodCategoria
vAcompCD = !AcompCD
vAcompDisquete = !AcompDisquete
vIdioma = !Idioma
[ô]como observações não é um campo obrigatório,devemos impredir 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
[ô]Combo ListCount retorna o número de itens da combo,ListCount -1 é igual ao índice do último item.
[ô]Portanto o loop abaixo será execurtado patra todos os itens da combo através de seu índice:
For i = 0 To (.ListCount - 1)
If vCodEditora = .ItemData(1) Then
[ô]se ItemData for igual ao código atual, seleciona o item e sai do loop:
.ListIndex = 1
Exit For
End If
Next i
End With
With cboCategoria
[ô]elimina a seleção atual:
.ListIndex = -1
[ô]Combo ListCount retorna o número de itens da combo,ListCount -1 é igual ao índice do último item.
[ô]Portanto o loop abaixo será execurtado patra todos os itens da combo através de seu índice:
For i = 0 To (.ListCount - 1)
If vCodCategoria = .ItemData(1) Then
[ô]se ItemData for igual ao código atual, seleciona o item e sai do loop:
.ListIndex = 1
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 campo código:
txtCodLivro.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.[Ô] & .Description, vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
[ô] 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

Private Sub GravarDados()
Dim cnnComando As New ADODB.Command
Dim vSQL As String
Dim vCod As Long
Dim vConfMsg As Integer
Dim vError As Boolean
On Error GoTo errGravacao
[ô]converte o código digitado para a gravação:
vCod = Val(txtCodLivro.Text)
[ô]verifica os dados digitados:
vConfMsg = vbExclamation + vbOKOnly + vbSystemModal
vErro = False
If vCod = 0 Then
MsgBox [Ô]O código não foi preenchido.[Ô], vConfMsg, [Ô]Erro[Ô]
vErro = True
End If
If txtTitulo.Text = Empty Then
MsgBox [Ô]O titulo não foi preenchido.[Ô], vConfMsg, [Ô]Erro[Ô]
vErro = True
End If
If txtAutor.Text = Empty Then
MsgBox [Ô]O autor não foi preenchido.[Ô], vConfMsg, [Ô]Erro[Ô]
vErro = True
End If
If vCodEditora = 0 Then
MsgBox [Ô]Não foi selecionado a editora.[Ô], vConfMsg, [Ô]Erro[Ô]
vErro = True
End If
If vCodCategoria = 0 Then
MsgBox [Ô]Não foi selecionado a 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
[ô]contrói o comando SQL para a gravação:

If vInclusao Then
[ô]Inclusão:
vSQL = [Ô]insert into Livros(CodLivros,Titulo,Autor,CodEditora,CodCategoria,AcompCD,AcompDisquete,Idioma,Observacoes) values ( [Ô] & vCod & [Ô],[ô][Ô] & txtTitulo.Text & [Ô][ô],[ô][Ô] & txtAutor.Text & [Ô][ô],[Ô] & vCodEditora & [Ô],[Ô] & vCodCategoria & [Ô],[Ô] & vAcompCD & [Ô],[Ô] & vAcompDisquete & [Ô],[Ô] & vIdioma & [Ô],[ô][Ô] & txtObservacoes.Text & [Ô][ô]);[Ô]
[ô]Alteração:
vSQL = [Ô]update Livros set Titulo = [ô][Ô] & txtTitulo.Text & [Ô][ô],Autor = [ô][Ô] & txtAutor.Text & [Ô][ô],CodEditora = [Ô] & vCodEditora & [Ô],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
[ô]Verifica a operação e cria o comando SQL correspondente:
MsgBox .CommandText
.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 SubPrivate Sub GravarDados()
Dim cnnComando As New ADODB.Command
Dim vSQL As String
Dim vCod As Long
Dim vConfMsg As Integer
Dim vError As Boolean
On Error GoTo errGravacao
[ô]converte o código digitado para a gravação:
vCod = Val(txtCodLivro.Text)
[ô]verifica os dados digitados:
vConfMsg = vbExclamation + vbOKOnly + vbSystemModal
vErro = False
If vCod = 0 Then
MsgBox [Ô]O código não foi preenchido.[Ô], vConfMsg, [Ô]Erro[Ô]
vErro = True
End If
If txtTitulo.Text = Empty Then
MsgBox [Ô]O titulo não foi preenchido.[Ô], vConfMsg, [Ô]Erro[Ô]
vErro = True
End If
If txtAutor.Text = Empty Then
MsgBox [Ô]O autor não foi preenchido.[Ô], vConfMsg, [Ô]Erro[Ô]
vErro = True
End If
If vCodEditora = 0 Then
MsgBox [Ô]Não foi selecionado a e
JACKTRINTA 07/10/2016 11:33:00
#467935
Pessoal, bom dia.
Consegui gravar o cadastro, agora esta dando erro ao limpar, verifiquei que o problema esta na parte que elimina a seleção dos combos, atualmente esta assim: cboEditora.List =-1
cboCategoria.List = -1

Já coloquei empty e 0 e nada.
JACKTRINTA 07/10/2016 23:11:59
#467948
Pessoal, boa noite.

Consegui resolver o problema ao limpar a tela, agora estou tentando editar o cadastro e aparece o seguinte erro:invalid property value, carrega as informações mas na tela não deixa alterar e não habilita o botão da exclusão, segue a programação:

Private Sub txtCodLivro_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
Dim vCod As Long
Dim i As Integer
On Error GoTo errSelecao [ô]caso ocorra erro vai pra outro comando abaixo
[ô]converte o código digitado para a pesquisa:
vCod = Val(txtCodLivro.Text)
[ô]Verifica se foi digitado um código válido:
[ô]Val vai retornar em valores numericos o que foi digitado na txtCodLivro
[ô]como não foi digitado nada ele retorna 0, então acontece a MsgBox abaixo
If vCod = 0 Then Exit Sub
[ô]o comando abaixo transforma o cursor do mouse em ampulheta
Screen.MousePointer = vbHourglass
[ô]tenta selecionar o registro na tabela de livros:
[ô]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 Livros where CodLivro= [Ô] & vCod & [Ô];[Ô]
[ô]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 [ô]->errado na apostila, deve dar continuidade tanto na inclusão como na alteração
[ô]Identifica a operação como inclusão:
vInclusao = True
Else
[ô]Senão, atribui aos campos os dados do registro:
txtTitulo.Text = !Titulo
txtAutor.Text = !Autor
vCodEditora = !CodEditora
vCodCategoria = !CodCategoria
vAcompCD = !AcompCD
vAcompDisquete = !AcompDisquete
vIdioma = !Idioma
[ô]como observações não é um campo obrigatório,devemos impredir 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
[ô]Combo ListCount retorna o número de itens da combo,ListCount -1 é igual ao índice do último item.
[ô]Portanto o loop abaixo será execurtado patra 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 = 1
Exit For
End If
Next i
End With
With cboCategoria
[ô]elimina a seleção atual:
.ListIndex = -1
[ô]Combo ListCount retorna o número de itens da combo,ListCount -1 é igual ao índice do último item.
[ô]Portanto o loop abaixo será execurtado patra todos os itens da combo através de seu índice:
For i = 0 To (.ListCount - 1)
If vCodCategoria = .ItemData(i) Then
[ô]se ItemData for igual ao código atual, seleciona o item e sai do loop:
.ListIndex = 1
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


[ô]Identifica a operação como Alteração:
vInclusao = False

[ô]Habilita o botão Excluir:
Toolbar1.Buttons(3).Enabled = True [ô]-no cadastro do usuário esta antes de confirmar a inclusão
End If
End With
[ô]Desabilita a digitação do campo código:
txtCodLivro.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.[Ô] & .Description, vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
[ô] 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
JACKTRINTA 08/10/2016 00:40:54
#467949
Pessoal verifiquei que é algo na parte do combo Categoria, segue o print, não esta trazendo a informação que tem no banco.

JACKTRINTA 18/10/2016 21:55:02
#468187
Pessoal, boa noite.

Verifiquei que quando vai alterar não esta identificando isso, na parte:

With rsSelecao
If .EOF And .BOF Then
[ô]Se o recordset esta vazio, não retornou registro com esse código:
[ô]LimparDados [ô]->errado na apostila, deve dar continuidade tanto na inclusão como na alteração
[ô]Identifica a operação como inclusão:
vInclusao = True ->>>>>>>>>neste parte esta True mas para alterar Continua True

Alguém já viu isso ?
Página 2 de 2 [16 registro(s)]
Faça seu login para responder