Botão salvar do bindindnavigator n funciona
-
segunda-feira, 1 de fevereiro de 2010 20:52Pessol, peguei esse cod. na net para o botão salvar do databindingnavigator mais n esta salvando no bd. eu do STOP e Rodo novamente e aparece as informações alteradas mais quando vo no BD n tem nd alterado.
O q pode estar acontecendo.
vlw
Respostas
-
quarta-feira, 3 de fevereiro de 2010 16:07
Olá, Ricardo, desculpe eu esqueci um detalhe:
Você deve criar um CommandBuilder antes de fazer o Update:
No Botão Atualizar defica:
Dim cmb As New SqlCommandBuilder(da)
depois atualize:
da.Update(ds, "cooperativa")
Um Exempo para que você entenda é do Macoratti, bem explicado:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim strConexao As String strConexao = "server=(local);Trusted_Connection=yes;database=Teste" Dim objConexao As New SqlConnection(strConexao) Try objConexao.Open() Catch ex As Exception MsgBox(ex.GetBaseException) End Try ' Cria uma instância do objeto DataAdapter. Dim daClientes As New SqlDataAdapter("Select * From Clientes", objConexao) ' Cria uma instância de um DataSet, e retorna dados da tabela clientes Dim dsTeste As New DataSet("Clientes") daClientes.FillSchema(dsTeste, SchemaType.Source, "Clientes") daClientes.Fill(dsTeste, "Clientes") '--inserindo o registro no DataSet---------------------------------------------------------- MsgBox("Agora vou inserir um registro no DataSet", MsgBoxStyle.Information, "Inserir Registro") Dim tblClientes As DataTable tblClientes = dsTeste.Tables("Clientes") ' Obtem um novo objeto DataRow do DataTable Dim drAtual As DataRow drAtual = tblClientes.NewRow() '' Define os novos valores de DataRow drAtual("Codigo") = 7 drAtual("Nome") = "Testolina Testa" drAtual("Endereco") = "Rua Moscou , 109" ' Insere o novo objeto via método Add da coleção DataTable.Rows tblClientes.Rows.Add(drAtual) MsgBox("Registro incluído com sucesso na tabela Clientes.", MsgBoxStyle.Information, "Incluindo dados no DataSet") '---------codigo para alterar os dados inseridos ---------------------------------------------- MsgBox("Vou alterar o atual no DataSet", MsgBoxStyle.Information, "Alterar Registro") drAtual.BeginEdit() drAtual("nome") = "Yuri Gagarin" drAtual("endereco") = "R Lua Nova , 230" drAtual.EndEdit() MsgBox("Registro alterado com sucesso !", MsgBoxStyle.Information, "Alterando dados no DataSet") '-----------atualiza a tabela clientes do banco de dados Teste no SQL Server 'Atualiza o SQL Server Dim objCommandBuilder As New SqlCommandBuilder(daClientes) daClientes.Update(dsTeste, "Clientes") MsgBox("A operações feitas no DataSet irão atualizar o SQL Server !" & Chr(13) & Chr(13) & " Verifique os dados no Servidor", MsgBoxStyle.Exclamation, "Atualização SQL Server") 'exibe os dados do DataSet DataGrid1.DataSource = dsTeste End Sub End Class
Referências:
http://social.msdn.microsoft.com/Forums/en/adodotnetdataproviders/thread/666835a2-50ec-415f-ba30-bb80ca51c91b
http://social.msdn.microsoft.com/forums/pt-BR/vscsharppt/thread/a6ea5243-50f8-41e4-8963-7155bce29aa4/
http://social.msdn.microsoft.com/forums/pt-BR/vsvbasicpt/thread/72cbff25-fd59-4cc6-a8f7-d614bfcec415/
http://macoratti.net/vbn_upds.htm
http://macoratti.net/vbn_dst1.htm
[]s.
Alan.
Se esta resposta solucionou sua dúvida, “Marque como Resposta”- Sugerido como Resposta Alan Cossari quinta-feira, 4 de fevereiro de 2010 17:18
- Marcado como Resposta Fernanda SimõesModerator quarta-feira, 17 de fevereiro de 2010 12:03
-
terça-feira, 9 de fevereiro de 2010 12:03
Segue um link de referência para você se orientar:
http://support.microsoft.com/kb/308507
[]s.
Alan.
Se esta resposta solucionou sua dúvida, “Marque como Resposta”- Marcado como Resposta Fernanda SimõesModerator quarta-feira, 17 de fevereiro de 2010 12:03
Todas as Respostas
-
terça-feira, 2 de fevereiro de 2010 10:21Olá Ricardo, acho que você esqueceu de postar o código.
Espero ter te ajudado.
Att. Alan.
Se esta resposta solucionou sua dúvida, “Marque como Resposta” -
terça-feira, 2 de fevereiro de 2010 14:23Foi mal Alan esqueci mesmo, segue o cod.
Me.Validate()
Me.BindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.DataSet) -
terça-feira, 2 de fevereiro de 2010 15:11ModeradorRicardo,
Esse é o código correto para se utilizar no botão Save do botão... Testei aqui só pra confirmar e rolou de boa...
Que banco de dados você está utilizando? Como você fez para incluir a datasource no seu projeto?
André Alves de Lima // Visite o meu site: http://andrealveslima.spaces.live.com // -
terça-feira, 2 de fevereiro de 2010 15:23Ricardo,
O código acima só funciona se vc tiver feito a conexão corretamente ao banco de dados. Qual banco e como você fez a conexão?
visite: http://www.jacobsamuel.no.comunidades.net
Att.
Paulo -
terça-feira, 2 de fevereiro de 2010 15:32Pessoal vlw pela atenção .... acaredito que todas as conexões estejam corretas já que fiz pelo o Wizard e o datagrid esta cerregando o BD normalmente.
Estou usando o Acces como BD.
Tbm tentei fazer via cod. deêm uma olhada por favor.
Try
conn = New OleDb.OleDbConnection(sConnString)
conn.Open()
Catch
MsgBox("Erro ao Conectar ao banco de dados", , "Erro")
End Try
Dim da As OleDbDataAdapter = New OleDbDataAdapter _
("Select * from Cooperativa", conn)
Dim ds As DataSet = New DataSet
da.Fill(ds, "cooperativa")
DataGrid1.DataSource = ds.Tables("cooperativa")
End Sub
até aqui esta td bem, mais o cod. que coloquei antes n funciona pq fica com aquele sublinhado azul. (lembrando q quero alterar na grid e gravar no BD. ) c souberem como faço isso n importa a forma. vlw
abçs. -
terça-feira, 2 de fevereiro de 2010 15:43
-
terça-feira, 2 de fevereiro de 2010 17:12
Alan... vou tentar me explicar melhor.
o primeiro aplicativo que coloquei fiz pelo Wizard e a unica coisa que acrescentei foi a programação do botão salvar, mais esta ocorrendo o erro já listado acima.
utilizei um datagridview e bindingnavigator.o seg. aplicativo tentei fazer manualmente, utilizando somente a grid e um botão salvar.
no 2° post coloquei o cod. do botão salvar que achei na net e que tentei utilizar no 1° aplicativo, mais esse mesmo cod. n funciona nesse 2° aplicativo pq n estou utilizando o bindingnavigator, por isso esta aparecendo a linha azul, eh como vc utilizar uma variavel que n foi declarada o vb n reconhece e destaca ela.sei fazer alterações utilizando o UPDATE com caixas TXT. agora como faço pra gravar as alterações feitas direto na grid???
espero que tenha conseguido me fazer entender... agradeço a atenção de todos, abçs.
-
terça-feira, 2 de fevereiro de 2010 17:24
-
terça-feira, 2 de fevereiro de 2010 19:28Alan vlw mais uma vez... mais desculpa-me a ignorancia , mais o q seria fazer fora do metodo?
tentei fazer o seguinte
No module fiz as seguintes declarações:
******************************* MODULE ***************************
Imports System.Data
Imports System.Data.OleDb
Module Module1
Public conn As OleDb.OleDbConnection
Public sConnString As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" + Application.StartupPath + "\..\..\atendimento.mdb;"
Public da As OleDbDataAdapter
Public ds As DataSet = New DataSet
End Module
******************************FIM MODULE *************************
************************** FORM LOAD *****************************
Try
conn = New OleDb.OleDbConnection(sConnString)
conn.Open()
Catch
MsgBox("Erro ao Conectar ao banco de dados, ecerre o aplicativo", , "Erro")
End Try
da = New OleDbDataAdapter _
("Select * from Cooperativa", conn)
da.Fill(ds, "cooperativa")
DataGrid1.DataSource = ds.Tables("cooperativa")
**************************FIM FORM LOAD**************************
No botão salvar coloquei o q vc sugeriu
deu o seguinte erro ao executa-lo:
"Update requires a valid UpdateCommand when passed DataRow collection with modified rows."
vlw e obrigado novamente. -
terça-feira, 2 de fevereiro de 2010 19:51
Ricardo,
Não sou programador profissional, com certeza o pessoal ae entende muito mais que eu. Só vou tentar ajudar.
Uso na maioria das vezes o Acess e faço todos os códigos na UNHA, pois a manutenção fica bem mais fácil e melhor.
Para conexões e salvamento dos dados uso sempre o código:Private Sub salvar()
'declarações
'conexão
Dim cn As New OleDb.OleDbConnection
Dim cmd As New OleDb.OleDbCommand
cmd.Connection = cn
cmd.CommandType = CommandType.Text
'Define a string de conexão
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\CAMINHO\bancodados.mdb"
cn.ConnectionString = cn.ConnectionString
' Abre a conexao.
cn.Open()
Try
'Define as propriedades do objeto COmmand
cmd.Connection = cn
'Aqui você inclui a instrução que quiser do CRUD
cmd.CommandText = "insert into TABELA(CAMPOS)values('" & txtPM.Text & "')"cmd.ExecuteNonQuery()
'fecha a conexão
cn.Close()
Catch ex As Exception
MsgBox(ex.Message())
End Try
End Sub
visite: http://www.jacobsamuel.no.comunidades.net
Paulo -
quarta-feira, 3 de fevereiro de 2010 10:42Então Métodos ou procedimentos são ações da classe, no seu caso o Form. Prodem ser do tipo Sub ou Function.
O que eu te falei é para retirar estas declarações fora do método (form Load):
Dim da As OleDbDataAdapterDim ds As DataSet = New DataSet
O motivo é que você tem acesso a esses objetos em qualquer outro método. Ex: Click de um botão.
Essa declaração ficaria logo abaixo do Public Class SeuForm
Com isso Você terá acesso ao seu dataset em outros métodos como eu já disse assim como ao seu DataAdapter, podendo invocar o método Update dele para atualizar os registros do DataSet.
[]s.
Alan.
Se esta resposta solucionou sua dúvida, “Marque como Resposta” -
quarta-feira, 3 de fevereiro de 2010 15:46JACOB...vlw pela ajuda + n estou inserindo dados apartir d uma TXT e sim atualizando os dados alterados na grid.
ALAN.... eh somente o DS e DA q deve jogar fora do metodo? segui sua orientação e declarei o DS e DA fora do metodo mais continuou dando o mesmo erro no UPDATE:
"Update requires a valid UpdateCommand when passed DataRow collection with modified rows."
abçs -
quarta-feira, 3 de fevereiro de 2010 16:07
Olá, Ricardo, desculpe eu esqueci um detalhe:
Você deve criar um CommandBuilder antes de fazer o Update:
No Botão Atualizar defica:
Dim cmb As New SqlCommandBuilder(da)
depois atualize:
da.Update(ds, "cooperativa")
Um Exempo para que você entenda é do Macoratti, bem explicado:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim strConexao As String strConexao = "server=(local);Trusted_Connection=yes;database=Teste" Dim objConexao As New SqlConnection(strConexao) Try objConexao.Open() Catch ex As Exception MsgBox(ex.GetBaseException) End Try ' Cria uma instância do objeto DataAdapter. Dim daClientes As New SqlDataAdapter("Select * From Clientes", objConexao) ' Cria uma instância de um DataSet, e retorna dados da tabela clientes Dim dsTeste As New DataSet("Clientes") daClientes.FillSchema(dsTeste, SchemaType.Source, "Clientes") daClientes.Fill(dsTeste, "Clientes") '--inserindo o registro no DataSet---------------------------------------------------------- MsgBox("Agora vou inserir um registro no DataSet", MsgBoxStyle.Information, "Inserir Registro") Dim tblClientes As DataTable tblClientes = dsTeste.Tables("Clientes") ' Obtem um novo objeto DataRow do DataTable Dim drAtual As DataRow drAtual = tblClientes.NewRow() '' Define os novos valores de DataRow drAtual("Codigo") = 7 drAtual("Nome") = "Testolina Testa" drAtual("Endereco") = "Rua Moscou , 109" ' Insere o novo objeto via método Add da coleção DataTable.Rows tblClientes.Rows.Add(drAtual) MsgBox("Registro incluído com sucesso na tabela Clientes.", MsgBoxStyle.Information, "Incluindo dados no DataSet") '---------codigo para alterar os dados inseridos ---------------------------------------------- MsgBox("Vou alterar o atual no DataSet", MsgBoxStyle.Information, "Alterar Registro") drAtual.BeginEdit() drAtual("nome") = "Yuri Gagarin" drAtual("endereco") = "R Lua Nova , 230" drAtual.EndEdit() MsgBox("Registro alterado com sucesso !", MsgBoxStyle.Information, "Alterando dados no DataSet") '-----------atualiza a tabela clientes do banco de dados Teste no SQL Server 'Atualiza o SQL Server Dim objCommandBuilder As New SqlCommandBuilder(daClientes) daClientes.Update(dsTeste, "Clientes") MsgBox("A operações feitas no DataSet irão atualizar o SQL Server !" & Chr(13) & Chr(13) & " Verifique os dados no Servidor", MsgBoxStyle.Exclamation, "Atualização SQL Server") 'exibe os dados do DataSet DataGrid1.DataSource = dsTeste End Sub End Class
Referências:
http://social.msdn.microsoft.com/Forums/en/adodotnetdataproviders/thread/666835a2-50ec-415f-ba30-bb80ca51c91b
http://social.msdn.microsoft.com/forums/pt-BR/vscsharppt/thread/a6ea5243-50f8-41e4-8963-7155bce29aa4/
http://social.msdn.microsoft.com/forums/pt-BR/vsvbasicpt/thread/72cbff25-fd59-4cc6-a8f7-d614bfcec415/
http://macoratti.net/vbn_upds.htm
http://macoratti.net/vbn_dst1.htm
[]s.
Alan.
Se esta resposta solucionou sua dúvida, “Marque como Resposta”- Sugerido como Resposta Alan Cossari quinta-feira, 4 de fevereiro de 2010 17:18
- Marcado como Resposta Fernanda SimõesModerator quarta-feira, 17 de fevereiro de 2010 12:03
-
sexta-feira, 5 de fevereiro de 2010 00:38alan ... estou usando conexão com access, n tenho essa opção para mim, o mais proximo que aparece é OleDbCommand, e ele n aceita
Dim cmd As OleDbCommand(da)
abçs -
sexta-feira, 5 de fevereiro de 2010 10:19
-
sexta-feira, 5 de fevereiro de 2010 15:47Alan n aparece OLEDBCOMMANDBUILDER para mim somente OLEDBCOMMAND
Veja o que estou importando:
System
System.data
system.data.oledb -
sexta-feira, 5 de fevereiro de 2010 15:50
-
sexta-feira, 5 de fevereiro de 2010 19:12Alan deu erro: "Erro de sintaxe na instrução UPDATE" (T_T) ...
O exemplo do macoratti não permite o usuario selecionar nd, ele faz uma alteração já programada mais copiei o Cod. fazendo as modificações para OLEDB e tinha dado o mesmo erro então fui na tabela e excluir uma coluna que tinha a mais e não era mensionada no cod. e deu certo.
não tem uma forma de eu adaptar o cod. do mactoratti e, ao inves de atribuir os dados via cod. ao DataRow o cod. ser adicionado altomaticamente quando houver alteração na grid? c isso for possivel creio q resolveria o problema. -
sábado, 6 de fevereiro de 2010 17:19Alan... descobri que n da esse erro quando n faço alteração na coluna de checkbox ou seja, somente quando vou fazer alterações do checkbox que da erro.
o pode ser isso? -
sábado, 6 de fevereiro de 2010 19:45
-
segunda-feira, 8 de fevereiro de 2010 19:54Alan, como vc deve te reparado sou novato e n tenho mto experiencia, coloquei o break point mais como faço para ver a sintaxa?
o erro da na seguinte linha: "da.Update(ds, "Cooperativa")"
qnd passo o cursor por cima do DS aparece umas informações mais n encontrei a query do update e no DA n acontece nd.
abçs -
terça-feira, 9 de fevereiro de 2010 10:38
Não é nessa linha é quando ele vai executar, debugue com o F11 que você acha.
Vai estar em um Bloco parecido com isto:
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute()> _ Protected Friend ReadOnly Property Adapter() As Global.System.Data.SqlClient.SqlDataAdapter Get If (Me._adapter Is Nothing) Then Me.InitAdapter End If Return Me._adapter End Get End PropertyNo Me._adapter você terá acesso, ao UpdateCommand, SelectCommand, DeleteCommand e InsertCommand.
[]s.
Alan.
Se esta resposta solucionou sua dúvida, “Marque como Resposta” -
terça-feira, 9 de fevereiro de 2010 11:51Alan... fiz com F11 ele foi mostrando o codigo mais chegou na linha do update deu erro e n mostrou o cod q vc disse
-
terça-feira, 9 de fevereiro de 2010 12:02Certo, então tente isto. No breakpoint no mesmo lugar que você deixou, abra a janela Immediate Ctrl + Alt + I e digite
?cmd.GetUpdateCommand().CommandText
e precione enter.
Deve aprerecer o UpdateCommand.
Se não funcionar, não sei mais como te ajudar.
[]s.
Alan.
Se esta resposta solucionou sua dúvida, “Marque como Resposta” -
terça-feira, 9 de fevereiro de 2010 12:03
Segue um link de referência para você se orientar:
http://support.microsoft.com/kb/308507
[]s.
Alan.
Se esta resposta solucionou sua dúvida, “Marque como Resposta”- Marcado como Resposta Fernanda SimõesModerator quarta-feira, 17 de fevereiro de 2010 12:03
-
terça-feira, 9 de fevereiro de 2010 12:13Alan.. deu erro: "'cmd.GetUpdateCommand' is not declared or the module containing it is not loaded in the debugging session."
mais vlw ae pela atenção vo da uma olhada no link... o estranho eh q so da erro qnd faz alteração na coluna do checkbox
abçs e obrigado mais uma vez

