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

Elegir el valor más reciente en un Select

Estas en el tema de Elegir el valor más reciente en un Select en el foro de ASP Clásico en Foros del Web. Actualizo la base de datos con un "addnew" y un "update", introduciendo una nueva fila. El "Id" de la fila es "autoupdate". A continuación, en ...
  #1 (permalink)  
Antiguo 06/04/2008, 07:26
 
Fecha de Ingreso: septiembre-2007
Mensajes: 99
Antigüedad: 17 años, 7 meses
Puntos: 0
Elegir el valor más reciente en un Select

Actualizo la base de datos con un "addnew" y un "update", introduciendo una nueva fila. El "Id" de la fila es "autoupdate". A continuación, en el mismo script, necesito recoger ese nuevo "Id", que no conozco, para enviarlo por una url. ¿Cómo lo hago? Sólo se me ocurre crear un nuevo recordset where "más reciente elemento". Pero no sé cómo pedirle a la BD el "más reciente elemento".
¿Alguna idea, porfi?
  #2 (permalink)  
Antiguo 06/04/2008, 12:53
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años, 4 meses
Puntos: 126
Re: Elegir el valor más reciente en un Select

Prueba esto

Código PHP:
SQL "Select id, campo1, campo2, ... from tabla order by id desc"
rs.Open SQLoConn,0,2
rs
.addnew
rs
("campo1") = 14
rs
("campo2") = "blanco"
.....
rs.update
rs
.moveFirst
response
.write rs("id")
rs.Close
set rs
=nothing
oConn
.Close
set oConn
=nothing 
Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #3 (permalink)  
Antiguo 06/04/2008, 12:59
Avatar de i_e_s27  
Fecha de Ingreso: marzo-2008
Ubicación: En mi casa
Mensajes: 208
Antigüedad: 17 años, 1 mes
Puntos: 5
Re: Elegir el valor más reciente en un Select

Asi, mira:

Abris la base de datos:

Código:
Const adOpenForwardOnly = 0 'Es el cursor por defecto y nos permite recorrer el Recordset en forma secuencial.
Const adOpenKeySet = 1 'Permite movernos hacia delante y atrás. Permite observar las modificaciones en los datos del Recordset , no así si existen ingresos de nuevos registros.
Const adOpenDynamic = 2 'Permite movernos en cualquier sentido, viendo cualquier modificación, ingreso o eliminación de datos del Recordset.
Const adOpenStatic = 3 'Permite movernos en cualquier sentido, pero no se verá ningún cambio ocurrido en la tabla.

Const adLockReadOnly = 1 'Es el cerrojo por defecto y no permite modificar los registros de la tabla.
Const adLockPessimistic = 2 'Una vez que alguien abre la tabla, ésta queda bloqueada para los demás usuarios. Con este modo se asegura la integridad de los datos.
Const adLockOptimistic = 3 'La tabla sólo será bloqueada a los demás usuarios mientras se ejecute una operación Update. De esta forma la tabla se bloqueará durante mucho menos tiempo que con el método anterior.
Const adBatchOptimistic = 4 'Los registros serán actualizados en modo batch. 

Dim adoCon
Set adoCon = Server.CreateObject ("ADODB.Connection")
adoCon.open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("base_de_datos.mdb")

Set rsRECORDSET = Server.CreateObject("ADODB.Recordset")
strSQLRECORDSET = "SELECT * FROM tblcategorias"
rsRECORDSET.Open strSQLComboCategoria, adoCon, adOpenStatic, adLockOptimistic
Y para ir al primer registro asi:

rsRECORDSET.MoveFirst

Y para ir al ultimo:

rsRECORDSET.MoveLast

Aunque creo que al agregar un nuevo registro y actualizar ya solo te posiciona sobre esa fila ultima que agregaste, osea que solo tenes que hacer la consulta del ID.
  #4 (permalink)  
