Foros del Web » Programando para Internet » ASP Clásico »

Error en Codigo SQL

Estas en el tema de Error en Codigo SQL en el foro de ASP Clásico en Foros del Web. Señores: Tengo una tabla PAIS, con varios campos, uno de los cuales esta vacio (campo: CodigoRaza), y es precisamente el que voy a actualizar. A ...
  #1 (permalink)  
Antiguo 07/01/2004, 22:31
 
Fecha de Ingreso: diciembre-2003
Mensajes: 13
Antigüedad: 21 años, 4 meses
Puntos: 0
Error en Codigo SQL

Señores:

Tengo una tabla PAIS, con varios campos, uno de los cuales esta vacio (campo: CodigoRaza), y es precisamente el que voy a actualizar.
A ese campo se le agregará un valor (Id_New)

Parte del codigo es:

1)

Set conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.RecordSet")
conn.Open "ieee3"

sSQL="UPDATE Pais SET CodigoRaza=Id_New WHERE CodigoPais=MiID"
RS.Open sSQL,conn,1,2


y me sale el error: Pocos parámetros. Se esperaba 2.

pero no se donde esta mal...

....falta algun signo o simbolo?...donde?.....les agradecere me den una mano en esto please

2)
Si pongo:

sSQL="UPDATE Pais"
sSQL=sSQL & "SET CodigoRaza=Id_New"
sSQL=sSQL & "WHERE CodigoPais=MiID"

tambien me sale error: Error de sintaxis en la instrucción UPDATE

Gracias de antemano
Franco
  #2 (permalink)  
Antiguo 08/01/2004, 00:00
Avatar de univercity  
Fecha de Ingreso: noviembre-2002
Mensajes: 681
Antigüedad: 22 años, 6 meses
Puntos: 0
Yo prefiero trabajar con un Loop, asi tu sql solo tendría que decir...

sSQL="Select * from Pais"

y dentro del Loop...

RS.Update
Rs("CodigoRaza")=id_New
Rs.Update


Slds.
__________________
"Lo importante es nunca dejar de hacerse preguntas"
Albert Einstein
  #3 (permalink)  
Antiguo 08/01/2004, 10:34
 
Fecha de Ingreso: septiembre-2003
Mensajes: 341
Antigüedad: 21 años, 7 meses
Puntos: 0
Hola

Creo que lo que està mal es que no le pasas bien los parametros a la sql.

prueba esto:

sSQL="UPDATE Pais SET CodigoRaza="&Id_New&" WHERE CodigoPais="&MiID

Saludos
  #4 (permalink)  
Antiguo 09/01/2004, 18:59
 
Fecha de Ingreso: diciembre-2003
Mensajes: 13
Antigüedad: 21 años, 4 meses
Puntos: 0
Sale error al correr codigo SQL

Hola:
Gracias por tu sugerencia.
Mira, he hecho como dijiste, puse:

sSQL="UPDATE Pais SET CodigoRaza="&Id_New&" WHERE CodigoPais="&MiID

y luego puse:
RS.Open sSQL,conn,1,2

Pero me sale el error:
"Pocos parámetros. Se esperaba 1"

Y si uso:
set RS=conn.Execute(sSQL)

...me sale el error:
"Pocos parámetros. Se esperaba 2"

no se donde puede estar faltando parametros.

Sls

Franco
  #5 (permalink)  
Antiguo 12/01/2004, 05:22
 
Fecha de Ingreso: septiembre-2003
Mensajes: 341
Antigüedad: 21 años, 7 meses
Puntos: 0
Comprueba si alguno de los campos de la tabla no tiene que estar vacio.
__________________
---Nuestra recompensa se encuentra en el esfuerzo y no en el resultado. Un esfuerzo total es una victoria completa.-- GHANDI
  #6 (permalink)  
Antiguo 12/01/2004, 08:11
Avatar de jercer  
Fecha de Ingreso: octubre-2003
Mensajes: 373
Antigüedad: 21 años, 6 meses
Puntos: 13
Los valores 'ID_NEW' y 'MiID' de donde deben ser cojidos, de una tabla o del ASP?

Podrías poner un response.write sSQL antes de ejecutar la sentencia y mostrar lo que presenta.

Yo haría en vez de:
RS.Open sSQL,conn,1,2
pondria:
conn.execute sSQL
  #7 (permalink)  
Antiguo 14/01/2004, 21:22
 
Fecha de Ingreso: diciembre-2003
Mensajes: 13
Antigüedad: 21 años, 4 meses
Puntos: 0
Hola:

El valor ID_NEW: el el codigo autonumerico que se genera automaticamente cuando guardo un registro en RAZA (este codigo luego guardaré tambien en PAIS)

