none
Gravar dados datagridview para Bancos de dados

    Question

  • Olá a todos, preciso de ajuda para gravar dados de um datagrid para o banco de dados. Estou criando um programa de orcamento. Fiz a criacao do banco de dados normalmente pelo visual basic 2008 , banco orcamento.mdf.

    Quero a principio atualizar a tabela servicos que criei. Criei o data source - servicosDS. Em seguida arrastei para o form. Foram criados : servicoDS, servicosbindingsource, servicostableradapter, tableadaptermaneger e servicosbindignavigator.

    Quando rodo o programa funciona beleza. No botao gravar do servicosbindingnavigator grava normalmente no datagriview . Quero gravar as alteracoes feitas no datagridview na tabela servicos.

    já fiz várias tentativas mas sem sucesso

    Gostaria de uma ajuda

    Estou iniciando agora.

    grato

     

     

    Friday, October 08, 2010 5:40 PM

Answers

  • Olá a todos....

    Após me matar algumas horas resolvi o problema, se você utiliza VB.NET 2008 faça o seguinte tanto para mdf ou sdf.

    Em sua pasta onde esta seu projeto localize o arquivo app.config, abra utilizando o notepad e altere a seguinte linha:

    ERRADO - 

    connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\teste.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

    CORRETO

    connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Leandro\Documents\teste.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

    O problema esta nesta maldita instrução |DataDirectory| que faz seu programa.exe buscar na raiz do EXE e não no local onde esta o banco, como ele já havia feito uma cópia do bando para a pasta \bin\debug toda vez ele busca o banco "copia", após feito isso apague o banco "copia" da pasta debug.

    Espero ter ajudado

     

    Wednesday, November 16, 2011 2:30 AM
  • Tens de marcar como copy always. Depois de fazer isto, corre a tua aplicao mas nao facas nenhuma alteracao ou enseri nenhum registo. Para o programa e muda para copy always new. corre o programa denovo. Apartir dai podes enserir, modificar registos.

    Apenas uma dica, se queres usar base de dados sql, cria com SqlServer Management tool. Depois de criar importa a base de dados na sua aplicao via wizard.

    funciona sem problemas.

     


    Just Be Humble Malange!
    Wednesday, October 20, 2010 7:59 PM
  •                   Olá, amigos fiz varios testes. Fiz o que malange indicou mas mesmo assim nada. Percebi o seguinte : quando criamos a tabela pelo proprio visua studio ele grava os dados em uma cópia da tabela dentro da pasta - bin - debug.

                      Logo não dá para verificar os dados alterados. Quando roda o programa ele abre a tabela que tu criou mas ao gravar joga os dados na tabela na pasta bin. Para verificar tem que abrir uma conexao aou abri a tabela no manegement studio. Logo acho ruim pois não verifica as alteraçoes.

                   Quando usei um banco do access funciona beleza ou seja voce faz o teste e verfica na tabela ela está alterada. ok

                    Fiz outro teste como Malange indicou instalei o manegement tool studio e criei uma tabela. Tem um detalhe muito importante! Deve copiar o banco de dados do local que foi criado , normalmente dentro de pasta app data , para outra pasta qualquer. Aí faz a conexao normalmente.

                       Quando for criar o dataset ele faz uma pergunta : se quer copiar o banco de dados para a aplicacao. Deve responder a resposta como "NÃO" assim toda alteração que fizer na tabela você verá imediatamente o resultado, sem problemas. Fiz aqui e deu certo.

    Se fizer normalmente voçê faz a gravação ele grava no reserva e mostra o atual. Fica  aquela sensação de que não está funcionando.  Pelo menos foi o que percebi.

                 Estou usando o banco de dados do access e vou continuar com ele.

              Agora já estou com outra dúvida sobre copia de registro do combobox e do datagridview que estão selecionado para uma tabela pedido. Mas irei pesquisar no forum e se nao encontrar colocarei um novo tópico para não misturar os assuntos.

    Acho que o problema foi resolvido.

    PS: Os update all nas tabelas já estavam sendo efetuadas. Os dados estavam sendo inseridos mas existiu a dificuldade para verficar. Agora tudo ok

    Obrigado pelas respostas

     

    Tuesday, October 26, 2010 1:20 PM