Antiguo 06/04/2008, 13:00
Avatar de i_e_s27  
Fecha de Ingreso: marzo-2008
Ubicación: En mi casa
Mensajes: 208
Antigüedad: 17 años, 1 mes
Puntos: 5
Re: Elegir el valor más reciente en un Select

Cita:
Iniciado por i_e_s27 Ver Mensaje
Asi, mira:

Abris la base de datos:

Código:
Const adOpenForwardOnly = 0 'Es el cursor por defecto y nos permite recorrer el Recordset en forma secuencial.
Const adOpenKeySet = 1 'Permite movernos hacia delante y atrás. Permite observar las modificaciones en los datos del Recordset , no así si existen ingresos de nuevos registros.
Const adOpenDynamic = 2 'Permite movernos en cualquier sentido, viendo cualquier modificación, ingreso o eliminación de datos del Recordset.
Const adOpenStatic = 3 'Permite movernos en cualquier sentido, pero no se verá ningún cambio ocurrido en la tabla.

Const adLockReadOnly = 1 'Es el cerrojo por defecto y no permite modificar los registros de la tabla.
Const adLockPessimistic = 2 'Una vez que alguien abre la tabla, ésta queda bloqueada para los demás usuarios. Con este modo se asegura la integridad de los datos.
Const adLockOptimistic = 3 'La tabla sólo será bloqueada a los demás usuarios mientras se ejecute una operación Update. De esta forma la tabla se bloqueará durante mucho menos tiempo que con el método anterior.
Const adBatchOptimistic = 4 'Los registros serán actualizados en modo batch. 

Dim adoCon
Set adoCon = Server.CreateObject ("ADODB.Connection")
adoCon.open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("base_de_datos.mdb")

Set rsRECORDSET = Server.CreateObject("ADODB.Recordset")
strSQLRECORDSET = "SELECT * FROM tblTABLA"
rsRECORDSET.Open strSQLComboCategoria, adoCon, adOpenStatic, adLockOptimistic
Y para ir al primer registro asi:

rsRECORDSET.MoveFirst

Y para ir al ultimo:

rsRECORDSET.MoveLast

Aunque creo que al agregar un nuevo registro y actualizar ya solo te posiciona sobre esa fila ultima que agregaste, osea que solo tenes que hacer la consulta del ID.
  #5 (permalink)  
Antiguo 07/04/2008, 12:12
 
Fecha de Ingreso: septiembre-2007
Mensajes: 99
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Elegir el valor más reciente en un Select

Muchas gracias, Adler y Ies27. He mirado tarde el foro porque pensé que ya nadie respondería.
A ver, me he escapado por los pelos, y no he necesitado hacer mucho para lograr la empresa. El tema es que me estoy comunicando con una MySQl a través del ASP, con la famosa string Driver. Sencillamente una vez añadidos los datos nuevos los he recuperado haciendo un "select * order by Id desc limit 1" al más puro estilo MySQL, y se lo ha tragado el asp perfecto.
Si no recuerdo mal, la comunicacion ASP - MySQL no permite cursores ¿cierto?
Me hubiera gustado probar la función moveFirst, pero bueno, como de momento va perfecto no lo toco.
  #6 (permalink)  
Antiguo 08/04/2008, 01:59
 
Fecha de Ingreso: septiembre-2007
Mensajes: 99
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Elegir el valor más reciente en un Select

No he probado el método con cursores, porque ya digo que me extraña que funcione, pero sí el sencillo movefirst. No, no va. Aunque lo ponga después del update, elige la penúltima fila, la que era la última antes de añadir el nuevo producto.
Es mejor cerrar la conexion despues del update, y abrir un nuevo Select después, como estaba haciendo.
  #7 (permalink)  
Antiguo 08/04/2008, 13:32
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 18 años, 2 meses
Puntos: 88
Re: Elegir el valor más reciente en un Select

