Foros del Web » Programación para mayores de 30 ;) » .NET »

error update

Estas en el tema de error update en el foro de .NET en Foros del Web. buenas, tengo un error, no entiendo pq no rula, ya que tengo otros update muy similares a esta y me va perfecto. este no. el ...
  #1 (permalink)  
Antiguo 09/05/2005, 04:35
 
Fecha de Ingreso: abril-2005
Mensajes: 20
Antigüedad: 19 años
Puntos: 0
error update

buenas, tengo un error, no entiendo pq no rula, ya que tengo otros update muy similares a esta y me va perfecto. este no. el error ke me da es

Detalles de la excepción: System.Data.OleDb.OleDbException: Error de sintaxis en la instrucción UPDATE.

el codigo es este a ver si ven algo ke a mi se escapa.
Sub Guardar_Click(sender As Object, e As EventArgs)

if Pass.Text <> RepPass.Text then
Label1.Visible=True
else
Dim objConn As New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Dani\Proyecto SIPSENWeb\SIPSENWEB.mdb")
Dim sSQL, Resul as string
sSQL = "Update USR Set login='"& Usu.Text &"', password='"& Pass.Text &"', email='"& Email.Text &"', NombreCompleto='"& NomCom.Text &"' Where IDUSR Like ('"& U &"')" 'U es el Id del usuario seleccionado
Dim objCmd As New OleDbCommand (sSQL, objConn)
objConn.open
Resul= objCmd.ExecuteNonQuery
end if

End Sub

ah por cierto todos los campos estan en formato de texto.

gracias por antemano. Salu2
  #2 (permalink)  
Antiguo 09/05/2005, 05:07
 
Fecha de Ingreso: abril-2005
Mensajes: 63
Antigüedad: 19 años
Puntos: 0
¿No te sobran comillas al hacer las concatenaciones?"Update USR Set login=" & Usu.Text & .... (Hay unas comillas dobles y unas simples, se necesitan solo las dobles)

En cualquier caso yo lo haría con comando con parámetros, del estilo:

comando = New OleDbCommand("UPDATE USR SET login = ?, password = ?, email = ?, enviosSalida = ?, nombreCompleto = ? WHERE IDUSR = ?")
comando.Parameters.Add(New OleDbParameter("login", Usu.Text))
comando.Parameters.Add(New OleDbParameter("password", Pass.Text))
.... (añade todos los parámetros)

A mi así siempre me funciona
  #3 (permalink)  
Antiguo 09/05/2005, 05:19
 
Fecha de Ingreso: abril-2005
Mensajes: 20
Antigüedad: 19 años
Puntos: 0
no resulta

lo hice como tu dices, sigue igual. ademas el update ke yo hago es casi igual ke el tuyo, pero con un poco menos codigo. ademas las comillas ke mencionas son necesarias para el update. porque sino la construccion del update no seria la correcta. gracias.
  #4 (permalink)  
Antiguo 09/05/2005, 05:47
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
sSQL = "Update USR Set login='"& Usu.Text &"', password='"& Pass.Text &"', email='"& Email.Text &"', NombreCompleto='"& NomCom.Text &"' Where IDUSR ='"& U &"' "

Yo lo pondría así, lo demás parece correcto
  #5 (permalink)  
Antiguo 09/05/2005, 05:56
 
Fecha de Ingreso: abril-2005
Mensajes: 20
Antigüedad: 19 años
Puntos: 0
tampoco

al poner el sql, tampoco resulta. lo ke hice es lo ultimo ke me kedada. y los anteriores sql rulaban a la perfeccion, y el ultimo dice ke es un error de sintaxis de update, no lo entiendo. yo lo veo bien.
  #6 (permalink)  
Antiguo 09/05/2005, 08:37
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Lo que puedes hacer es ejecutar la aplicación paso a paso, y pararl en el momento de que tome el valor sSQL, después pillas su valor y lo ejecutas en tu gestor de BD para ver que estás haciendo mal, así lo podrás ver más claro.

Yo ya te digo que parece todo correcto, al no ser que estén mál los campos, también puedes asegurarte de que no le estás pasando el valor ' en ninguno de los campos puesto que si es así te saltaría ese tipo de error.
  #7 (permalink)  
Antiguo 09/05/2005, 14:29
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
Cita:
Iniciado por dagoneth
ademas el update ke yo hago es casi igual ke el tuyo, pero con un poco menos codigo
Menos código pero a la vez más inseguro, vulnerable a ataques SQL Injection.