All replies

  • @Valdimir

    o que acontece quando voce grava o faz click no botao update ou gravar?

    Quando se usa wizard e criada duas tabelas. Uma para deployment quando voce instalar o teu programa no cliente, o outra base de dados serve de teste.

    Se voce que ver as alteracoes, faz click na tua base de dados no teu lado direito e nas propiedades escolhe copy to output directory ---escolhe a opcao ----copy always, copy if newer.

    ai voce faz update da tua base de dados.


    Just Be Humble Malange!
    Friday, October 08, 2010 6:18 PM
  • Obrigado pelas respostas. Alan vou revisar todos os links. Depois coloco a resposta apesar de tê-los vistos anteriormente.

    Malange, Já vem no botao Save o seguinte :

    Me

     

    .Validate()

     

    Me.ServicosBindingSource.EndEdit()

     

    Me.TableAdapterManager.UpdateAll(Me.ServicosDS)

    Ao clicar ele gravar os dados no datagridview, fecho o programa abro em seguida e está gravado no datagridview. Mas na tabela servicos no caso, não grava nada.

    Alterei como sugeriu a opcao do banco de dados para copy if newer e nada aconteceu. Já estava selecionada a opção copy always.

    Fiz outro com exemplo de macoratti, colocando no baoto Save o seguinte:

    Me

     

    .Validate()

     

    Me.ServicosBindingSource.EndEdit()

     

    Try

    db.SubmitChanges()

    MsgBox(

    "Operacao salva com sucesso.")

     

    Catch ex As Exception

    MsgBox(ex.Message)

     

    End Try

    Apresenta a resposta que "operacao salva com sucesso" no entanto nao grava nada na tabela.

    Apesar da tabela está ligada ao dataset e ao datagridview posso acrescento um dado direto na tabela esse dado aparece no datagridview mas o inverso nao acontece. Parece que falta fazer uma conexao do datagridview para a tabela e informar a tabela para aceitar esses dados.

    Sem mais...

    Saturday, October 09, 2010 2:18 AM
  • Quando se usa wizard e criada duas tabelas. Uma para deployment quando voce instalar o teu programa no cliente, o outra base de dados serve de teste.

    Se voce que ver as alteracoes, faz click na tua base de dados no teu lado direito e nas propiedades escolhe copy to output directory ---escolhe a opcao ----copy always, copy if newer.

    ai voce faz update da tua base de dados. 


    Just Be Humble Malange!
    Saturday, October 09, 2010 10:03 PM
  •                           Olá Malange já fiz o que pediste mas nada acontece. Fiz um teste com um programa do macorati aonde ele diz que grava no banco de dados. Mas ao realizar acontece a mesma coisa : grava no datagridview mas grava na tabela correspondente.

                          Pelo que percebi todos os testes que fiz acontece isso, inclusive um teste simples criando uma tabela, criando o dataset e arrastando para o form. Insiro dados no datagrid mas nao vai para a tabela. Parece que o banco de dados está bloqueado nao aceita nada apesar de nao indicar erro.

    A conexao que está no banco de dados é essa : Data Source=.\SQLEXPRESS;AttachDbFilename="E:\ORCAMENTO DE OBRAS\ORCAMENTO DE OBRAS\Orcamento.mdf";Integrated Security=True;Connect Timeout=30;User Instance=True

    Creio que falta auorizacao para o banco de dados receber os dados, nao seria isso?

     

    grato

     

     

    Sunday, October 10, 2010 5:15 PM
  •        Olá, Fiz um teste. Criei um banco de dados no Access com uma tabela para teste. Fiz um programa simples acrescentando dataset e arrastando essa tabela para o forma.

            Funcionou perfeitamente. Ao inserir um registro novo ficou gravado na tabela. Mas não está acontencendo quando o bando é feito sql do proprio visual basic.

            O primeiro teste estava fazendo com banco.mdf nao funciona, nao grava no banco de dados. Fiz um segundo teste criando um banco com extensão .sdf e tambem nao grava no banco.

             Mas no tableadapter fiz uma consulta com Insert e na tela que você faz o teste , ela funcionou perfeitamente. Inserir um valor e gravou os dados na tabela.

              Mas quando arrasto o dataset para o form e tento inserir o registro fica só no datagridview , ele não envia para a tabela, ou a tabela nao aceitou o registro.       

             Creio que no visual basic 2008 o banco de dado nao está liberado para receber os dados.

             Ficou complicado para mim porque no tableadapter fazendo o teste ela aceita mas fora disso, nega o acesso. Percebi que o problema está na configuração do sqlserver do vb.

             Alguma dica. grato

    Monday, October 11, 2010 12:43 AM
  • boas, possivelmente falta executar o metodo update do dataadapter.
    espero ter ajudado.
    Monday, October 11, 2010 8:30 AM
  •        Olá, Fiz um teste. Criei um banco de dados no Access com uma tabela para teste. Fiz um programa simples acrescentando dataset e arrastando essa tabela para o forma.

            Funcionou perfeitamente. Ao inserir um registro novo ficou gravado na tabela. Mas não está acontencendo quando o bando é feito sql do proprio visual basic.

            O primeiro teste estava fazendo com banco.mdf nao funciona, nao grava no banco de dados. Fiz um segundo teste criando um banco com extensão .sdf e tambem nao grava no banco.

             Mas no tableadapter fiz uma consulta com Insert e na tela que você faz o teste , ela funcionou perfeitamente. Inserir um valor e gravou os dados na tabela.

              Mas quando arrasto o dataset para o form e tento inserir o registro fica só no datagridview , ele não envia para a tabela, ou a tabela nao aceitou o registro.       

             Creio que no visual basic 2008 o banco de dado nao está liberado para receber os dados.

             Ficou complicado para mim porque no tableadapter fazendo o teste ela aceita mas fora disso, nega o acesso. Percebi que o problema está na configuração do sqlserver do vb.

             Alguma dica. grato

    Remove o timeout e veja o que acontece.

     


    Just Be Humble Malange!
    Monday, October 11, 2010 8:44 PM
  • Tens de marcar como copy always. Depois de fazer isto, corre a tua aplicao mas nao facas nenhuma alteracao ou enseri nenhum registo. Para o programa e muda para copy always new. corre o programa denovo. Apartir dai podes enserir, modificar registos.

    Apenas uma dica, se queres usar base de dados sql, cria com SqlServer Management tool. Depois de criar importa a base de dados na sua aplicao via wizard.

    funciona sem problemas.

     


    Just Be Humble Malange!
    Wednesday, October 20, 2010 7:59 PM
  •                   Olá, amigos fiz varios testes. Fiz o que malange indicou mas mesmo assim nada. Percebi o seguinte : quando criamos a tabela pelo proprio visua studio ele grava os dados em uma cópia da tabela dentro da pasta - bin - debug.

                      Logo não dá para verificar os dados alterados. Quando roda o programa ele abre a tabela que tu criou mas ao gravar joga os dados na tabela na pasta bin. Para verificar tem que abrir uma conexao aou abri a tabela no manegement studio. Logo acho ruim pois não verifica as alteraçoes.

                   Quando usei um banco do access funciona beleza ou seja voce faz o teste e verfica na tabela ela está alterada. ok

                    Fiz outro teste como Malange indicou instalei o manegement tool studio e criei uma tabela. Tem um detalhe muito importante! Deve copiar o banco de dados do local que foi criado , normalmente dentro de pasta app data , para outra pasta qualquer. Aí faz a conexao normalmente.

                       Quando for criar o dataset ele faz uma pergunta : se quer copiar o banco de dados para a aplicacao. Deve responder a resposta como "NÃO" assim toda alteração que fizer na tabela você verá imediatamente o resultado, sem problemas. Fiz aqui e deu certo.

    Se fizer normalmente voçê faz a gravação ele grava no reserva e mostra o atual. Fica  aquela sensação de que não está funcionando.  Pelo menos foi o que percebi.

                 Estou usando o banco de dados do access e vou continuar com ele.

              Agora já estou com outra dúvida sobre copia de registro do combobox e do datagridview que estão selecionado para uma tabela pedido. Mas irei pesquisar no forum e se nao encontrar colocarei um novo tópico para não misturar os assuntos.

    Acho que o problema foi resolvido.

    PS: Os update all nas tabelas já estavam sendo efetuadas. Os dados estavam sendo inseridos mas existiu a dificuldade para verficar. Agora tudo ok

    Obrigado pelas respostas

     

    Tuesday, October 26, 2010 1:20 PM
  • Olá a todos....

    Após me matar algumas horas resolvi o problema, se você utiliza VB.NET 2008 faça o seguinte tanto para mdf ou sdf.

    Em sua pasta onde esta seu projeto localize o arquivo app.config, abra utilizando o notepad e altere a seguinte linha:

    ERRADO - 

    connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\teste.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

    CORRETO

    connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Leandro\Documents\teste.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

    O problema esta nesta maldita instrução |DataDirectory| que faz seu programa.exe buscar na raiz do EXE e não no local onde esta o banco, como ele já havia feito uma cópia do bando para a pasta \bin\debug toda vez ele busca o banco "copia", após feito isso apague o banco "copia" da pasta debug.

    Espero ter ajudado

     

    Wednesday, November 16, 2011 2:30 AM