Ir para conteúdo


Revista PROGRAMAR - Edição 45 (Maio 2014): Download já disponível! Visita também o novo website da revista.

- - - - -

DataGridView - Gravar conteúdo na base dados


  • Por favor inicie sessão para responder
11 respostas a este tópico

#1 PMSF

PMSF

    void

  • Membro
  • PipPip
  • 86 mensagens

Publicado 09 de Fevereiro de 2012 - 13:25

bom dia
após importar dados do ficheiro .txt tenho que grava-los na base de dados (access).
já gravo linha a linha, mas demora um pouco.

é possivel não o fazer linha a linha?!
do genero actualizar base dados?

obrigado

#2 HQuintas

HQuintas

    Boolean User

  • Membro
  • PipPipPip
  • 143 mensagens

Publicado 09 de Fevereiro de 2012 - 14:10

Sim  é possível, eu faço assim:

Código (vb.net):
Dim ds As DataSet
Dim da As SQLiteDataAdapter

Private Sub gravar()
Dim cb As New SQLiteCommandBuilder(da) 'Cria um comando que te permite actualizar o dataset
da.Update(ds, "Obras") 'Actualiza na tabela as alterações efectuadas
end sub


#3 bioshock

bioshock

    Unsigned User

  • Wiki
  • PipPipPipPipPipPip
  • 4687 mensagens

Publicado 09 de Fevereiro de 2012 - 14:44

http://wiki.portugal-a-programar.org/dev_net:vb.net:access

#4 PMSF

PMSF

    void

  • Membro
  • PipPip
  • 86 mensagens

Publicado 09 de Fevereiro de 2012 - 14:59

ok, vou ler o tópico, mas para isso é necessário q esteja a utilizar um dataset, correcto?

é que neste momento, todos os dados são passados sem dataset.
(por comando sql: "strSql = "insert into tbl" & cbxFarmacia.Text & " (CPR, NOM, FAP) value ... "

se sim como passo os dados que estão na datagridview para o dataset e depois para a tabela dados?!

como disse, vou ler o tópico e tentar obter respostas...

#5 José Lopes

José Lopes

    CRLF

  • Membro
  • PipPipPipPipPip
  • 857 mensagens

Publicado 09 de Fevereiro de 2012 - 15:01

Em termos objectivos...
Se não estou em erro tu tens que carregar o datagrid baseado no dataset, provavelmente por databinding.
Depois todas as alterações que fizeres estão a ser  feitas em memória em cima do datagrid. No final apenas tens que fazer o update do dataset que está a ser utilizado no datagrid...

#6 HQuintas

HQuintas

    Boolean User

  • Membro
  • PipPipPip
  • 143 mensagens

Publicado 09 de Fevereiro de 2012 - 15:08

Talvez te ajude melhor... http://www.jorgepaulino.com/2008/04/vbnet-utilizando-o-controlo.html
a mim ajudou...

#7 PMSF

PMSF

    void

  • Membro
  • PipPip
  • 86 mensagens

Publicado 09 de Fevereiro de 2012 - 15:19

já li esses tópicos e sei que faz isso se, como dizem, tivesse carregado o datagridview pelo dataset, mas não foi isso que aconteceu.

foi carregado através de um ficheiro .txt exportado de outro programa.

o metodo que utilizo também grava bem os dados, a questão é que o faz linha a linha (os dados do .txt têm 19000 linhas) e procurava uma forma mais rápida de o fazer...

estava a pensar criar um dataset vazio, carregar o .txt, actualizar o dataset e passá-lo para a base de dados... mas assim tenho que passar todas as colunas para a base de dados  :hmm:

#8 José Lopes

José Lopes

    CRLF

  • Membro
  • PipPipPipPipPip
  • 857 mensagens

Publicado 09 de Fevereiro de 2012 - 15:20

Parece-me ser esse o caminho......

#9 bioshock

bioshock

    Unsigned User

  • Wiki
  • PipPipPipPipPipPip
  • 4687 mensagens

Publicado 09 de Fevereiro de 2012 - 15:53

Não creio que isso seja alternativa. Mesmo depois do DataSet estar carregado com as informações do teu .txt, a passagem dos campos para a base de dados será também lenta. Mas é uma questão de experimentares.

A passagem de muita informação para determinado sítio é sempre lenta, e vai depender muito da máquina que possuis. Já tens algum método para ler/escrever ficheiros .txt e/ou inserir na base de dados?

#10 José Lopes

José Lopes

    CRLF

  • Membro
  • PipPipPipPipPip
  • 857 mensagens

Publicado 09 de Fevereiro de 2012 - 16:09

Pois...
Os meus comentários anteriores presumiram sempre que o objectivo era efectivamente carregar o dataset para a base de dados... até porque:

1 - 19000 registos, são sempre 19000 registos... depende de que SGBD estamos a falar, qual a carga da máquina, o tamanho e tipo de cada um dos campos... etc... etc... etc... leva o seu tempo...não é instantâneo.

2 - Por outro lado, a verdade é que nessa abordagem, vais mesmo ter que escrever os dados para dois lados....  se carregares o datagrid directamente pela leitura do txt, vais ter que ler o datagrid para o dataset para depois ires à base de dados...

3 - Alerto ainda que tu não estás num operação de update onde  utilização do dataset tem vantagens adicionais porque segundo me parece ele identifica os registos que foram alterados e só actualiza esses...o que não é o caso..pois tu vais mesmo é fazer insert's...

Enfim...se calhar estás mesmo a usar o melhor método... tens que perceber é se o tempo é ou não aceitável...

#11 arrelialp

arrelialp

    Boolean User

  • Membro
  • PipPipPip
  • 109 mensagens

Publicado 21 de Março de 2012 - 12:13

E se pensares noutra abordagem. Teres os teus dados em excel e depois para datagridview: http://wiki.portugal-a-programar.org/dev_net:vb.net:excel_para_datagridview

#12 PMSF

PMSF

    void

  • Membro
  • PipPip
  • 86 mensagens

Publicado 26 de Março de 2012 - 16:17

Obrigado por todas as ideias partilhadas.
optei pela seguinte ordem de processos:
1º Abrir ficheiro .txt com dados no formato CSV, e passá-los para uma DataTable
2º Preencher a DataGridView com os dados da DataTable
3º Gravar para a base de dados da aplicação os dados da DataGridView

como o processo é demorado, optei por apresentar uma ProgressBar para o utilizador ter uma confirmação visual que a aplicação está a correr, e quanto falta para acabar.