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

Problemas con Funcion

Estas en el tema de Problemas con Funcion en el foro de ASP Clásico en Foros del Web. Hola Amigos. Quisiera solicitar su ayuda para poder solucionar el siguiente problema: Tengo una consulta en la cual extraigo todos los registros correspondientes a una ...
  #1 (permalink)  
Antiguo 17/04/2006, 20:01
 
Fecha de Ingreso: abril-2006
Mensajes: 49
Antigüedad: 18 años, 1 mes
Puntos: 0
Problemas con Funcion

Hola Amigos.

Quisiera solicitar su ayuda para poder solucionar el siguiente problema:

Tengo una consulta en la cual extraigo todos los registros correspondientes a una Orden de Trabajo.
Uno de estos campos es el id del cliente (num).

Lo que quiero lograr, es tomar este id del cliente y meterlo en una función para que me retorne el nombre y los apellidos del cliente, pero por alguna razón que desconozco, no me resulta.


La funcion:

function fncSacaNombreCliente(id_cliente)
sql= "SELECT clientes.id_cliente, clientes.nombre, clientes.apaterno, clientes.amaterno FROM clientes WHERE id_cliente="& id_cliente &""
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, fncConectar("bdatos")
nombre=rs("nombre")
amaterno=rs("amaterno")
apaterno=rs("apaterno")
cliente=nombre & " " & apaterno & " " & amaterno
fncSacaNombreCliente=cliente
end function

Los datos quiero mostrarlos en una tabla, pero me sale un error:

Tipo de error:
ADODB.Recordset (0x800A0CC1)
No se encontró el elemento en la colección que corresponde con el nombre o el ordinal pedido.


Tengan claro, que los registros si existen, y están bien llamados los nombres de los campos.

Esta es la parte donde muestro los registros:
while (not rs.Eof)

id=rs("id_cliente")

nombre_cliente=fncSacaNombreCliente(id)

response.Write("<tr class=grilla><td align=right>" & rs("numero_orden") & "</td><td align=right>"&_
" "& nombre_cliente & "</td><td align=right>" & rs("fecha_ingreso") & "</td><td align=right>"&_
""& rs("modelo") & "</td><td align=right>+valor Reparacion</td><td align=right>"&_
"" & rs("estado_reparacion") & "</td><td align=right>" & rs("guia_despacho") & "</td><td align=right>+Ver_detalle</td></tr>")
rs.MoveNext
wend

Si dejo comentada la grilla (no muestro valores con el nombre del cliente o bien símplemente muestro el id del cliente), la funcion trabaja sin ningun problema, pero si quiero mostrar la transformacion del id_cliente, por el nombre del cliente, me sale el error....

Alguna idea???
  #2 (permalink)  
Antiguo 18/04/2006, 09:25
 
Fecha de Ingreso: noviembre-2005
Mensajes: 658
Antigüedad: 18 años, 7 meses
Puntos: 3
Lo que te indica ese error es que uno de los nombres de las columnas de tu select no concuerda con lo definido en tu tabla clientes.... revisa bien los nombres para la tabla y tu select....
  #3 (permalink)  
Antiguo 19/04/2006, 18:11
 
Fecha de Ingreso: abril-2006
Mensajes: 49
Antigüedad: 18 años, 1 mes
Puntos: 0
Bueno el problema se resume a que en que la funcion dentro del while, se ejecuta solo una vez, en cambio al consultar por el nombre del cliente según el id, en la misma página, el dato se obtiene según la cantidad de registros que existan.

Por que ocurre esto?


***********************************************
while (not rs.Eof)

id=rs("id_cliente")

nombre_cliente=fncSacaNombreCliente(id)

response.Write("<tr class=grilla><td align=right>" & rs("numero_orden") & "</td><td align=right>"&_
" "& nombre_cliente & "</td><td align=right>" & rs("fecha_ingreso") & "</td><td align=right>"&_
""& rs("modelo") & "</td><td align=right>+valor Reparacion</td><td align=right>"&_
"" & rs("estado_reparacion") & "</td><td align=right>" & rs("guia_despacho") & "</td><td align=right>+Ver_detalle</td></tr>")
rs.MoveNext
wend
******************************************
  #4 (permalink)  
