GRAVAR BANCO ACCESS COM DATAGRIDVIEW
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?
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?
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.
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
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?
Como você preenche o grid? Da mesma maneira que você percorre a planilha para preencher o grid, percorra para criar os comandos de insert...
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
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
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[Ô])
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[Ô])
O que faz a função INSERIR?
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()
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()
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...
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...
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
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