GRAVAR BANCO ACCESS COM DATAGRIDVIEW

TLOUREIRO82 12/03/2012 16:32:50
#396999
Prezados,

Tenho um datagridview onde é carregada com dados de uma planilha do excel. Depois que carrego quero gravar no banco do access. Como faço para gravar linha a linha?
KERPLUNK 12/03/2012 16:35:44
#397001
Resposta escolhida
DataGridView não é uma fonte de dados, não tente comparar a mesma à uma fonte de dados. Leia os dados do excel e apresente no seu DataGridView, mas para gravar mesmo no banco de dados, use o arquivo excel como fonte de dados.
JABA 12/03/2012 16:49:59
#397005

Se voce não tem uma estrutura de bando de dados criada, voce poderia criar as colunas do banco a partir do cabeçalho das colunas do grid . Depois é só utilizar o Insert, Update e Delete para modificações.

vlw
TLOUREIRO82 12/03/2012 22:01:20
#397016
Eu já tenho o banco com as colunas. O que me falta é gravar as linhas do grid no banco... eu tenho o comando INSERT, mas como eu posso identificar as linhas e colunas do grid?
KERPLUNK 12/03/2012 22:09:43
#397017
Como você preenche o grid? Da mesma maneira que você percorre a planilha para preencher o grid, percorra para criar os comandos de insert...
MARCELOSN 13/03/2012 08:05:21
#397026
Bom dia


Veja se ajuda este exemplo onde e feito a inserção do arquivo XLS para Grid e do Grid para o Banco de Dados



ASP .NET - Exportando Excel para GridView e Salvando no SQL Serve
http://www.macoratti.net/11/05/asp_xls2.htm
TLOUREIRO82 13/03/2012 11:00:04
#397037
Fiz como o KERPLUNK falou... da mesma maneira que carrego a grid faço a carga no banco... mas não sei onde estou errando pq está carregando somente a ultima linha da planilha ou dá o seguinte erro [Ô]this row already belongs to this table[Ô] .... segue o código

Try
Me.Cursor = Cursors.WaitCursor


da1.Fill(ds1, [Ô]Plan1[Ô])

For i = 0 To ds1.Tables([Ô]Plan1[Ô]).Rows.Count - 1

INSERIR([Ô]MATRICULA[Ô]) = ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]MATRICULA[Ô])
INSERIR([Ô]NOME[Ô]) = ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]NOME[Ô])
INSERIR([Ô]ADMISSAO[Ô]) = ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]ADMISSÃO[Ô])
INSERIR([Ô]GG[Ô]) = ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]GG[Ô])
INSERIR([Ô]GA[Ô]) = ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]GA[Ô])
INSERIR([Ô]SUPERVISAO[Ô]) = ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]SUPERVISÃO[Ô])
INSERIR([Ô]DESCRICAO[Ô]) = ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]CARGO[Ô])
INSERIR([Ô]POSICAO[Ô]) = ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]POSIÇÃO[Ô])
INSERIR([Ô]SALARIO[Ô]) = ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]SALÁRIO[Ô])
INSERIR([Ô]ULTIMA_MOV[Ô]) = ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]ULTIMA_MOV[Ô])

ds.Tables([Ô]COMITE[Ô]).Rows.Add(INSERIR)

da.Update(ds, [Ô]COMITE[Ô])

Next


Me.Cursor = Cursors.Default
MsgBox([Ô]ok[Ô])


Catch ex As Exception

Me.Cursor = Cursors.Default
MessageBox.Show([Ô]Erro na Importação[Ô] & Chr(13) & [Ô]Motivo:Planilha de Carga diferente[Ô])


KERPLUNK 13/03/2012 11:24:24
#397050
O que faz a função INSERIR?
TLOUREIRO82 13/03/2012 11:28:30
#397052
Dim conexao As New OleDb.OleDbConnection()

conexao.ConnectionString = ([Ô]Provider=Microsoft.Jet.OLEDB.4.0 ; Data Source=[Ô] & BANCO & [Ô]; jet oledb:database password=[Ô] & SENHA & [Ô][Ô])
Dim da As New OleDb.OleDbDataAdapter([Ô]SELECT * FROM COMITE[Ô], conexao)
Dim ds As New DataSet([Ô]COMITE[Ô])