utilizando este mismo codigo (permiso Adler)
Cita:
SQL = "Select id, campo1, campo2, ... from tabla order by id desc"
rs.Open SQL, oConn,0,2
rs
.addnew
rs
("campo1") = 14
rs
("campo2") = "blanco"
.....
rs.updatebatch <-- esta es la diferencia
response
.write rs("id")
rs.Close
set rs
=nothing
oConn
.Close
set oConn
=nothing
:saludos:
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #8 (permalink)  
Antiguo 08/04/2008, 14:36
 
Fecha de Ingreso: septiembre-2007
Mensajes: 99
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Elegir el valor más reciente en un Select

Hola Lord Shyriu. A ver si en un rato puedo probar tu código, pero de entrada me queda una duda ¿es así o te falta poner el movefirst debajo del updatebatch ?
  #9 (permalink)  
Antiguo 08/04/2008, 15:05
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 18 años, 2 meses
Puntos: 88
Re: Elegir el valor más reciente en un Select

no ocupa el movefirst, ya que el cursor se queda en la posicion y realiza todo el procedimiento al mismo tiempo
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #10 (permalink)  
Antiguo 08/04/2008, 15:57
 
Fecha de Ingreso: septiembre-2007
Mensajes: 99
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Elegir el valor más reciente en un Select

No..no va con la MySQL. Ahora ni siquiera da valor a la variable. Casualmente acabo de ver una conversacion casi identica en el foro pero 3 años atrás...
Lo dejo como está, aunque haya tenido que crear un recordset nuevo, que le vamos a hacer. Al menos parece una construccion muy solida.
  #11 (permalink)  
Antiguo 09/04/2008, 10:11
Avatar de mc_quake  
Fecha de Ingreso: enero-2006
Ubicación: www.ecocargo.cl
Mensajes: 683
Antigüedad: 19 años, 3 meses
Puntos: 8
Re: Elegir el valor más reciente en un Select

FUNCION PARA BUSCAR EL ULTIMO REGISTRO INGRESADO EN LA BD, BASTANTE UTIL

ASI SE LLAMA
ultimodato = sqlmaximo(campo, tabla)

campo = corresponde autonumerico
tabla = tabla que buscas el ultimo registro ingresado

ESTA ES LA FUNCION

Function sqlmaximo( campo, tabla )
on error resume next
sql = "select max("&campo&") as maximo from "&tabla
set rsmax = db.execute(sql)
if err <> 0 then
Response.Write("ERROR :"&err.description&"<hr>")
else
if not rsmax.eof then
sqlmaximo = rsmax("maximo")
end if
rsmax.close
End Function
__________________
Atte,

A n g e l u s
__________________
Mc_Quake

Para ayudar en lo que se pueda:Zzz:
  #12 (permalink)  
Antiguo 09/04/2008, 17:21
 
Fecha de Ingreso: septiembre-2007
Mensajes: 99
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Elegir el valor más reciente en un Select

Cita:
Iniciado por mc_quake Ver Mensaje
FUNCION PARA BUSCAR EL ULTIMO REGISTRO INGRESADO EN LA BD, BASTANTE UTIL

ASI SE LLAMA
ultimodato = sqlmaximo(campo, tabla)

campo = corresponde autonumerico
tabla = tabla que buscas el ultimo registro ingresado

ESTA ES LA FUNCION

Function sqlmaximo( campo, tabla )
on error resume next
sql = "select max("&campo&") as maximo from "&tabla
set rsmax = db.execute(sql)
if err <> 0 then
Response.Write("ERROR :"&err.description&"<hr>")
else
if not rsmax.eof then
sqlmaximo = rsmax("maximo")
end if
rsmax.close
End Function
Pues sí que es útil esto para usar en caso general y aplicado a muchas BDs, pero en el caso concreto de ASP con MySQL, si el tema consiste en usar una conexión extra a la base, el "SELECT * ORDER BY campo DESC LIMIT 1" va de lujo y es bien sencillo de implementar.
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 10:52.