ATUALIZACAO DE DADOS
Olá, amigos, estou com um problema que está queimando minha cabeça!
Estou fazendo um programa de agenda com o Visual Basic 2010, usando o banco de dados do accdb do Access. Tudo estava indo bem até que de repente os dados passaram a não ser mais atualizados quando o programa está aberto. Quando eu fecho e executo de novo é que as alterações aparecem. Isso acontece com introdução, atualização e exclusão. Alguém pode dar alguma luz?
Segue abaixo um trecho da rotina de atualização:
Private Sub butSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butSalvar.Click
[ô]Define uma variável de comando para o objeto oleDb.
Dim cmd As New OleDbCommand
[ô] Define o comando como texto
cmd.CommandType = CommandType.Text
[ô]Define a seqüência de caracteres (string de conexão) usada para abrir o banco de dados.
Conexao.ConnectionString = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\HéLIO\Documents\Visual Studio 2010\Projects\AgendadeRecados\AgendadeRecados\Bin\Debug\AgendaDeRecados.accdb[Ô]
[ô]Abre o banco de dados (abre a conexão).
Conexao.Open()
[ô]Define as propriedades do objeto Command
cmd.Connection = Conexao
[ô]Se for atualização...
If butNovo.Tag = False Then
[ô]Define a instrução SQL para atualização (cria um DataReader).
cmd.CommandText = [Ô]UPDATE Agenda Set Recado = [ô][Ô] & cbxRecado.Text & [Ô][ô],DataRecado = #[Ô] & Format(dtpDataRecado.Value, [Ô]yyyy/MM/dd[Ô]) & _
[Ô]#,DiasAntes = [Ô] & nudDiasAntes.Value & [Ô],DiasDepois = [Ô] & nudDiasDepois.Value & [Ô],FreqDiária = [Ô] & _
chkFreqDiária.Checked & [Ô],FreqSemanal = [Ô] & chkFreqSemanal.Checked & [Ô],FreqMensal = [Ô] & chkFreqMensal.Checked & _
[Ô],FreqAnual = [Ô] & chkFreqAnual.Checked & [Ô] Where Recado = [ô][Ô] & cbxRecado.Tag & [Ô][ô][Ô]
[ô]Se for introdução...
Else
[ô]Define a instrução SQL para introdução (cria um DataReader).
cmd.CommandText = [Ô]Insert Into Agenda(Recado,DataRecado,DiasAntes,DiasDepois,FreqDiária,FreqSemanal,FreqMensal,FreqAnual)values([ô][Ô] & _
cbxRecado.Text & [Ô][ô],[Ô] & [Ô]#[Ô] & CDate(dtpDataRecado.Value) & [Ô]#,[Ô] & nudDiasAntes.Value & [Ô],[Ô] & nudDiasDepois.Value & _
[Ô],[Ô] & chkFreqDiária.Checked & [Ô],[Ô] & chkFreqSemanal.Checked & [Ô],[Ô] & chkFreqMensal.Checked & [Ô],[Ô] & chkFreqAnual.Checked & [Ô])[Ô]
End If
[ô]Executa a instrução SQL em cmd.CommandText.
cmd.ExecuteNonQuery()
[ô]Fecha a conexão.
Conexao.Close()
[ô]cbxRecado_SelectedIndexChanged(sender, e)
cbxRecado.Text = ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(0)
End Sub
Private Sub butExcluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butExcluir.Click
[ô]Define uma variável de comando para o objeto oleDb.
Dim cmd As New OleDbCommand
[ô] Define o comando como texto
cmd.CommandType = CommandType.Text
[ô]Define a seqüência de caracteres (string de conexão) usada para abrir o banco de dados.
Conexao.ConnectionString = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\HéLIO\Documents\Visual Studio 2010\Projects\AgendadeRecados\AgendadeRecados\Bin\Debug\AgendaDeRecados.accdb[Ô]
[ô]Abre o banco de dados (abre a conexão).
Conexao.Open()
[ô]Define as propriedades do objeto Command
cmd.Connection = Conexao
[ô]Define a instrução SQL para exclusão (cria um DataReader).
cmd.CommandText = [Ô]DELETE FROM Agenda Where Recado = [ô][Ô] & cbxRecado.Text & [Ô][ô][Ô]
[ô]Executa a instrução SQL em cmd.CommandText.
cmd.ExecuteNonQuery()
[ô]Fecha a conexão.
Conexao.Close()
End Sub
Estou fazendo um programa de agenda com o Visual Basic 2010, usando o banco de dados do accdb do Access. Tudo estava indo bem até que de repente os dados passaram a não ser mais atualizados quando o programa está aberto. Quando eu fecho e executo de novo é que as alterações aparecem. Isso acontece com introdução, atualização e exclusão. Alguém pode dar alguma luz?
Segue abaixo um trecho da rotina de atualização:
Private Sub butSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butSalvar.Click
[ô]Define uma variável de comando para o objeto oleDb.
Dim cmd As New OleDbCommand
[ô] Define o comando como texto
cmd.CommandType = CommandType.Text
[ô]Define a seqüência de caracteres (string de conexão) usada para abrir o banco de dados.
Conexao.ConnectionString = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\HéLIO\Documents\Visual Studio 2010\Projects\AgendadeRecados\AgendadeRecados\Bin\Debug\AgendaDeRecados.accdb[Ô]
[ô]Abre o banco de dados (abre a conexão).
Conexao.Open()
[ô]Define as propriedades do objeto Command
cmd.Connection = Conexao
[ô]Se for atualização...
If butNovo.Tag = False Then
[ô]Define a instrução SQL para atualização (cria um DataReader).
cmd.CommandText = [Ô]UPDATE Agenda Set Recado = [ô][Ô] & cbxRecado.Text & [Ô][ô],DataRecado = #[Ô] & Format(dtpDataRecado.Value, [Ô]yyyy/MM/dd[Ô]) & _
[Ô]#,DiasAntes = [Ô] & nudDiasAntes.Value & [Ô],DiasDepois = [Ô] & nudDiasDepois.Value & [Ô],FreqDiária = [Ô] & _
chkFreqDiária.Checked & [Ô],FreqSemanal = [Ô] & chkFreqSemanal.Checked & [Ô],FreqMensal = [Ô] & chkFreqMensal.Checked & _
[Ô],FreqAnual = [Ô] & chkFreqAnual.Checked & [Ô] Where Recado = [ô][Ô] & cbxRecado.Tag & [Ô][ô][Ô]
[ô]Se for introdução...
Else
[ô]Define a instrução SQL para introdução (cria um DataReader).
cmd.CommandText = [Ô]Insert Into Agenda(Recado,DataRecado,DiasAntes,DiasDepois,FreqDiária,FreqSemanal,FreqMensal,FreqAnual)values([ô][Ô] & _
cbxRecado.Text & [Ô][ô],[Ô] & [Ô]#[Ô] & CDate(dtpDataRecado.Value) & [Ô]#,[Ô] & nudDiasAntes.Value & [Ô],[Ô] & nudDiasDepois.Value & _
[Ô],[Ô] & chkFreqDiária.Checked & [Ô],[Ô] & chkFreqSemanal.Checked & [Ô],[Ô] & chkFreqMensal.Checked & [Ô],[Ô] & chkFreqAnual.Checked & [Ô])[Ô]
End If
[ô]Executa a instrução SQL em cmd.CommandText.
cmd.ExecuteNonQuery()
[ô]Fecha a conexão.
Conexao.Close()
[ô]cbxRecado_SelectedIndexChanged(sender, e)
cbxRecado.Text = ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(0)
End Sub
Private Sub butExcluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butExcluir.Click
[ô]Define uma variável de comando para o objeto oleDb.
Dim cmd As New OleDbCommand
[ô] Define o comando como texto
cmd.CommandType = CommandType.Text
[ô]Define a seqüência de caracteres (string de conexão) usada para abrir o banco de dados.
Conexao.ConnectionString = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\HéLIO\Documents\Visual Studio 2010\Projects\AgendadeRecados\AgendadeRecados\Bin\Debug\AgendaDeRecados.accdb[Ô]
[ô]Abre o banco de dados (abre a conexão).
Conexao.Open()
[ô]Define as propriedades do objeto Command
cmd.Connection = Conexao
[ô]Define a instrução SQL para exclusão (cria um DataReader).
cmd.CommandText = [Ô]DELETE FROM Agenda Where Recado = [ô][Ô] & cbxRecado.Text & [Ô][ô][Ô]
[ô]Executa a instrução SQL em cmd.CommandText.
cmd.ExecuteNonQuery()
[ô]Fecha a conexão.
Conexao.Close()
End Sub
Para mim é mais simples do que tu imagina.
Seu código é para inserir registros,alterar e excluir.
Entãooooooooooooooooo.
Onde está os códigos de atualização do formulário.
Não existe,então formulário não atualizado.
é por isso quando fecha e executa ai mostra o que você fez.
Criar uma sub para atualizar seu formulário igual a quando executa ele.
Seu código é para inserir registros,alterar e excluir.
Entãooooooooooooooooo.
Onde está os códigos de atualização do formulário.
Não existe,então formulário não atualizado.
é por isso quando fecha e executa ai mostra o que você fez.
Criar uma sub para atualizar seu formulário igual a quando executa ele.
O código para a introdução e atualização estão nas instruções SQL contidas em cmd.CommandText. Quando btNovo.tag = False, cmd.CommandText guarda a instrução de atualização UPDATE; caso contrário, a instrução de introdução INSERT TO e executo com cmd.ExecuteNonQuery().
Quanto a atualização do formulário eu coloquei no evento SelectedIndexChanged do controle combobox nomeado como cbxRecado como mostrado abaixo:
Private Sub cbxRecado_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbxRecado.SelectedIndexChanged
cbxRecado.Text = ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(0)
cbxRecado.Tag = cbxRecado.Text
dtpDataRecado.Value = Format(ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(1), [Ô]yyyy/MM/dd[Ô])
nudDiasAntes.Value = ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(2)
nudDiasDepois.Value = ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(3)
chkFreqDiária.Checked = ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(4)
chkFreqSemanal.Checked = ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(5)
chkFreqMensal.Checked = ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(6)
chkFreqAnual.Checked = ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(7)
End Sub
Quanto a atualização do formulário eu coloquei no evento SelectedIndexChanged do controle combobox nomeado como cbxRecado como mostrado abaixo:
Private Sub cbxRecado_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbxRecado.SelectedIndexChanged
cbxRecado.Text = ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(0)
cbxRecado.Tag = cbxRecado.Text
dtpDataRecado.Value = Format(ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(1), [Ô]yyyy/MM/dd[Ô])
nudDiasAntes.Value = ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(2)
nudDiasDepois.Value = ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(3)
chkFreqDiária.Checked = ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(4)
chkFreqSemanal.Checked = ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(5)
chkFreqMensal.Checked = ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(6)
chkFreqAnual.Checked = ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(7)
End Sub
Como você atualizou cbxRecado.Text = [txt-color=#e80000]ds.Tables(0)[/txt-color].Rows(cbxRecado.SelectedIndex).Item(0).
cbxRecado_SelectedIndexChanged não existe codificação para preenchimento.
Acho que o Combobox não é local adequado para atualização do formulário.
Atualiza ele logo após o Update,Insert ou Exclusão.
Seu ds.Tables(0) praticamente foi preenchido antes do Salvar ou Excluir,então continua a mesma coisa.
cbxRecado_SelectedIndexChanged não existe codificação para preenchimento.
Acho que o Combobox não é local adequado para atualização do formulário.
Atualiza ele logo após o Update,Insert ou Exclusão.
Seu ds.Tables(0) praticamente foi preenchido antes do Salvar ou Excluir,então continua a mesma coisa.
Olá, Omar, obrigado por estar tentando resolver meu problema.
Vou explicar mais detalhadamente.
Tenho um combobox que recebe todos os recados (campo Recado) da tabela Agenda do banco de dados AgendaDeRecados.accdb. Ao clicar em um determinado recado da lista eu queria que os demais campos fossem carregados nos seus respectivos controles, daà eu utilizar o evento SelectedImdexChanched do combobox. Acontece que os controles não são atualizados. Se eu alterei os dados eu acho que deveria ser refletido imediatamente no banco de dados e quando eu clicasse no item, como o evento é automaticamente chamado, a rotina que eu coloquei aà deveria ser capaz de preencher os controles com as altrações realizadas.
Os ds.Tables(0) só seriam preenchidos pós eu clicar em um item do combobox.
Obs.: eu já tinha preenchido os ds.Tables(0) após a atualização, introdução ou exclusão e não deu resultado!
Vou explicar mais detalhadamente.
Tenho um combobox que recebe todos os recados (campo Recado) da tabela Agenda do banco de dados AgendaDeRecados.accdb. Ao clicar em um determinado recado da lista eu queria que os demais campos fossem carregados nos seus respectivos controles, daà eu utilizar o evento SelectedImdexChanched do combobox. Acontece que os controles não são atualizados. Se eu alterei os dados eu acho que deveria ser refletido imediatamente no banco de dados e quando eu clicasse no item, como o evento é automaticamente chamado, a rotina que eu coloquei aà deveria ser capaz de preencher os controles com as altrações realizadas.
Os ds.Tables(0) só seriam preenchidos pós eu clicar em um item do combobox.
Obs.: eu já tinha preenchido os ds.Tables(0) após a atualização, introdução ou exclusão e não deu resultado!
md.ExecuteNonQuery()
[ô]Fecha a conexão.
Conexao.Close()
[ô]cbxRecado_SelectedIndexChanged(sender, e)
[txt-color=#e80000] cbxRecado.Text = ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(0)[/txt-color]
Isto não é suficiente para atualizar seu Combobox.
Se você preenche o combo com isto,ele é de quando abriu o formulário.Então quando
exclui,altera ou adiciona um novo registro,seu combo estará do mesmo jeito.a
Este é um pequeno exemplo de preenchimento de outros com um combox.
Private Sub cbxretiraestoque_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cbxretiraestoque.SelectedIndexChanged
Dim strCon As String
strCon = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & My.Application.Info.DirectoryPath & [Ô]\Banco.MDB[Ô]
Dim conn As New OleDbConnection
Dim comando As New OleDbCommand
Try
conn.ConnectionString = strCon
conn.Open()
comando.Connection = conn
comando.CommandText = [Ô]Select * From Clientes Where Nome=[ô][Ô] & cbxretiraestoque.SelectedItem & [Ô][ô][Ô]
Dim dr As OleDbDataReader = comando.ExecuteReader
While (dr.Read())
TextBox1.Text = [Ô][Ô] & dr([Ô]IdCli[Ô])
TextBox2.Text = [Ô][Ô] & dr([Ô]Nome[Ô])
End While
conn.Close()
Catch ex As OleDbException
MessageBox.Show([Ô]Erro ao efetuar a conexão com a base de dados : [Ô] + ex.Message)
conn.Dispose()
End Try
End Sub
[ô]Fecha a conexão.
Conexao.Close()
[ô]cbxRecado_SelectedIndexChanged(sender, e)
[txt-color=#e80000] cbxRecado.Text = ds.Tables(0).Rows(cbxRecado.SelectedIndex).Item(0)[/txt-color]
Isto não é suficiente para atualizar seu Combobox.
Se você preenche o combo com isto,ele é de quando abriu o formulário.Então quando
exclui,altera ou adiciona um novo registro,seu combo estará do mesmo jeito.a
Este é um pequeno exemplo de preenchimento de outros com um combox.
Private Sub cbxretiraestoque_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cbxretiraestoque.SelectedIndexChanged
Dim strCon As String
strCon = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & My.Application.Info.DirectoryPath & [Ô]\Banco.MDB[Ô]
Dim conn As New OleDbConnection
Dim comando As New OleDbCommand
Try
conn.ConnectionString = strCon
conn.Open()
comando.Connection = conn
comando.CommandText = [Ô]Select * From Clientes Where Nome=[ô][Ô] & cbxretiraestoque.SelectedItem & [Ô][ô][Ô]
Dim dr As OleDbDataReader = comando.ExecuteReader
While (dr.Read())
TextBox1.Text = [Ô][Ô] & dr([Ô]IdCli[Ô])
TextBox2.Text = [Ô][Ô] & dr([Ô]Nome[Ô])
End While
conn.Close()
Catch ex As OleDbException
MessageBox.Show([Ô]Erro ao efetuar a conexão com a base de dados : [Ô] + ex.Message)
conn.Dispose()
End Try
End Sub
AÃ, Omar, valeu mesmo. Funcionou direitinho. O programa tava legalzinho, mas isso tava me dando dor de cabeça.
Um bom restante de dia pra você.
Qualquer coisa eu volto a te procurar, rsrsrs...
Um bom restante de dia pra você.
Qualquer coisa eu volto a te procurar, rsrsrs...
Tópico encerrado , respostas não são mais permitidas