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

Haber si alguien me ayuda con esto.

Estas en el tema de Haber si alguien me ayuda con esto. en el foro de ASP Clásico en Foros del Web. Es algo que tengo que añadir en mi aplicación obligatoriamente, aunque no me haga mucha ilusión. El asunto es el siguiente: Tengo una base de ...
  #1 (permalink)  
Antiguo 10/01/2003, 05:09
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 2
Haber si alguien me ayuda con esto.

Es algo que tengo que añadir en mi aplicación obligatoriamente, aunque no me haga mucha ilusión.

El asunto es el siguiente:

Tengo una base de datos con los siguientes campos:

Usuario: Ej: haven
Fase: Ej: diseño
Cliente: Ej: Adisna
Prioridad: Ej:1 (Una prioridad 1 es de máximo nivel)

Luego tengo un formulario para introducir estos datos. Necesito lo siguiente:

- si el campo prioridad está vacío, que me recorra la base de datos vea que prioridades hay para ese usuario y ese cliente y si por ejemplo en nuestra base tenemos prioridad 1 y 3, entonces que me ponga prioridad 4, siempre tiene que ser la última prioridad que exista en la base de datos y sumarle1

- Si le pongo una prioridad que no existe entonces ningún problema la guardamos y ya está.

- Si pongo una prioridad que sí existe en la BD, si tengo prioridad 1,2,3,5 y en el campo prioridad pongo 2, entoces este nueva inserción será la 2 y las que están en la base de datos se moverían 1, es decir la que era 2 será 3 la 3 = 4 y la 5=6

Existen más variables pero si alguien me puede ayudar con esto sería más que suficiente.

Un saludo
  #2 (permalink)  
Antiguo 10/01/2003, 06:58
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 22 años, 7 meses
Puntos: 0
no entendi nada...sera ke es muy temprano?
  #3 (permalink)  
Antiguo 10/01/2003, 08:18
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 2
Vale bakanzipp, la verdad es que es un poco lío , yo me estoy liando un montón, vamos a ver como lo explico....

Tenemos una tabla con los siguientes campos y los siguientes datos contenido en la tabla

Usuario Cliente Prioridad
bakanzipp Forosdelweb 1
bakanzipp maestrosdelweb 3

Yo para meter estos datos tengo un formulario, vaya como todos, pero ahora bien a la hora de guardar los datos, el nombre de usuario y de cliente se guardarían con un

resquest("Usuario") = rs("Usuario")

vale, esto níngun problema, el problema viene cuando quiero guardar el campo prioridad, le tendré que decir

if resquest("Usuario") = "" 'o sea si está vacio

' y aquí le devería decir que si el campo está vacío me haga una consulta a mi BD y me saque las prioridades que tiene este usuario, que en este caso sería 1 y 3, después de decirle esto le diríamos que recoja el último número de esas prioridades, o sea el 3 y le sume 1 con lo que la prioridad que guardaríamos sería 4

Ahora bien si ponemos una prioridad en el formulario por ejemplo le ponemos prioridad 2, entonces deberíamos comprobar si existe

if request("Usuario") = rs("Usuario") then

' si el número no existe pues lo guardamos, aquí ningún problema

Pero si en vez del 2 ponemos de prioridad 3 que es un número que sí existe, lo que tendríamos que hacer, sería guardar ese nuevo registro con la prioridad 3 y renombrar las prioridades que tenga así mismo prioridad 3 y las que estén por debajo si las hubiera, en este caso al insertar el 3, el 3 que había antes pasaría a ser 4 y si en nuestra BD tendríamos prioridad 4 entonces pasaría a prioridad 5.

Uff!!! espero no haber vuelto a liarte aún más.

Un saludo

Última edición por haven; 10/01/2003 a las 08:24
  #4 (permalink)  
Antiguo 10/01/2003, 08:20
Avatar de DanielRey
Usuario no validado
 
Fecha de Ingreso: enero-2001
Ubicación: Mendoza
Mensajes: 630
Antigüedad: 23 años, 4 meses
Puntos: 1
Hola Haven

Esta mañana a las 9:00 de Argentina escribí la respuesta a tu pregunta, pero como demoré bastante en escribirla, espiró la sesión, y cuando volví a loguearme, me dio un mensaje raro y mi respuesta se perdió

Ahora, antes de loguearme la escribí completa, te la transcribo, espero que te sirva

si dejaron en blanco prioridad:

Rs.Source = "select MAX(prioridad) from tareas where usuario = " & el_usuario & " and cliente = " & el_cliente
Rs.Open
' Revisamos si hay alguna prioridad cargada y le sumamos 1 a la mayor, caso contrario, ponemos 1
If Rs.EOF Then
Conn.Execute "Insert into tareas (usuario, cliente, fase, prioridad) values (" & el_usuario & ", " & el_cliente & ", " & la_fase & ", 1)"
Else
Conn.Execute "Insert into tareas (usuario, cliente, fase, prioridad) values (" & el_usuario & ", " & el_cliente & ", " & la_fase & ", " & Rs("prioridad") + 1 & ")"
End If
Rs.Close

