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

Consulta parametrica

Estas en el tema de Consulta parametrica en el foro de ASP Clásico en Foros del Web. Hola, Antes que nada, estoy muy pez en ASP siempre utilizo PHP pero al tener que modificar un campo OLE en access me he tenido ...
  #1 (permalink)  
Antiguo 19/12/2010, 07:30
Avatar de trikerr  
Fecha de Ingreso: julio-2009
Mensajes: 8
Antigüedad: 14 años, 9 meses
Puntos: 0
Consulta parametrica

Hola,

Antes que nada, estoy muy pez en ASP siempre utilizo PHP pero al tener que modificar un campo OLE en access me he tenido que pasar a ASP.

El problema es sencillo (creo). Tengo un programa hecho por un amigo en VB.Net que inserta los datos que quiero en esa tabla de access pero ahora quiero hacerlo en ASP.

El codigo que tengo en .NEt es este. Pero no hay manera de hacer esta consulta en ASP.

Alguien me puede echar una mano, o indicarme donde buscar xq por google ya he dado mas de mil vueltas y no hay manera. Conectarme con la BBDD me conecto sin problemas y puedo recoger datos con una consulta normal, el problema viene en la consulta parametrica.

Un saludo


Código:
Try
    ''Sentencia INSERT en la tabla User
    queryString = "insert into User (UserID, SerialNumber, Name, Surname, Sex, UserData) VALUES (?, ?, ?, ?, ?, ?)"

    ''Generamos el comando, asignandole la sentencia INSERT y añadiendole los parametros necesarios.
    Dim cm As ADODB.Command
    cm = New ADODB.Command
    cm.ActiveConnection = ConexionBD
    cm.CommandText = queryString

    ''Parametros.
    cm.Parameters.Append(cm.CreateParameter("@UserID", DataTypeEnum.adInteger, ParameterDirectionEnum.adParamInput, , oROW.Item("UserID")))
    cm.Parameters.Append(cm.CreateParameter("@SerialNumber", DataTypeEnum.adVarChar, ParameterDirectionEnum.adParamInput, 200, oROW.Item("SerialNumber")))
    cm.Parameters.Append(cm.CreateParameter("@Name", DataTypeEnum.adVarChar, ParameterDirectionEnum.adParamInput, 200, oROW.Item("Name")))
    cm.Parameters.Append(cm.CreateParameter("@Surname", DataTypeEnum.adVarChar, ParameterDirectionEnum.adParamInput, 200, oROW.Item("Surname")))
    cm.Parameters.Append(cm.CreateParameter("@Sex", DataTypeEnum.adVarChar, ParameterDirectionEnum.adParamInput, 200, oROW.Item("Sex")))
    Dim UserData(3) As Byte
    UserData(0) = oROW.Item("UserData1")
    UserData(1) = oROW.Item("UserData2")
    UserData(2) = oROW.Item("UserData3")
    UserData(3) = oROW.Item("UserData4")
    cm.Parameters.Append(cm.CreateParameter("@UserData", DataTypeEnum.adVarBinary, ParameterDirectionEnum.adParamInput, 100, UserData))
    cm.CommandType = CommandTypeEnum.adCmdText

    ''Se ejecuta el comnado y se cierra la conexion.
    cm.Execute()
Catch ex As Exception
    ConexionBD.Close()
    l_LOGS("Error al dar de alta el usuario con UserID: " & oROW.Item("UserID") & vbCrLf & ex.Message)
    Return False
End Try
  #2 (permalink)  
Antiguo 20/12/2010, 10:48
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Respuesta: Consulta parametrica

Esta página despejará tus dudas.

Léela y luego nos comentas

Saludos
  #3 (permalink)  
Antiguo 20/12/2010, 17:34
Avatar de trikerr  
Fecha de Ingreso: julio-2009
Mensajes: 8
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Consulta parametrica

Gracias! Mañana lo intento y te cuento.

Tiene buena pinta!
  #4 (permalink)  
Antiguo 21/12/2010, 06:22
Avatar de trikerr  
Fecha de Ingreso: julio-2009
Mensajes: 8
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Consulta parametrica

No hay manera.

Solo estoy intentando insertar el nombre de un usuario y aun asi no hay manera. No me quiero ni imaginar cuando llegue al VarBinnary.

Este es el error que me da:
Cita:
ADODB.Command error '800a0bb9'

Argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros.

/sinc/sincronizar3.asp, line 15
Leyendo por internet dice esto:
Cita:
Explicación y posible solución:
Varios posibles errores.
Podria estar intentando abrir una tabla, sin referenciar la conexion que se debia crear anteriormente.
Me estoy saltando algo? Como se ve en el codigo tengo un par de lineas al final comentadas, con ese codigo si que me inserta el usuario en la BBDD.

