ATUALIZACAO DE DADOS

HELIOTL 08/10/2013 15:48:19
#429704
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
OMAR2011 08/10/2013 22:43:33
#429716
Resposta escolhida
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.


HELIOTL 08/10/2013 23:56:08
#429720
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
OMAR2011 09/10/2013 09:17:36
#429727
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.
HELIOTL 09/10/2013 13:38:02
#429752
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!
OMAR2011 09/10/2013 15:14:59
#429760
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
HELIOTL 09/10/2013 15:53:20
#429777
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...

Tópico encerrado , respostas não são mais permitidas