Cita:
Iniciado por dagoneth
al poner el sql, tampoco resulta. lo ke hice es lo ultimo ke me kedada. y los anteriores sql rulaban a la perfeccion, y el ultimo dice ke es un error de sintaxis de update, no lo entiendo. yo lo veo bien.
Sería bueno que envíes la descripción del error que te manda, a simple vista tu consulta no tiene ningún error.


Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #8 (permalink)  
Antiguo 10/05/2005, 00:26
 
Fecha de Ingreso: abril-2005
Mensajes: 20
Antigüedad: 19 años
Puntos: 0
bueno, aqui esta la descripcion del error.

Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

Detalles de la excepción: System.Data.OleDb.OleDbException: Error de sintaxis en la instrucción UPDATE.

Error de código fuente:

Línea 52: MyCommand.Connection.Open()
Línea 53:
Línea 54: MyCommand.ExecuteNonQuery()
Línea 55:
Línea 56: End Sub


pone ke es un error de sintaxis de update.
  #9 (permalink)  
Antiguo 10/05/2005, 00:56
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Como te dije la SQL está bien, así que en mi opinión (y ya que no has dicho que sql te queda al ejecutar paso a paso y tomar el valor) me aventuró a decir que:

-O bien el valor de U (where idusr='u') es null

-O bien alguno de los .Text que le pasas, incluye el carácter " ' " con lo que entendería final del campo no se si me entiendes. En este último caso yo para tratarlo con MySQL lo que hago es .Replace("'","\'") y así el gestor no entiende que es final del campo, si no que el varchar incluye dicho caracter.

Revisa eso y nos cuentas.
  #10 (permalink)  
Antiguo 10/05/2005, 01:32
 
Fecha de Ingreso: abril-2005
Mensajes: 20
Antigüedad: 19 años
Puntos: 0
- el update lo probe en el access y va perfecto.

- de hecho el valor de U lo guardo en IdUsu.Text, por lo ke veo no es nulo, ya que muestra un valor.

- Lo entiendo, pero lo ke tu dices no hay comillas dentro de los Text.

de hecho probe con tres metodos diferentes para hacer updates los tres dan el mismo error.

aki pongo el codigo donde se hace el update para ke veais ke esta bien.

Dim MyConnection As New OleDbConnection("PROVIDER=MICROSOFT.JET.OLEDB.4.0; DATA SOURCE=" & Server.MapPath("SIPSENWEB.mdb"))

Dim DS As DataSet
Dim MyCommand As OleDbCommand

Dim UpdateCmd As String = "UPDATE USR SET login=?, password=?, email=?, NombreCompleto = ? where IDUSR = ?"

MyCommand = New OleDbCommand(UpdateCmd, MyConnection)

MyCommand.Parameters.Add(New OleDbParameter("login", Usu.Text))
MyCommand.Parameters.Add(New OleDbParameter("password", Pass.Text))
MyCommand.Parameters.Add(New OleDbParameter("email", email.Text))
MyCommand.Parameters.Add(New OleDbParameter("NombreCompleto", NomCom.Text))
MyCommand.Parameters.Add(New OleDbParameter("IDUSR", IdUsu.Text))

MyCommand.Connection.Open()

MyCommand.ExecuteNonQuery()

Gracias
Salu2
  #11 (permalink)  
Antiguo 10/05/2005, 02:04
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Pues si la consulta te funciona en access creo que el error sólo puede ser debido a 2 cosas (aunque no debería dar error de sintaxis)

- O el usuario de ASP.NET no tiene permisos de escritura sobre la BD, por eso te deja hacer selects y no updates (prueba hacer un insert desde la aplicación)

- O estás utilizando algún tipo de bloqueo, el cual no te permite hacer updates mientras esté bloqueado.

Miralo y nos cuentas
  #12 (permalink)  
Antiguo 10/05/2005, 02:19
 
Fecha de Ingreso: abril-2005
Mensajes: 20
Antigüedad: 19 años
Puntos: 0
de hecho

- si tengo permisos de escritura sobre BD, ya que tengo otros updates sobre otras tablas de la misma BD, en las cuales me van muy bien.

- no entiendo esta parte. podrias explicarmelo

gracias.
  #13 (permalink)  