Este es el codigo que tengo:
Código:
<%@ LANGUAGE="VBSCRIPT" %>
<%
DIM objCon
Set objCon = Server.CreateObject("ADODB.Connection")
strDSN = "DSN=SmaFingerIdelec;"
objCon.Open strDSN

sName = "John1"
iNum = 20

sSQL = "INSERT INTO User (Name) values ('" & sName & "')"
Set objCommand = CreateObject("ADODB.Command")
With objCommand
	.CommandText = "INSERT INTO User (Name) values (?)"
	.CommandType = adCmdText
	.ActiveConnection = "DSN=SmaFingerIdelec;"
	.Parameters.Append .CreateParameter("@sName", adVarChar, adParamInput, 200, sName)
	.Execute

Set .ActiveConnection = Nothing
End With

''sSQL = "INSERT INTO User (Name) values ('" & sName & "')"
''objCon.Execute sSQL
Response.Write "<p>" & sSQL & "</p>"

objCon.Close
set objCon = nothing
%>
A ver si me podeis ayudar. Gracias!!
  #5 (permalink)  
Antiguo 21/12/2010, 12:30
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Respuesta: Consulta parametrica

Si

La constante adCmdText no la tienes definida

Debes definir cada constante o incluir el archivo adovbs.inc

saludos
  #6 (permalink)  
Antiguo 22/12/2010, 05:06
Avatar de trikerr  
Fecha de Ingreso: julio-2009
Mensajes: 8
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Consulta parametrica

Hola!!

Ya casi lo tienes, y digo tienes xq yo hago mas bien poquito.

Ahora ya puedo insertar un usuario pero el problema viene en el campo UserData. Que es un objeto OLE.

Es decir, esto funciona:
Código:
With objCommand
	.CommandText = "INSERT INTO User (Name) values (?)"
	.CommandType = adCmdText
	.ActiveConnection = "DSN=SmaFingerIdelec;"
	.Parameters.Append .CreateParameter("@sName", adVarChar, adParamInput, 200, sName)
	.Execute

Set .ActiveConnection = Nothing
End Withection = Nothing
End With
Y esto no funciona:
Código:
aUserData(0)=155
aUserData(1)=203
aUserData(2)=169
aUserData(3)=117
With objCommand
	.CommandText = "INSERT INTO User (Name,UserData) values (?,?)"
	.CommandType = adCmdText
	.ActiveConnection = "DSN=SmaFingerIdelec;"
	.Parameters.Append .CreateParameter("@sName", adVarChar, adParamInput, 200, sName)
	.Parameters.Append .CreateParameter("@aUserData", adVarBinary, adParamInput, 100, aUserData)
	.Execute

Set .ActiveConnection = Nothing
End With
Como puedes ver en el primer post, la linea para crear el parámetro es muy similar a la que utilizaba mi amigo en el programa que hizo en Visual. Me refiero a esta:
Código:
    cm.Parameters.Append(cm.CreateParameter("@UserData", DataTypeEnum.adVarBinary, ParameterDirectionEnum.adParamInput, 100, UserData))
Se me olvidaba decir que el error que da es que no coinciden los tipos:
Código:
ADODB.Command error '800a0d5d'

La aplicación utiliza un valor de tipo no válido para la operación actual.

/sinc/sincronizar3.asp, line 24

Última edición por trikerr; 22/12/2010 a las 05:18
  #7 (permalink)  
Antiguo 23/12/2010, 08:05
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Respuesta: Consulta parametrica

aUserData es un vector y el parámetro que defines es de tipo Binary es decir, un stream, por eso el error.

No entendí qué es lo que quieres meter en ese campo, digo, se que los valores del arreglo, pero eso no es un dato binario.

Lo "normal" seria hacer algo como esto:

Set stmStream = CreateObject("ADODB.Stream")
stmStream.Type = adTypeBinary
stmStream.Open
stmStream.LoadFromFile "ruta/nombreDeUnArchivo"
rs.Fields("CampoBinario").Value = stmStream.Read
rs.Update

o algo así:

Set stmStream = CreateObject("ADODB.Stream")
stmStream.Type = adTypeBinary
stmStream.Open
stmStream.LoadFromFile "ruta/nombreDeUnArchivo"
archivo = strIn.Read(adReadAll)
Set param = com.CreateParameter("aUserData", adVarBinary, adParamInput,
LenB(archivo),archivo)
com.Parameters.Append param

http://www.google.com.mx/search?aq=f...&q=adVarBinary

Etiquetas: Ninguno
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 11:41.