como puedo traerme un campo de tipo integer de la base de datos sumarle + 1
y luego guardar el resultado de la suma en le mismo campo
| |||
update? Hola... Que es lo que intentas hacer, a simple vista me parece que mejor seria que hagas un update tabla set campo=campo+1 where filtro. Saludos cordiales
__________________ langdotnet |
| ||||
Buena la cosa es dependeiendo del radio button que se selccione yo deberia consultar mi tabla traer el valor respueta1 incrementarlo en 1 y volver a guardarlo en la tabla La aplicacion es un formulario sencillo que trae de la una tabla informacion de una pregunta y 5 opciones que son chekeadas con los radio buton la ideas poder almacenar cuantas veces se elegio la opcion 1 o la opcion 2 o la opcion5 en fin es un modulo de encuesta m |
| ||||
Hola say.. (que milagro.. jaja ![]() Puedes obtener el valor de tu reader así: Cita: Y en tu evento del radiobuton hacer el update como normalmente lo harías sumandole uno.. If RadioButton1.Checked = true then Add.tostring(Ctype(dr("Respuesta1"),Integer) + 1) .. .. Cita: Y despues vuelves a cargar tu reader para obtener el nuevo valor.update Formulario set Respuesta1 = Respuesta1 + 1 where formulario = 2 Checalo y verás que no es difícil.. Salu2 ![]()
__________________ Nadie roba nada ya que en la vida todo se paga . . . Exentrit - Soluciones SharePoint & Net |
| |||
Entonces creo que seria mucho mejor que cuando presionas el boton guardar encuenta (o como se llame) obtengas el Id(ID_REGISTRO) del registro mostrado en el datagrid y luego llames a un procedimiento almacenado que se encargue de aumentar ese numero en uno... Create Procedure USP_AUMENTAR_UNO @ID_REGISTRO int as Update MiTable set campo = campo+1 where ID_REGISTRO = @ID_REGISTRO go o realizar la consulta en el mismo codigo, pero teniendo el Id del registro a aumentar en uno. Saludos cordiales.
__________________ langdotnet |
| ||||
Uhmmm Dos preguntas 1.- Cuando me hablas del evento del radio buton te refieres al Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) de cada radio button 2.-Cuando me dices que vuelva a carga el reader puede sr en el page load de la pagina? |
| ||||
Cita: Si... aunque puedes manejar un radiobutton list para usar el mismo método y solo estar recorriendo los items... 1.- Cuando me hablas del evento del radio buton te refieres al Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) de cada radio button ![]() Cita: Puedes poner una funcion dentro del evento de tu radio button que llame al reader... o la otra es hacer un redirect a la misma página para volver a cargar los datos.... ya depende de ti... Cuando me dices que vuelva a carga el reader puede sr en el page load de la pagina? ![]() |
| ||||
Me da un error No se ha declarado el nombre 'Add'. ![]() Add.tostring(Ctype(dr("Respuesta1"),Integer) + 1) Sub Ok_Click(sender As Object, e As EventArgs) Dim MyCommand As SqlCommand Dim SelectCmd As String = "Select Respuesta1, Respuesta2, Respuesta3, Respuesta4, Respuesta5 from Formulario where FormularioID=2" MyCommand = New SqlCommand(SelectCmd, PortalSettings.SqlConnectionString) MyCommand.Connection.Open() Dim dr As sqldatareader dr = mycommand.executereader While dr.read If RadioButton1.Checked = true then Add.tostring(Ctype(dr("Respuesta1"),Integer) + 1) Else If RadioButton2.Checked = true then Add.tostring(Ctype(dr("Respuesta2"),Integer) + 1) Else If RadioButton3.Checked = true then Add.tostring(Ctype(dr("Respuesta3"),Integer) + 1) Else If RadioButton4.Checked = true then Add.tostring(Ctype(dr("Respuesta4"),Integer) + 1) Else If RadioButton5.Checked = true then Add.tostring(Ctype(dr("Respuesta5"),Integer) + 1) end if End While dr.close MyCommand.Connection.Close() End Sub Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Dim DS As DataSet Dim MyCommand As SqlCommand Dim UpdateCmd As String ="update Formulario set Respuesta1 = Respuesta1 + 1 where formulario = 2" MyCommand = New SqlCommand(UpdateCmd, PortalSettings.SqlConnectionString) MyCommand.Parameters.Add(New SqlParameter("@Respuesta1", SqlDbType.Int, 4)) MyCommand.Connection.Open() Try MyCommand.ExecuteNonQuery() End Try MyCommand.Connection.Close() end Sub Por cierto agregue el update asi , no se si te capte bien la idea |
| ||||
Me parece que no le captaste al idea a rootk Tienes un update en RadioButton1_CheckedChanged que cambia con una update aumentando en uno respuesta1. Lo primero que me planteo es y si el aumento tiene que ser respuesta 2 donde lo cambias en la base de datos??? Yo simplemete lo que haria sin utilizar el add.tostring ese..... tendria las 5 opciones en un radiobuttonlist (si cada vez solo puede elegir uno) Si tinees un boton ok que creo q es lo q kieres utilizar en ses boton dependiendo de cual este clikao hacer la update de esa respuesta: Dim DS As DataSet Dim MyCommand As SqlCommand If RadioButton1.Checked = true then Dim UpdateCmd As String ="update Formulario set Respuesta1 = "& (Ctype(dr("Respuesta1"),Integer) + 1) & " + 1 where formulario = 2" Else If RadioButton2.Checked = true then Dim UpdateCmd As String ="update Formulario set Respuesta2 = "& (Ctype(dr("Respuesta2"),Integer) + 1) & " + 1 where formulario = 2" Else If RadioButton3.Checked = true then ... Else If RadioButton4.Checked = true then ... Else If RadioButton5.Checked = true then ... end if Algo asi,teniendo por supuesto que hacer la consulta como haces al principio El whlie dr.read tiene sentido ponerlo?? entiendo q solo te devolvela un registro la consulta "Select Respuesta1, Respuesta2, Respuesta3, Respuesta4, Respuesta5 from Formulario where FormularioID=2" ![]() |
| ||||
Pues ahora no da error, pero no actualiza el mas 1 en la tabla de datos mira respuesta1,respuesta2,respuesta3,respuesta4,respue sta5 tienen en la base de datos el valor cero se supone que cuando se seleccione el radiobutton consulta la tabla tome el valor de respuesta1 le sume 1 y lo guarde de nuevo Sub Ok_Click(sender As Object, e As EventArgs) Dim MyCommand As SqlCommand Dim SelectCmd As String = "Select Respuesta1, Respuesta2, Respuesta3, Respuesta4, Respuesta5 from Formulario where FormularioID=2" MyCommand = New SqlCommand(SelectCmd, PortalSettings.SqlConnectionString) MyCommand.Connection.Open() Dim dr As sqldatareader dr = mycommand.executereader If RadioButton1.Checked = true then Dim UpdateCmd As String ="update Formulario set Respuesta1 = "& (Ctype(dr("Respuesta1"),Integer) + 1) & " + 1 where formulario = 2" Else If RadioButton2.Checked = true then Dim UpdateCmd As String ="update Formulario set Respuesta2 = "& (Ctype(dr("Respuesta2"),Integer) + 1) & " + 1 where formulario = 2" Else If RadioButton3.Checked = true then Dim UpdateCmd As String ="update Formulario set Respuesta3 = "& (Ctype(dr("Respuesta3"),Integer) + 1) & " + 1 where formulario = 2" Else If RadioButton4.Checked = true then Dim UpdateCmd As String ="update Formulario set Respuesta4 = "& (Ctype(dr("Respuesta4"),Integer) + 1) & " + 1 where formulario = 2" Else If RadioButton5.Checked = true then Dim UpdateCmd As String ="update Formulario set Respuesta5 = "& (Ctype(dr("Respuesta5"),Integer) + 1) & " + 1 where formulario = 2" end if dr.close MyCommand.Connection.Close() End Sub Todo eso debe hacer cuando se presione le boton ok |
| ||||
HAz pruebas de tu codigo haber donde puede estar el fallo Pon un label de pruebas En los if del boton ok por ejemplo pones q le asignen al label el valor de (Ctype(dr("Respuesta1"),Integer) haber si te devuelve lo que esperabas que deberia ser en primer termino el 0 Si te devuleve bien es q hasta aki todo esta bien y q no ahces bien la update ¿donde tienes el executenonquery ??? ![]() Creo q el problema esta ahi,q no ejecutas la update,solo la asignas a un string |
| ||||
No lo hago alli lo termino en el evento del radio button asi Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Dim DS As DataSet Dim MyCommand As SqlCommand Dim UpdateCmd As String ="update Formulario set Respuesta1 = @Respuesta1 + 1 where formulario = 2" MyCommand = New SqlCommand(UpdateCmd, PortalSettings.SqlConnectionString) MyCommand.Parameters.Add(New SqlParameter("@Respuesta1", SqlDbType.Int, 4)) MyCommand.Connection.Open() Try MyCommand.ExecuteNonQuery() Catch Exp As SQLException If Exp.Number = 2627 Message.InnerHtml = "ERROR: A record already exists with the same primary key" Else Message.InnerHtml = "ERROR: El registro no puede crearse, por favor revise los campos para ver si fueron rellenados correctamente" & Exp.Message End If Message.Style("color") = "red" End Try MyCommand.Connection.Close() end Sub Ay creo que volvi a entender mal, ![]() y gracias de antemano |
| ||||
Jajaja,tus temas son como bolas de nieve q cada vez cuesta mas seguir por q se van agrandando.... No pasa nada,es broma Mira borra el Sub RadioButton1_CheckedChange No lo necesitas apra nada ya que para algo utilizas el boton ok Me es lo mismo q los cambios los hagas cuando haga un cambio en el radio buton directamente o q tenga q teclear el boton ok por si acaso se confunde al clikar un radio buton................................. La cosa es q al codigo del ok le falta esto al final: MyCommand = New SqlCommand(UpdateCmd, Por talSettings.SqlConnectionString) Try MyCommand.ExecuteNonQuery() Catch Exp As SQLException If Exp.Number = 2627 Message.InnerHtml = "ERROR: A record already exists with the same primary key" Else Message.InnerHtml = "ERROR: El registro no puede crearse, por favor revise los campos para ver si fueron rellenados correctamente" & Exp.Message End If Message.Style("color") = "red" End Try MyCommand.Connection.Close() Es decir q entras en los if,metes en e lstring el update q seria segun entre en una if o otra y te falta hacer esa update en la bd,por eso nunca te hara ningun cambio Si en cambio kerrias q te lo hicienra en el evento radiobutton_changed copiarias el codigo del boton ok ahi Me sigues??? |
| ||||
pues creo que te sigo agrego en cada if bloque que falta, algo asi Sub Ok_Click(sender As Object, e As EventArgs) Dim MyCommand As SqlCommand Dim SelectCmd As String = "Select Respuesta1, Respuesta2, Respuesta3, Respuesta4, Respuesta5 from Formulario where FormularioID=2" MyCommand = New SqlCommand(SelectCmd, PortalSettings.SqlConnectionString) MyCommand.Connection.Open() Dim dr As sqldatareader dr = mycommand.executereader If RadioButton1.Checked = true then Dim UpdateCmd As String ="update Formulario set Respuesta1 = "& (Ctype(dr("Respuesta1"),Integer) + 1) & " + 1 where formulario = 2" MyCommand = New SqlCommand(UpdateCmd, PortalSettings.SqlConnectionString) Try MyCommand.ExecuteNonQuery() Catch Exp As SQLException If Exp.Number = 2627 Message.InnerHtml = "ERROR: A record already exists with the same primary key" Else Message.InnerHtml = "ERROR: El registro no puede crearse, por favor revise los campos para ver si fueron rellenados correctamente" & Exp.Message End If Message.Style("color") = "red" End Try MyCommand.Connection.Close() Else If RadioButton2.Checked = true then Dim UpdateCmd As String ="update Formulario set Respuesta2 = "& (Ctype(dr("Respuesta2"),Integer) + 1) & " + 1 where formulario = 2" ... Else If RadioButton3.Checked = true then Dim UpdateCmd As String ="update Formulario set Respuesta3 = "& (Ctype(dr("Respuesta3"),Integer) + 1) & " + 1 where formulario = 2" ... Else If RadioButton4.Checked = true then Dim UpdateCmd As String ="update Formulario set Respuesta4 = "& (Ctype(dr("Respuesta4"),Integer) + 1) & " + 1 where formulario = 2" .... Else If RadioButton5.Checked = true then Dim UpdateCmd As String ="update Formulario set Respuesta5 = "& (Ctype(dr("Respuesta5"),Integer) + 1) & " + 1 where formulario = 2" ... end if dr.close MyCommand.Connection.Close() End Sub pero no le faltaria la linea MyCommand.Parameters.Add(New SqlParameter("@Respuesta1", SqlDbType.Int, 4)) bueno que no seria @respuesta1 por que eso no estoy definiendo |
| ||||
Nohace falta esa linea por q no tienes q definir ningun valor,lo has hecho directamente en la cadena Ej: "Select * from tabla where p=@p" Aki tendrias q definir @p "Select * fr0m tabla where p=" & ctyep(dr("respuesta1"),integer) Aki no Para ahorra codigo con ponerlo una vez al final valdria Ya q segun entiendo utilizas radiobutons por q solo elegira una respuesta declara el Dim UpdateCmd As String al principio,antes del primer if,luego simplemtente hace sla asignacion al UpdateCmd en cada if y entendiendo q solo entrara en uno de ellos UpdateCmd tendra elvalor de una update,despues del utlimo end if haces la executenomquery... Puedes tb hacer como dices pero es repetir mucho codigo |
| ||||
Pues te cuento que hizo como me indicaste, o al menos eso creo yo. Pero no funciona no setea el nuevo valor en la tabla continua estando el valor cero Entonces coloque un label antes del updatecdm para ver si me trae el valor como me explicaste en post pasado pero me da este error Un valor de tipo 'Integer' no se puede convertir en '2'. y resalta esta linea Label22 = (Ctype(dr("Respuesta1"),Integer) El codigo del boton quedo asi Sub Ok_Click(sender As Object, e As EventArgs) Dim MyCommand As SqlCommand Dim SelectCmd As String = "Select Respuesta1, Respuesta2, Respuesta3, Respuesta4, Respuesta5 from Formulario where FormularioID=2" MyCommand = New SqlCommand(SelectCmd, PortalSettings.SqlConnectionString) MyCommand.Connection.Open() Dim dr As sqldatareader dr = mycommand.executereader Dim UpdateCmd As String If RadioButton1.Checked = true then Label22 = (Ctype(dr("Respuesta1"),Integer) UpdateCmd ="update Formulario set Respuesta1 = "& (Ctype(dr("Respuesta1"),Integer) + 1) & " + 1 where formulario = 2" Else If RadioButton2.Checked = true then UpdateCmd ="update Formulario set Respuesta2 = "& (Ctype(dr("Respuesta2"),Integer) + 1) & " + 1 where formulario = 2" Else If RadioButton3.Checked = true then UpdateCmd ="update Formulario set Respuesta3 = "& (Ctype(dr("Respuesta3"),Integer) + 1) & " + 1 where formulario = 2" Else If RadioButton4.Checked = true then UpdateCmd ="update Formulario set Respuesta4 = "& (Ctype(dr("Respuesta4"),Integer) + 1) & " + 1 where formulario = 2" Else If RadioButton5.Checked = true then UpdateCmd ="update Formulario set Respuesta5 = "& (Ctype(dr("Respuesta5"),Integer) + 1) & " + 1 where formulario = 2" end if MyCommand = New SqlCommand(UpdateCmd, PortalSettings.SqlConnectionString) Try MyCommand.ExecuteNonQuery() Catch Exp As SQLException If Exp.Number = 2627 Message.InnerHtml = "ERROR: A record already exists with the same primary key" Else Message.InnerHtml = "ERROR: El registro no puede crearse, por favor revise los campos para ver si fueron rellenados correctamente" & Exp.Message End If Message.Style("color") = "red" End Try MyCommand.Connection.Close() dr.close MyCommand.Connection.Close() End Sub |
| ||||
No veo donde esta el fallo en la update Lo del label22 teines q indicarle a q del label22 le asignas eso; label22.text=..... Por otro lado aunq esto da un poco igual cierras 2 veces mycommand al final Prueba haber q valor coge label22 y me dices Otra cosa,le estas sumando 2 veces 1 es decir q le aumentas en 2,pero lo primero es q aumente luego ya miraras esto |
| ||||
No me muestra nada, cuando hago el label, en la rutina if del botton asi que se me ocurrio ponerlo en el evento del radiobutton y me dijo Invalid attempt to read when no data is present. Label22.Text = (Ctype(dr("Respuesta1"),Integer)) que te parece? ![]() |
| ||||
podria funcionar,no utilizo datareader ,no lo se,,es q segun parece no te entra en ningun if del boton ok,y no termino de ver por q?? por q lo unico q haces es si esta chekeado entra y se supone q uno por lo menos debe estar chekeado..... Puedes poner el while de prueba aunq solo tengas un registro en el dr Yo suelo utilizar dataset siempre ![]() |
| ||||
Si lo trae, me trae el valor zero pero si te cuento porque no nos funcionaba antes, eres capaz de viajar hasta donde estoy yo solo para darme un golpe en la cabeza Nunca active el evento onclick del boton, por eso no ejecutaba nada Perdon yo que estuvo muy mal echo. Pero ahora que si entra en esa rutina y que sabemos que si no esta trayendo el valor, pues se genero otro error que es este Invalid attempt to read when no data is present. y resalta la linea Line 84: UpdateCmd ="update Formulario set Respuesta1 = "& (Ctype(dr("Respuesta1"),Integer) + 1) & " where formulario = 2" el codijo del boton quedo asi Sub Ok_Click(sender As Object, e As EventArgs) Dim MyCommand As SqlCommand Dim SelectCmd As String = "Select Respuesta1, Respuesta2, Respuesta3, Respuesta4, Respuesta5 from Formulario where FormularioID=2" MyCommand = New SqlCommand(SelectCmd, PortalSettings.SqlConnectionString) MyCommand.Connection.Open() Dim dr As sqldatareader dr = mycommand.executereader Dim UpdateCmd As String If RadioButton1.Checked = true then UpdateCmd ="update Formulario set Respuesta1 = "& (Ctype(dr("Respuesta1"),Integer) + 1) & " where formulario = 2" Else If RadioButton2.Checked = true then UpdateCmd ="update Formulario set Respuesta2 = "& (Ctype(dr("Respuesta2"),Integer) + 1) & " where formulario = 2" Else If RadioButton3.Checked = true then UpdateCmd ="update Formulario set Respuesta3 = "& (Ctype(dr("Respuesta3"),Integer) + 1) & " where formulario = 2" Else If RadioButton4.Checked = true then UpdateCmd ="update Formulario set Respuesta4 = "& (Ctype(dr("Respuesta4"),Integer) + 1) & " where formulario = 2" Else If RadioButton5.Checked = true then UpdateCmd ="update Formulario set Respuesta5 = "& (Ctype(dr("Respuesta5"),Integer) + 1) & " where formulario = 2" end if MyCommand = New SqlCommand(UpdateCmd, PortalSettings.SqlConnectionString) Try MyCommand.ExecuteNonQuery() Catch Exp As SQLException If Exp.Number = 2627 Message.InnerHtml = "ERROR: A record already exists with the same primary key" Else Message.InnerHtml = "ERROR: El registro no puede crearse, por favor revise los campos para ver si fueron rellenados correctamente" & Exp.Message End If Message.Style("color") = "red" End Try dr.close MyCommand.Connection.Close() End Sub Con el evento del radio button es que puedo saber que recupera el valor y lo puse autopostback para que me mostrara el dato Gracias popopo por la asistencia ![]() Gracias a ti tambien Neivan por la paciencia (Y perdon o tra vez ![]() |
| ||||
Pues te cuento que si lo pongo entre while dr.read me sale este error ExecuteNonQuery requires an open and available Connection. The connection's current state is Closed. resalta esta linea Line 109:MyCommand.ExecuteNonQuery() pero yo abro la conexion antes dr = mycommand.executereader MyCommand.Connection.Open() dr = mycommand.executereader While dr.read Dim UpdateCmd As String If RadioButton1.Checked = true then UpdateCmd ="update Formulario set Respuesta1 = "& (Ctype(dr("Respuesta1"),Integer) + 1) & " where formulario = 2" else if ... end if MyCommand = New SqlCommand(UpdateCmd, PortalSettings.SqlConnectionString) Try MyCommand.ExecuteNonQuery() Catch Exp As SQLException If Exp.Number = 2627 Message.InnerHtml = "ERROR: A record already exists with the same primary key" Else Message.InnerHtml = "ERROR: El registro no puede crearse, por favor revise los campos para ver si fueron rellenados correctamente" & Exp.Message End If Message.Style("color") = "red" End Try end while dr.close MyCommand.Connection.Close() End Sub eso me parece extraño, a caso no es asi que se abre la conexxion? |
| ||||
Pues asi lo hice y nada Sub Ok_Click(sender As Object, e As EventArgs) Dim MyCommand As SqlCommand Dim SelectCmd As String = "Select Respuesta1, Respuesta2, Respuesta3, Respuesta4, Respuesta5 from Formulario where FormularioID=2" MyCommand = New SqlCommand(SelectCmd, PortalSettings.SqlConnectionString) Dim dr As sqldatareader MyCommand.Connection.Open() dr = mycommand.executereader While dr.read Dim UpdateCmd As String If RadioButton1.Checked = true then UpdateCmd ="update Formulario set Respuesta1 = "& (Ctype(dr("Respuesta1"),Integer) + 1) & " where formulario = 2" Else If RadioButton2.Checked = true then UpdateCmd ="update Formulario set Respuesta2 = "& (Ctype(dr("Respuesta2"),Integer) + 1) & " where formulario = 2" Else If RadioButton3.Checked = true then UpdateCmd ="update Formulario set Respuesta3 = "& (Ctype(dr("Respuesta3"),Integer) + 1) & " where formulario = 2" Else If RadioButton4.Checked = true then UpdateCmd ="update Formulario set Respuesta4 = "& (Ctype(dr("Respuesta4"),Integer) + 1) & " where formulario = 2" Else If RadioButton5.Checked = true then UpdateCmd ="update Formulario set Respuesta5 = "& (Ctype(dr("Respuesta5"),Integer) + 1) & " where formulario = 2" end if MyCommand = New SqlCommand(UpdateCmd, PortalSettings.SqlConnectionString) Try MyCommand.ExecuteNonQuery() Catch Exp As SQLException If Exp.Number = 2627 Message.InnerHtml = "ERROR: A record already exists with the same primary key" Else Message.InnerHtml = "ERROR: El registro no puede crearse, por favor revise los campos para ver si fueron rellenados correctamente" & Exp.Message End If Message.Style("color") = "red" End Try end while dr.close MyCommand.Connection.Close() End Sub |