da.FillSchema(ds, SchemaType.Source, [Ô]COMITE[Ô])
da.Fill(ds, [Ô]COMITE[Ô])
Dim INSERIR As DataRow
INSERIR = ds.Tables([Ô]COMITE[Ô]).NewRow()
KERPLUNK 13/03/2012 14:35:27
#397068
Bom, tem duas alternativas:
1 - Crie uma classe que contenha as propriedades referentes às colunas da sua planilha(o ideal)
2 - Crie uma função que receba todos os valores de cada coluna, mais ou menos assim:
Public Sub Insere(Matricula As String, Nome As String...todos os outros parâmetros)

Dim conexao As New OleDb.OleDbConnection()

conexao.ConnectionString = ([Ô]Provider=Microsoft.Jet.OLEDB.4.0 ; Data Source=[Ô] & BANCO & [Ô]; jet oledb:database password=[Ô] & SENHA & [Ô][Ô])
Dim comando As New OleDbCommand([Ô]Insert Into Comite(CampoMatricula, CampoNome, ...Todos os outros campos) Values({Matricula}, {Nome}....Todos os outros valores)[Ô], conexao)
comando.CommandText = comando.CommandText.Replace([Ô]{Matricula}[Ô], Matricula)
comando.CommandText = comando.CommandText.Replace([Ô]{Nome}[Ô], Nome)
(O MESMO PARA COMANDO ACIMA PARA TODOS OS CAMPOS)

comando.ExecuteNonQuery()

End Sub


Assim, seria um jeito simples(apesar de tecnicamente incorreto) de se fazer. Espero que tenha entendido as partes [Ô]Todos os campos[Ô] [Ô]todos os outros valores[Ô]... não são parte do código, são pra você substituir com o conteúdo apropriado...
TLOUREIRO82 13/03/2012 15:15:31
#397080
KERPLUNK com sua ajuda consegui arrumar... segue o código... Valew a todos

Try
Me.Cursor = Cursors.WaitCursor

da1.Fill(ds1, [Ô]Plan1[Ô])


For i = 0 To ds1.Tables([Ô]Plan1[Ô]).Rows.Count - 1



comando = New OleDb.OleDbCommand([Ô]insert into COMITE (MATRICULA, NOME, ADMISSAO, GG, GA, SUPERVISAO, DESCRICAO, POSICAO, SALARIO, ULTIMA_MOV) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)[Ô], conect)
comando.Parameters.AddWithValue([Ô]?[Ô], ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]MATRICULA[Ô]))
comando.Parameters.AddWithValue([Ô]?[Ô], ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]NOME[Ô]))
comando.Parameters.AddWithValue([Ô]?[Ô], FormatDateTime(ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]ADMISSÃO[Ô]), DateFormat.ShortDate))
comando.Parameters.AddWithValue([Ô]?[Ô], ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]GG[Ô]))
comando.Parameters.AddWithValue([Ô]?[Ô], ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]GA[Ô]))
comando.Parameters.AddWithValue([Ô]?[Ô], ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]SUPERVISÃO[Ô]))
comando.Parameters.AddWithValue([Ô]?[Ô], ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]CARGO[Ô]))
comando.Parameters.AddWithValue([Ô]?[Ô], ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]POSIÇÃO[Ô]))
comando.Parameters.AddWithValue([Ô]?[Ô], ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]SALÁRIO[Ô]))
comando.Parameters.AddWithValue([Ô]?[Ô], ds1.Tables([Ô]Plan1[Ô]).Rows(i)([Ô]ULTIMA_MOV[Ô]))


comando.ExecuteNonQuery()

Next

Me.Cursor = Cursors.Default
MsgBox([Ô]Arquivo carregado com sucesso[Ô], MsgBoxStyle.MsgBoxRight)

Catch ex As Exception

Me.Cursor = Cursors.Default
MsgBox([Ô]Erro de Processamento[Ô] & Chr(13) & [Ô]Planiha de carga fora do padrão[Ô], MsgBoxStyle.MsgBoxRight)


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