Antiguo 10/05/2005, 02:45
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Es bastante complejo, pero la base es sencilla, te explico:
Hay algunos gestores de Base de Datos que cuando se requiere un dato para la lectura o escritura o ambas bloquean el dato, ésto quiere decir que ningún otro usuario puede modificarlo (y otras veces tampoco leerlo) hasta que éste no quede desbloquedado, todo depende del nivel de bloqueo.

Access creo que no permite bloqueos pero no estoy seguro, por lo que sería si trabajas con SQL Server, Postgress u otros.

El nivel de bloqueo viene definido por tablas (cada tabla puede tener un nivel de bloqueo distinto), por eso podría ser esa opción, pero si no tu no has cambiado nada en la BD y eres su administrador (es decir, que no le ha tocado nadie) es muy improbable esta opción. Además el usuario que está visualizando el dato y editandolo supuestamente es el mismo.

Conclusión, ésto se presta bastante complejo, intenta hacer esto de forma textual, sin leer ningun otro dato de la BD, (p.ej en tu página de inicio en el page load)

Dim MyConnection As New OleDbConnection("PROVIDER=MICROSOFT.JET.OLEDB.4.0; DATA SOURCE=" & Server.MapPath("SIPSENWEB.mdb"))

Dim DS As DataSet
Dim MyCommand As OleDbCommand

Dim UpdateCmd As String = "UPDATE USR SET login='prueba', password='prueba', email='prueba', NombreCompleto='prueba' where IDUSR='unidqueexista'"

MyCommand = New OleDbCommand(UpdateCmd, MyConnection)
MyCommand.Connection.Open()
MyCommand.ExecuteNonQuery()

Si no te da error de sintaxis en este caso, el fallo estará en algo de lo que hemos comentado así que iremos paso a paso.


Otra cosa, supongo que para hacer el update, antes lees los datos (por lo menos el ID) de algún sitio, no??como los lees???Cierras la conexión después de haberlos leido???

Asegurate de eso también
  #14 (permalink)  
Antiguo 10/05/2005, 03:42
 
Fecha de Ingreso: abril-2005
Mensajes: 20
Antigüedad: 19 años
Puntos: 0
lo hice como tu dijiste sigue con el mismo error de sintaxis.

si leo los datos en el page_load. cuando termino de leer cierro la conexion.

te lo muestro pa ke lo veas.

Dim objConn As New OleDbConnection ("PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" & Server.MapPath("SIPSENWEB.mdb"))
Dim objComando As OleDbDataAdapter
Dim objDS As New DataSet
objComando = New OleDbDataAdapter(SQL2, objConn)
objComando.Fill(objDS, "IDUSR")
Dim Row
For Each Row In objDS.Tables("IDUSR").Rows
IdUsu.Text=Row(0)
Usu.TexT=Row(1)
Pass.Text=Row(2)
email.Text=Row(3)
NomCom.Text=Row(4)
Next
objConn.Close

gracias
Salu2
  #15 (permalink)  
Antiguo 10/05/2005, 03:43
 
Fecha de Ingreso: abril-2005
Mensajes: 20
Antigüedad: 19 años
Puntos: 0
olvide decir ke la SQL2 lo obtengo de una cookie

Salu2
  #16 (permalink)  
Antiguo 10/05/2005, 04:16
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Pues si la sql que te he puesto

Dim UpdateCmd As String = "UPDATE USR SET login='prueba', password='prueba', email='prueba', NombreCompleto='prueba' where IDUSR='unidqueexista'"

sigue dando error en codigo, así tal cual, el error puede ser debido a que alguno de tus tipos de datos no sean texto como dijiste y no acepte las comillas, o también que alguno de los nombres de campo o de la tabla sean nombres protegidos y los tengas que referenciar de otra forma como por ejemplo en Mysql sería

update `usr` ....
  #17 (permalink)  
Antiguo 12/05/2005, 05:08
 
Fecha de Ingreso: abril-2005
Mensajes: 20
Antigüedad: 19 años
Puntos: 0
ya esta resuelto.

Dim UpdateCmd As String = "UPDATE USR SET login=?, [password]=?, email=?, NombreCompleto = ? where IDUSR = ?"

la solucion era poner las corchetes en el password, ya que lo identifica como palabra clave.

Salu2
  #18 (permalink)  
Antiguo 12/05/2005, 05:22
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Ya lo suponía yo!!!! jeje, me alegro
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:17.