Si establecieron un valor de prioridad

intercalar = false
Rs.Source = "select prioridad from tareas where usuario = " & el_usuario & " and cliente = " & el_cliente & " and prioridad = " & la_prioridad
' Si da vacío implica prioridad disponible
If Rs.EOF Then
Conn.Execute "Insert into tareas (usuario, cliente, fase, prioridad) values (" & el_usuario & ", " & el_cliente & ", " & la_fase & ", " & la_prioridad & ")"
' Si obtiene algun valor, deberemos intercalar la prioridad
Else
intercalar = true
End If
Rs.Close
If intercalar Then
Rs.Source = "select prioridad from tareas where usuario = " & el_usuario & " and cliente = " & el_cliente & " and prioridad >= " & la_prioridad & " order by prioridad desc"
Rs.Open
Do While Not Rs.EOF
Conn.Execute "Update tareas set prioridad = " & Rs("prioridad") + 1 & " where usuario = " & el_usuario & " and cliente = " & el_cliente & " and prioridad = " & Rs("prioridad")
Rs.MoveNext
Loop
Rs.Close
' Ya hicimos lugar para la nueva tarea
Conn.Execute "Insert into tareas (usuario, cliente, fase, prioridad) values (" & el_usuario & ", " & el_cliente & ", " & la_fase & ", " & la_prioridad & ")"
End If

Suerte
  #5 (permalink)  
Antiguo 10/01/2003, 08:27
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 2
Gracias DanielRey, dentro de un ratito lo voy a probar, y te comento que tal ha ido la cosa.

Un saludo
  #6 (permalink)  
Antiguo 10/01/2003, 11:04
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 2
Hola de nuevo DanielRey, no he conseguido que me funcione pero creo que es por algo que he puesto mal, tengo que mirar bien tu código.

Por ejemplo cuando pones:

Cita:
si dejaron en blanco prioridad:
aquí debo poner:

if request("PRIORIDAD") = "" then

que me ejecute esa parte de tú código???

y cuando pones:

Cita:
Si establecieron un valor de prioridad
debo poner:

if request("PRIORIDAD") <> "" then

o no hace falta poner esto???


De todas formas gracias por el código, gracias a el ahora estoy más cerca de la respuesta final

Un saludo
  #7 (permalink)  
Antiguo 10/01/2003, 12:10
Avatar de DanielRey
Usuario no validado
 
Fecha de Ingreso: enero-2001
Ubicación: Mendoza
Mensajes: 630
Antigüedad: 23 años, 4 meses
Puntos: 1
Si, haven, tenés que detectar si ha dejado en blanco la prioridad, y de ser así ejecutar el primer código, caso contrario el segundo.

El problema es que (aparentemente) prioridad es del tipo numérico, por lo que puede ser un poquitín más dificil...

Lo que yo haría es en la página que envía los datos establecer "prioridad" a cero por default, si el usuario no establece ningún valor, entonces que se envíe cero y luego en la página que recibe los datos preguntas si prioridad es mayor que cero o no.

¿está claro?
  #8 (permalink)  
Antiguo 12/01/2003, 15:18
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 2
Hola de nuevo DanielRey, he estado analizando el código y escribiendolo, el problema es que yo siempre utilizo este código para abrir la base de datos:

strAccessDB = "Diseño"
cnn = "DRIVER={Microsoft Access Driver (*.mdb)};uid=;pwd=Pepe; DBQ=" & Server.MapPath(strAccessDB)

y no se por que motivo no me funciona con tu código es decir al utilizar:

- Rs.Source = "select ...
- Conn.Execute "Update ...

Así que lo que he tenido que hacer es hacer las selecciones del tipo:

set Rs1 = Server.CreateObject("ADODB.RecordSet")
sql1 = "SELECT * FROM FUNCIONES WHERE USUARIOS LIKE ('%" & request("USUARIOS") & "%') and CLIENTE LIKE ('%" & request("CLIENTE") & "%') and FASE LIKE ('%" & request("FASE") & "%')"

Rs1.Open sql1,cnn,3,3

Solo una preguntilla más con el código que has puesto como se tiene que poner el código para abrir la base de datos, dado que de la forma en que yo lo pongo no funciona.

Muchas gracias y un Saudo
  #9 (permalink)  
Antiguo 13/01/2003, 06:07
Avatar de DanielRey
Usuario no validado
 
Fecha de Ingreso: enero-2001
Ubicación: Mendoza
Mensajes: 630
Antigüedad: 23 años, 4 meses
Puntos: 1
Bueno, son diferentes modos de operar con la conexión.

Yo me acostumbré de una manera, no significa que sea mejor que otras.

Así lo pongo:
Dim Conn
Dim Rs
Dim curDir
curDir = "d:\BasesWeb\GTI\com\Telefonos.mdb"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DBQ="& curDir &";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
Set Rs = Server.CreateObject("ADODB.Recordset")
Set Rs.ActiveConnection = Conn

Suerte
  #10 (permalink)  
