INSERT COM DATAGRIDVIEW

JABA 25/10/2015 16:18:27
#453029
Eu estou fazendo de cabeça, por isso tantos erros. Tente assim:

Private Sub SalvaGridAccess()

[txt-color=#e80000]dim con As OleDbConnection = GetConnection()[/txt-color]
[txt-color=#e80000]Dim Transacao As OleDbTransaction[/txt-color]

Try
con.Open()

[txt-color=#e80000]Transacao = con.BeginTransaction()[/txt-color]

dim cmd As New OleDbCommand
cmd.Connection = con

cmd.Transaction = Transacao

cmd.CommandType = CommandType.Text
cmd.CommandText = [Ô]INSERT INTO ContasApagar (IDLancamento, DataPagamento, Valor)[Ô] & _
[Ô]VALUES (@IDLancamento, @DataPagamento, @Valor)[Ô]

For i As Integer = 0 To DataGridView1.Rows.Count - 1
cmd.Parameters.Clear()
cmd.Parameters.Add([Ô]@IDLancamento[Ô], OleDbType.VarChar).Value = DataGridView1.Rows.Item(i).Cells(0).Value.ToString
cmd.Parameters.Add([Ô]@DataPagamento[Ô], OleDbType.Date).Value = DataGridView1.Rows.Item(i).Cells(1).Value
cmd.Parameters.Add([Ô]@Valor[Ô], OleDbType.Double).Value = DataGridView1.Rows.Item(i).Cells(2).Value
cmd.ExecuteNonQuery()
Next i

Transacao.Commit()

Catch ex As Exception
Transacao.Rollback()
MessageBox.Show(ex.Message)
Finally
con.Close()
End Try
End Sub

NICKOSOFT 25/10/2015 16:28:31
#453030
deixa ver....
vc diz q os dados vem de texts, então imagino q vc valide os dados e insira em um datatable q sera a fonte de dados do grid, se vc faz esse caminho, os dados foram validados na inclusão no datatable, então pq não faz o laco no datatable onde tem certeza dos dados serem validos?

agora se dos texts vc adiciona direto no grid, já são outros 500....
ACCIOLLY 25/10/2015 16:37:10
#453031
Private Sub SalvaGridAccess()
Try
Using con As OleDbConnection = GetConnection()
con.Open()
Using cmd As New OleDbCommand
cmd.Connection = con
cmd.CommandType = CommandType.Text

Dim SQL as String = null
For i As Integer = 0 To DataGridView1.Rows.Count - 1
cmd.Parameters.Clear()
SQL =+ [Ô]INSERT INTO ContasApagar (IDLancamento, DataPagamento, Valor)[Ô] & _
[Ô]VALUES ([ô][Ô] & DataGridView1.Rows.Item(i).Cells(0).Value.ToString & [Ô][ô],[Ô] &_
[Ô][ô][Ô] &DataGridView1.Rows.Item(i).Cells(1).Value & [Ô][ô],[ô][Ô] & DataGridView1.Rows.Item(i).Cells(2).Value & [Ô][ô]);[Ô]

Next i
cmd.CommandText = SQL
cmd.ExecuteNonQuery()
End Using
End Using
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub


repare que o cmd.ExecuteNonQuery fica fora do loop. Aqui se vc quizer aperfeiçoar é só colocar um tratamento dentro do loop quanto a questão de datas
W8.LISBOA 25/10/2015 16:56:10
#453032
A todos os que responderam em pleno domingão, muito obrigado... isso prova que este é melhor fórum sobre programação que conheço, e que vocês são ótimos!!!

Optei por deixar da seguinte forma:

   Private Sub SalvaGridAccess()
Using con As OleDbConnection = GetConnection()
con.Open()
Using Transacao As OleDbTransaction = con.BeginTransaction()
Using cmd As New OleDbCommand
Try
cmd.Connection = con
cmd.Transaction = Transacao
cmd.CommandType = CommandType.Text
cmd.CommandText = [Ô]INSERT INTO ContasApagar (IDLancamento, DataPagamento, Valor )[Ô] & _
[Ô]VALUES (@IDLancamento, @DataPagamento, @Valor)[Ô]
For i As Integer = 0 To DataGridView1.Rows.Count - 1
cmd.Parameters.Clear()
cmd.Parameters.Add([Ô]@IDLancamento[Ô], OleDbType.VarChar).Value = DataGridView1.Rows.Item(i).Cells(0).Value
cmd.Parameters.Add([Ô]@DataPagamento[Ô], OleDbType.Date).Value = DataGridView1.Rows.Item(i).Cells(1).Value
cmd.Parameters.Add([Ô]@Valor[Ô], OleDbType.Double).Value = DataGridView1.Rows.Item(i).Cells(2).Value
cmd.ExecuteNonQuery()
Next i
Transacao.Commit()
Catch ex As Exception
Transacao.Rollback()
MessageBox.Show(ex.Message)
Finally
con.Close()
End Try
End Using
End Using
End Using
End Sub


Algo a acrescentar ?
ACCIOLLY 25/10/2015 17:00:46
#453033
Tá de Boa
JABA 25/10/2015 17:08:31
#453034
Acho que agora a parte do Finally ficou desnecessária.

Nos demais, show de bola! é isso ai!

W8.LISBOA 25/10/2015 17:30:21
#453035
Agora a parte mais chata...Quem pontuar? kkkk
ACCIOLLY 25/10/2015 20:25:42
#453044
o JABA
Página 2 de 2 [18 registro(s)]
Tópico encerrado , respostas não são mais permitidas