Principales respuestas
GUARDAR DATOS DE UN DATAGRIDVIEW EN LA BD

Pregunta
-
HOLA BUENAS TARDES TENGO UNA DUDA, Resulta que tengo un datagridview con varias columnas: numero documento, cuota no, fecha vencimiento, valor cuota........y otros, Una vez hecho unas actualizaciones de mi datagridview de algunas celdas de filas seleccionadas, debo guardarlo en la tabla listacuotasprestamo (uso sql) , COMO LO PODRIA HACER, ME PODRIA GUIAR PARA EL PROCEDIMIENTO..
GRACIAS POR SU COLABORACION..
Este ha sido mi ultimo procedimiento de actualizacion,
Private Sub Btonactualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btonactualizar.Click
Dim row As DataGridViewRow = ListacuotasprestamoDataGridView.CurrentRow
Textsaldocuota.Text = CStr(Textsubtotal.Text - Textimprec.Text)
Textimpcob.Text = CStr(Textimprec.Text)
If row IsNot Nothing Then
row.Cells(11).Value = fechahoy.Value
row.Cells(10).Value = Textsaldocuota.Text
row.Cells(12).Value = Textimpcob.Text
End If
End Sub
Cristina E.
Respuestas
-
Hola
En este caso en tu WHERE debes utilizar un identificador para saber el dato de quién vas a actualizar. Por ejemplo:
WHERE CuotaNo = @CuotaNo" AND nrodocumento = @nrodocumento. De esta forma especificas que vas a hacer un cambio a la CuotaNo x del cliente con el nrodocumento y.
Aparte de eso veo unos desfases de columnas...
Columna 3 = CuotaNo - Bien
Columna 10 = mora - No debería ser 8 fechacobro?
Columna 11 = saldo - No debería ser 10?
Columna 12 = importecobrado - Bien
Un saludo
Antonio Lobo
Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
Si la respuesta te ha sido util Votala.
Mi blog- Marcado como respuesta cristi2281 jueves, 15 de septiembre de 2011 21:12
Todas las respuestas
-
pero en el codigo que poens no esta involucrada ninguna base de datos, alli solo vuelcas la info de controles al grid
deberias apclair algo como esto
http://social.msdn.microsoft.com/Forums/es/vbes/thread/3c2637db-0d8d-4a70-95c8-ee6165ee821d
http://social.msdn.microsoft.com/Forums/es/vbes/thread/b9cf9b23-5fb0-4f58-8c2d-6d158f7f2887
o sea usas un For Each para recorrer cada row del grid armando el INSERT que actuazlai los campos de la db
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
Hola buen día Leandro ,
Gracias por tu respuesta,
Como te habia comentado solo quiero guardar las actualizaciones hechas en esta tabla de algunos campos de las filas seleccionadas, ya que esta tabla la alimenta otro form prestamos, por esa razon ya viene con info de algunos campos(nrodocumento, cedula, cuotaNo, Capital, interes, fechavencimiento, cuotamensual, diasmora, mora).
la verdad ya habia trabajado ASI con el insert, :
Private Sub Btonguardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btonguardar.Click
Using conn As New SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\FONSOCAM.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")
conn.Open()
Dim sql As String = "INSERT INTO listacuotasprestamo(fechacobro, saldo, importecobrado)VALUES (@fechacobro, @saldo, @importecobrado)"
Dim cmd As New SqlClient.SqlCommand(sql, conn)
For Each row As DataGridViewRow In ListacuotasprestamoDataGridView.Rows
cmd.Parameters.AddWithValue("@fechacobro", Convert.ToDateTime(row.Cells(11).Value))
cmd.Parameters.AddWithValue("@saldo", Convert.ToInt32(row.Cells(10).Value))
cmd.Parameters.AddWithValue("@importecobrado", Convert.ToInt32(row.Cells(12).Value))
cmd.ExecuteNonQuery()
Next
MessageBox.Show("Info. guardada correctamente")
End Using
End Sub
pero me vota este error,
No se puede insertar el valor NULL en la columna 'nrodocumento', tabla 'C:\USERS\CRISTINA\DOCUMENTS\VISUAL STUDIO 2005\PROJECTS\FONSOCAM\FONSOCAM\BIN\DEBUG\FONSOCAM.MDF.dbo.listacuotasprestamo'. La columna no admite valores NULL. Error de INSERT.
Se terminó la instrucción.
Ahora Teniendo en cuenta este enlace de validar valores nulos:
http://social.msdn.microsoft.com/Forums/es/vbes/thread/3c2637db-0d8d-4a70-95c8-ee6165ee821d
tengo esto:
Using conn As New SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\FONSOCAM.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")
conn.Open()
Dim sql As String = "INSERT INTO listacuotasprestamo(fechacobro, saldo, importecobrado)VALUES (@fechacobro, @saldo, @importecobrado)"
Dim cmd As New SqlClient.SqlCommand(sql, conn)
For Each row As DataGridViewRow In ListacuotasprestamoDataGridView.Rows
If String.IsNullOrEmpty(row.Cells("nrodocumento").Value) Or _
String.IsNullOrEmpty(CStr(row.Cells("cedula").Value)) Or _
String.IsNullOrEmpty(CStr(row.Cells("cuotaNo").Value)) Or _
String.IsNullOrEmpty(CStr(row.Cells("Capital").Value)) Or _
String.IsNullOrEmpty(CStr(row.Cells("interes").Value)) Or _
String.IsNullOrEmpty(CStr(row.Cells("fechavencimiento").Value)) Or _
String.IsNullOrEmpty(CStr(row.Cells("cuotamensual").Value)) Or _
String.IsNullOrEmpty(CStr(row.Cells("diasmora").Value)) Or _
String.IsNullOrEmpty(CStr(row.Cells("mora").Value)) Then
Continue For
End If
cmd.Parameters.AddWithValue("@fechacobro", Convert.ToDateTime(row.Cells(11).Value))
cmd.Parameters.AddWithValue("@saldo", Convert.ToInt32(row.Cells(10).Value))
cmd.Parameters.AddWithValue("@importecobrado", Convert.ToInt32(row.Cells(12).Value))
cmd.ExecuteNonQuery()
Next
MessageBox.Show("Info. guardada correctamente")
End Using
End Sub
y me vota esta excepcion :
NO se si lo estoy haciendo bien..
Muchas gracias por tu colaboracion..
Cristina E. -
Hola
Te comento un poco:
1) No se puede insertar el valor NULL en la columna 'nrodocumento', tabla 'C:\USERS\CRISTINA\DOCUMENTS\VISUAL STUDIO 2005\PROJECTS\FONSOCAM\FONSOCAM\BIN\DEBUG\FONSOCAM.MDF.dbo.listacuotasprestamo'. La columna no admite valores NULL. Error de INSERT.Se terminó la instrucción.
Esto sucede porque no estás pasando un parámetro a la columna nrodocumento por ende el toma null como predeterminado y la columna no admite null.
2) No se puede encontrar la columna denominada nrodocumento. Nombre del párametro: columnName
Esto pasa porque tu datagridview no tiene una columna llamada nrodocumento.
Conclusión: agrega el parámetro de nrodocumento para que no te tire el error 1 y agrega la columna nrodocumento al datagridview para que no tengas el 2 error.
Un saludo
Antonio Lobo
Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
Si la respuesta te ha sido util Votala.
Mi blog -
Hola Antonio gracias por tu respuesta,
con respecto a tu respuesta 2, claro que el datagrid tiene todas esas columnas que puse en el anterior enunciado, eso es lo raro porq me sale ese error.
Como te habia comentado solo quiero guardar las actualizaciones hechas en este datagrid de algunos campos de las filas seleccionadas, (saldo, fechacobro, importecobrado) ya que esta tabla la alimenta otro form prestamos, por esa razon ya viene alimentada con info de los otros campos(nrodocumento, cedula, cuotaNo, Capital, interes, fechavencimiento, cuotamensual, diasmora, mora).
Que proceso debo hacer?
Gracias..
Cristina E.- Editado cristi2281 jueves, 15 de septiembre de 2011 14:14
-
solo quiero guardar las actualizaciones hechas en este datagrid de algunos campos de las filas seleccionadas, (saldo, fechacobro, importecobrado) ya que esta tabla la alimenta otro form prestamos, por esa razon ya viene alimentada con info de los otros campos
Si estas son actualizaciones por que usas INSERT? no deberías usar UPDATE?
Dim sql As String = "UPDATE listacuotasprestamo _ SET fechacobro = @fechacobro, saldo = @saldo, = @importecobrado _ WHERE nrodocumento = @nrodocumento"
Antonio Lobo
Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
Si la respuesta te ha sido util Votala.
Mi blog -
Hola mira he probado este codigo me actualiza bien los valores de la fila seleccionada pero al darle aceptar al boton guardar me actualiza todos las celdas de las columnas (saldo, fechacobro, importecobrado), es que repito solo quiero que me guarde los valores de la fila seleccionada, qué le debo modificar?
mira el codigo:
Private Sub Btonguardarcobro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btonguardarcobro.Click
Dim row As DataGridViewRow = ListacuotasprestamoDataGridView.CurrentRow
Textsaldocuota.Text = CStr(Textsubtotal.Text - Textimprec.Text)
Textimpcob.Text = CStr(Textimprec.Text)
If row IsNot Nothing Then
row.Cells(11).Value = fechahoy.Value
row.Cells(10).Value = Textsaldocuota.Text
row.Cells(12).Value = Textimpcob.Text
End If
Using conn As New SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\FONSOCAM.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")
conn.Open()
Dim sql As String = "UPDATE listacuotasprestamo SET fechacobro = @fechacobro, saldo = @saldo, importecobrado= @importecobrado WHERE nrodocumento = @nrodocumento"
Dim cmd As New SqlClient.SqlCommand(sql, conn)
cmd.Parameters.AddWithValue("@nrodocumento", (row.Cells(1).Value))
cmd.Parameters.AddWithValue("@fechacobro", Convert.ToDateTime(row.Cells(11).Value))
cmd.Parameters.AddWithValue("@saldo", Convert.ToInt32(row.Cells(10).Value))
cmd.Parameters.AddWithValue("@importecobrado", Convert.ToInt32(row.Cells(12).Value))
cmd.ExecuteNonQuery()
MessageBox.Show("Info. guardada correctamente")
End Using
PLEASE AYUDA!!
GRACIAS POR TU COLABORACION Y TIEMPO!!
Cristina E. -
Hola Cristina
Corrígeme si me equivoco: tu tienes un dato en tu BD y quieres agregar uno nuevo pero con el mismo nrodocumento, cedula, cuotaNo, Capital, interes, fechavencimiento, cuotamensual, diasmora, mora pero diferente fechacobro, saldo e importecobrado?
Si estoy equivocado entonces ilustra lo que quieres hacer porque la verdad no comprendo lo que quieres hacer.
Un saludo
Antonio Lobo
Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
Si la respuesta te ha sido util Votala.
Mi blog -
SI.. mira este estoy trabajando sobre este datagridview, lo que quiero es que al darle click en guardar cobro, me guarde los datos que actualicé de esta fila seleccionada: los campos: fecha cobro, saldo, importecobrado, es decir me guarde el cobro, los demas datos ya vienen de otro form que ha calculado las cuotas en el datagrid.
del codigo anterior le modifique:
la sentencia where
Using conn As New SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\FONSOCAM.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")
conn.Open()
Dim sql As String = "UPDATE listacuotasprestamo SET fechacobro = @fechacobro, saldo = @saldo, importecobrado= @importecobrado WHERE CuotaNo = @CuotaNo"
Dim cmd As New SqlClient.SqlCommand(sql, conn)
cmd.Parameters.AddWithValue("@CuotaNo", (row.Cells(3).Value))
cmd.Parameters.AddWithValue("@fechacobro", Convert.ToDateTime(row.Cells(11).Value))
cmd.Parameters.AddWithValue("@saldo", Convert.ToInt32(row.Cells(10).Value))
cmd.Parameters.AddWithValue("@importecobrado", Convert.ToInt32(row.Cells(12).Value))
cmd.ExecuteNonQuery()
ahora solo me guarda el valor de la celda saldo de la fila seleccionada, la fechacobro , importerecibido no me los guarda.
GRACIAS POR TU COLABORACION!
Cristina E. -
Hola
En este caso en tu WHERE debes utilizar un identificador para saber el dato de quién vas a actualizar. Por ejemplo:
WHERE CuotaNo = @CuotaNo" AND nrodocumento = @nrodocumento. De esta forma especificas que vas a hacer un cambio a la CuotaNo x del cliente con el nrodocumento y.
Aparte de eso veo unos desfases de columnas...
Columna 3 = CuotaNo - Bien
Columna 10 = mora - No debería ser 8 fechacobro?
Columna 11 = saldo - No debería ser 10?
Columna 12 = importecobrado - Bien
Un saludo
Antonio Lobo
Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
Si la respuesta te ha sido util Votala.
Mi blog- Marcado como respuesta cristi2281 jueves, 15 de septiembre de 2011 21:12
-