Antiguo 13/01/2003, 09:48
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 2
Gracias, quizás con el método que tú utilizas se escriban menos líneas de código, yo la verdad es que necesito, por ahora escribir todo para que me quede más claro, después quien sabe quizás me cambie a otra forma...

Bueno decirte que ya sale casi todo el código, me falta la última parte la del If intercalar Then, espero que al final de la tarde esté resulto, ahora mismo me estoy volviendo loco con las comillas normales y simples en esta línea:

SQL5 = "select PRIORIDAD from FUNCIONES where USUARIOS = '" & request("USUARIOS") & "' and PRIORIDAD = " & request("PRIORIDAD")

rs5.Open SQL5, cnn

Si lo pongo así me dice:

ADODB.Field error '80020009'

El valor de BOF o EOF es True, o el actual registro se eliminó; la operación solicitada requiere un registro actual.

/Partes de Trabajo/anadirhorasfases.asp, line 0

y si lo pongo así:

SQL5 = "select PRIORIDAD from FUNCIONES where USUARIOS = " & request("USUARIOS") & " and PRIORIDAD = " & request("PRIORIDAD")

me pone:

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][Controlador ODBC Microsoft Access] Pocos parámetros. Se esperaba 1.

/Partes de Trabajo/anadirhorasfases.asp, line 144

Esto pasa cuando el valor de prioridad es 1 y no existe en la Base de datos, no sé, sigo probando

Un saludo
  #11 (permalink)  
Antiguo 13/01/2003, 14:20
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 2
Vale, ya he resuelto esta última duda, si es que llevo tanto tiempo con este código que ya ni veo lo que pongo, era un error tal claro que ni lo veía y eso que he hecho este mismo código un millón de veces, si es....

SQL5 = "select PRIORIDAD from FUNCIONES where USUARIOS = '" & usuario & "' and PRIORIDAD = " & prioridad


rs5.Open SQL5, cnn, 3,3

response.write rs5("PRIORIDAD")

Joe, si me está diciendo que no existe esa prioridad, no puedo decirle que me la escrioba, si no existe, si es que llevo un día...

Un saludo
  #12 (permalink)  
Antiguo 13/01/2003, 14:33
Avatar de DanielRey
Usuario no validado
 
Fecha de Ingreso: enero-2001
Ubicación: Mendoza
Mensajes: 630
Antigüedad: 23 años, 4 meses
Puntos: 1
Enhorabuena Haven
  #13 (permalink)  
Antiguo 13/01/2003, 17:04
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 2
Haber una cosita más, que no he terminado todavía, si es que tardaron menos en construir la torre de babel, haber mi duda, tengo este código:

Este código lo que hace, como bien sabes DanielRey, es que si prioridad existe para ese usuario, entonces la que sea igual y las que sean superiores se les sume 1 y a la que acabamos de meter se quede como lo has puesto, el problema es que en teoría el código que he puesto aquí actualiza el que es igual o superior, pero leches, también me guarda el que acabo de poner, no se alguna cosa he puesto mal.

If intercalar Then


SQL6 = "select PRIORIDAD from FUNCIONES where USUARIOS = '" & request("USUARIOS") & "' and PRIORIDAD >= " & request("PRIORIDAD") & " order by PRIORIDAD desc"

rs6.Open SQL6, cnn



Do While Not rs6.EOF

response.write "existe y me mueve los demás"

'Conn.Execute "Update FUNCIONES set PRIORIDAD = " & Rs6("PRIORIDAD") + 1 & " where USUARIOS = " & request("USUARIOS") & " and CLIENTE = " & request("CLIENTE") & " and FASE = " & request("FASE") & " and PRIORIDAD = " & Rs("PRIORIDAD")


rs8.CursorType=1
' Lock=adLockOptimistic
rs8.LockType=2

SQL8="SELECT * FROM FUNCIONES where USUARIOS = '" & request("USUARIOS") & "'"

rs8.Open SQL8, cnn

response.write Rs6("PRIORIDAD") + 1

rs8("PRIORIDAD")= Rs6("PRIORIDAD") + 1
rs8("USUARIOS") = request("USUARIOS")
rs8("CLIENTE") = request("CLIENTE")
rs8("FASE") = request("FASE")
rs8("HORASASIG") = request("HORASASIG")


if request("NOTAS") = "" then
rs8("NOTAS") = "Nada"
else
rs8("NOTAS") = request("NOTAS")
end if

'Guardamos los cambios
rs8.Update

rs8.Close


Rs6.MoveNext

Loop

Un saludo
  #14 (permalink)  
Antiguo 14/01/2003, 03:27
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 2
Ahora sí que ha salido, si es que cuando estás que no te salen las cosas es mejor que cambies y lo dejes para otro día, al final la solución ha sido cambiar los resquest por RS6 y ya está.

Ahora ya lo hace todo perfectamente, muchas gracias DanielRey , por tu inestimable ayuda, jeje lo de inestimable suena un poquito raro, pero lo dicho muchas gracias y hasta otra,

Un saludo
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:54.