El valor MiID: Es el codigo del ultimo registro grabado en PAIS, que el usuario ingresa manualmente.

Tambien he puesto como sugieres, el response.write, para visualizar la cadena SSQL, con el fin de ver si se estan enviando los parametros o no a la BD, asi:

....
....
sSQL="UPDATE Pais SET CodigoRaza="&Id_New&" WHERE CodigoPais="&MiID
Response.Write sSQL & "<br>"
RS.Open sSQL, conn, 1, 2
....
....(sigue mas linea codigo)

Resultado?
el programa corre bien hasta la linea donde se imprime la cadena sSQL, pues aparece, por ejemplo:
...
...
UPDATE Pais SET CodigoRaza=176 WHERE CodigoPais=ygt

y a continuancion me sigue saliendo el mismo mensaje de error:
"Pocos parámetros. Se esperaba 1. "

(Tampoco sale si uso: set RS=conn.Execute(sSQL) o conn.Execute sSQL)

esto me esta desesperando.....
de todo modos gracias de antemano si tuvieras alguna sugerencia mas.

Franco

PD.

Mi sistema lo que hace es, por medio de dos formularios, captura informacion para grabarlos en 4 tablas:
- pais (campos: codigopais, nombre, codigoraza)
- raza (codigoraza, color, apodo, grosor)
- ciudad (codigociudad, nombre, poblacion, codigopais)
- fabrica (codigofabrica, nombre, empleado, codigociudad)

El codigo en general es:

Dim sSQL,conn,RS, RS2,Temp,sSQL, MiID, RsId

'---------INSERTAR PAIS-------------
'al insertar un registro en PAIS
' el unico campo que quedara vacio es:codigoraza
' hasta que se registre la informacion en la tabla RAZA, pues solo recien puedo obtener el codigo del ultimo registro ingresado,
el cual sera ingresado despues en la tabla PAIS

set conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.RecordSet")
conn.Open "ieee3"

sSQL="SELECT * FROM Pais WHERE (CodigoPais='"&pCodPais&"');"
RS.Open sSQL,conn,1,2

if not RS.EOF then
Response.Write "El pais ya fue ingresado. "
Response.Write "Por favor, escoja otro."

else
Set conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.RecordSet")
conn.Open "ieee3"

sSQL="INSERT INTO Pais " & "(Nombre, CodigoPais)"
sSQL=sSQL & " VALUES ('"&pNomPais&"', '"&pCodPais &"')"
'set RS=conn.Execute(sSQL)
RS.Open sSQL,conn,1,2
Response.Write "Nombre del Pais: " &pNomPais& "<br>"
Response.Write "Codigo del Pais ingresado: " &pCodPais& "<br>"

'----------INSERTAR RAZA------------

'Set conn = Server.CreateObject("ADODB.Connection")
'Set RS = Server.CreateObject("ADODB.RecordSet")
'conn.Open "ieee3"
sSQL="SELECT * FROM Pais WHERE (CodigoPais='"&pCodPais&"');"
'set RS=conn.Execute(sSQL)
RS.Open sSQL,conn,1,2

if not RS.EOF then
MiID= RS.Fields("CodigoPais")
Response.Write "Codigo del Pais registrado que se utilizara para Raza: " &MiID& "<br>"

Set conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.RecordSet")
conn.Open "ieee3"

sSQL="INSERT INTO Raza " & "(Color, Apodo, Grosor)"
sSQL=sSQL & " VALUES ('"&pColRaza&"', '"&pApoRaza &"', '"&pGroRaza &"')"
'set RS=conn.Execute(sSQL)
RS.Open sSQL,conn,1,2
Response.Write "Color de la Raza: " &pColRaza& "<br>"
Response.Write "Apodo de la Raza: " &pApoRaza& "<br>"
Response.Write "Grosor de la Raza: " &pGroRaza& "<br>"

'-------recupera el codigo del ultimo registro grabado en la tabla RAZA-----
Set RsId = Server.CreateObject("ADODB.Recordset")
cSql = "Select @@IDENTITY as Ident"
RsId.Open cSql, conn
Id_New = RsId("Ident")
RsId.Close
Set RsId = Nothing

Set conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.RecordSet")
conn.Open "ieee3"

'------una vez obtenido el codigo de dicho registro grabado en RAZA, lo guardo en en la tabla PAIS---------

sSQL="UPDATE Pais SET CodigoRaza="&Id_New&" WHERE CodigoPais="&MiID

Response.Write sSQL & "<br>"

RS.Open sSQL, conn, 1, 2
'set RS=conn.Execute(sSQL)
'conn.Execute sSQL

if not RS.EOF then
MiID= RS.Fields("CodigoPais")
Response.Write "Codigo de Raza registrado en Pais: " &MiID& "<br>"