Antiguo 19/04/2006, 18:14
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Más bien que tu recordset se muere dentro de esta función.
La manera en la que lo pensaste es correcta, regresar todas las propiedades, si quieres hacerlo de una manera mas intuitiva, yo te recomendaría que hicieras una clase, de esa forma, tendrías un método, ObtenerRegistro por ejemplo, que regresara todas las propiedades para un id.

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #5 (permalink)  
Antiguo 19/04/2006, 18:22
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
mmmm, tienes un ciclo dode llamas a una función que hace un select solo para concatenar unos campos .......

¿por que no formas el nombre desde el primer query y te dejas de funciones?
  #6 (permalink)  
Antiguo 19/04/2006, 18:45
 
Fecha de Ingreso: abril-2006
Mensajes: 49
Antigüedad: 18 años, 1 mes
Puntos: 0
Uff, agradezco la preocupacion por el caso.

Respecto a las sugerencias me nacen 2 dudas.

U_goldman:

1- ¿Se puede trabajar con clases y objetos con ASP puro?, yo tenía entendido que solo lo permitía ASP.NET


Myakire:

2- << ¿por que no formas el nombre desde el primer query y te dejas de funciones? >>
Realmente no te entiendo la idea, disculpame.

Última edición por El_pera; 19/04/2006 a las 18:54
  #7 (permalink)  
Antiguo 19/04/2006, 21:33
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Se puede trabajar con objetos claro está, no como en .NET porque no estamos programando orientado a objetos, pero claro que puedes crear tus propios objetos...


Código:
Class cliente
  private m_id
  private m_nombre
  private m_direccion

  Public Property Get id()
     id = m_id
  End Property
  Public Property Let id(p_data)
    m_id = p_data
  End Property

  Public Property Get nombre()
     nombre = m_nombre
  End Property
  Public Property Let nombre(p_data)
    m_nombre = p_data
  End Property  

  Public Property Get direccion()
     direccion = m_direccion
  End Property
  Public Property Let direccion(p_data)
    m_direccion = p_data
  End Property

  Public Function GetRec()
    Dim ObjConn
    Dim rs
    Dim param
    Dim cmd
    Dim boolEncontrado
    Dim qry

    Set ObjConn = Server.CreateObject("ADODB.Connection")
    Set rs = Server.CreateObject("ADODB.Recordset")
    Set cmd = Server.CreateObject("ADODB.Command")

    qry = "SELECT nombre, direccion FROM tbl_cliente WHERE id = ? "

    Set param = cmd.CreateParameter("id", adInteger, adParamInput, 4, m_id)
    cmd.Parameters.Append(param)

    ObjConn.Open strConnect
    cmd.ActiveConnection = ObjConn
    cmd.CommandType = adCmdText
    cmd.CommandText = qry

    rs.Open cmd

    if not rs.eof then
      boolEncontrado = true
      m_nombre = rs("nombre")
      m_direccion = rs("direccion")
      rs.Close()
    else
      boolEncontrado = false
    end if

    Set rs = Nothing
    ObjConn.Close
    Set ObjConn = Nothing
    Set cmd = Nothing
    Set param = Nothing

    GetRec = boolEncontrado
  End Function
End Class


valor = 4
Set ObjCliente = new cliente
ObjCliente.id = valor
if ObjCliente.GetRec() then
  Response.Write("Nombre: " & ObjCliente.name & "<br />")
  Response.Write("Direccion: " & ObjCliente.direccion & "<br />")
else
  Response.Write("El cliente no existe")
end if
Set ObjCliente = Nothing

Saludos!
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #8 (permalink)  
Antiguo 19/04/2006, 22:00
 
Fecha de Ingreso: abril-2006
Mensajes: 49
Antigüedad: 18 años, 1 mes
Puntos: 0
Interesante propuesta, no conocía esa forma de trabajar, muchas gracias por el aporte.
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 16:32.