else
Response.Write "NO se registró bien codigo Raza en Pais: " &MiID& "<br>"
end if

else
Response.Write "No se puede registrar raza pues NO esta registrado el pais "
end if

'--------------INSERTAR CIUDAD------

sSQL="SELECT * FROM Pais WHERE (CodigoPais='"&pCodPais&"');"
set RS=conn.Execute(sSQL)

if not RS.EOF then
MiID= RS.Fields("CodigoPais")
Response.Write "codigo del pais a utilizar para Ciudad: " &MiID& "<br>"
sSQL="INSERT INTO Ciudad " & "(Nombre, CodigoCiudad, Poblacion, CodigoPais)"
sSQL=sSQL & " VALUES ('"&pNomCiudad&"','"&pCodCiudad&"', '"&pPobCiudad&"', '"&MiID&"')"
conn.Execute(sSQL)
Response.Write "Nombre de la Ciudad: " &pNomCiudad& "<br>"
Response.Write "Poblacion de la Ciudad: " &pPobCiudad& "<br>"
Response.Write "Codigo de la Ciudad ingresada: " &pCodCiudad& "<br>"

else
Response.Write "No se pudo registrar Ciudad pues no esta registrado el Pais. "
end if

'-----------INSERTAR FABRICA--------

sSQL="SELECT * FROM Ciudad WHERE (CodigoCiudad='"&pCodCiudad&"');"
set RS=conn.Execute(sSQL)
Response.Write "Comprobando que esta registrada la ciudad con codigo: " &CodigoCiudad& "<br>"

if not RS.EOF then
MiID= RS.Fields("CodigoCiudad")
Response.Write "codigo del pais a utilizar para Fabrica: " &MiID& "<br>"
sSQL="INSERT INTO Fabrica " & "(CodigoFabrica, Nombre, Empleados, CodigoCiudad)"
sSQL=sSQL & " VALUES ('"&pCodFabrica&"', '"&pNomFabrica&"', '"&pEmpFabrica&"','"&MiID &"')"
conn.Execute(sSQL)
Response.Write "Nombre de la Fabrica: " &pNomFabrica& "<br>"
Response.Write "Poblacion de la Fabrica: " &pEmpFabrica& "<br>"
Response.Write "Codigo de la Fabrica ingresado: " &pCodFabrica& "<br>"


else
Response.Write "la ciudad no fue ingresado para registrar fabrica. "
End if

end if

'Limpiamos objetos
RS.Close
conn.Close
set RS=nothing
set conn=nothing

%>

</body>
</html>
  #8 (permalink)  
Antiguo 15/01/2004, 08:26
Avatar de jercer  
Fecha de Ingreso: octubre-2003
Mensajes: 373
Antigüedad: 21 años, 6 meses
Puntos: 13
Creo que el error está en:

if not RS.EOF then

Que está despues del update, el update creo q no devuelve nada.

De todas formas creas los mismos objetos varias veces como:

set conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.RecordSet")

Lo cual debería dar error para asignarle nuevos valores al rs, deberías cerrarlo y luego abrirlo así:

rs.close
RS.Open sSQL
  #9 (permalink)  
Antiguo 15/01/2004, 11:35
Avatar de mebarak  
Fecha de Ingreso: julio-2001
Ubicación: México, Distrito Federal
Mensajes: 133
Antigüedad: 23 años, 10 meses
Puntos: 0
creo que tu eror esta en el tipo de cursor que estás abriendo, prueba poniendo

RS.Open sSQL,conn,1,3,2

Suerte
__________________
Daniel Nava
Sistem administrator Wintel
Desarrollador web [IIS]
http://mebarak.blogspot.com
  #10 (permalink)  
Antiguo 09/02/2004, 16:26
 
Fecha de Ingreso: diciembre-2003
Mensajes: 13
Antigüedad: 21 años, 4 meses
Puntos: 0
Amigos:

Ya resolvi el problema.
En vez de usar el comando UPDATE, tal como sigue:

sSQL="UPDATE Pais SET CodigoRaza=Id_New WHERE CodigoPais=MiID"
RS.Open sSQL,conn,1,2

Usé lo sgte.:

(hago la cadena de busqueda para recuperar en un recordset el registro que voy a actualizar)
sSQL = "SELECT CodigoRaza FROM Pais WHERE CodigoPais ='" &MiID& "'"

RS.Open sSQL,conn,1,3

(una vez que tengo dicho registro, actualizo sus campos)
RS("CodigoRaza") = Id_New
RS.Update

...y listo
me olvido de usar UPDATE que tanto dolor de cabeza me trajo ...

Gracias a todos por sus sugerencias.
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

SíEste tema le ha gustado a 1 personas




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