Ver Mensaje Individual
  #5 (permalink)  
Antiguo 28/05/2003, 10:01
Avatar de angel_dope
angel_dope
 
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 22 años, 5 meses
Puntos: 8
A ver, te explico lo que necesito y te pongo el código más ampliado, por cierto, la base es access, por lo que dices que en algunas bases no se puede hacer lo de mover en ambos sentidos, nunca me ha dado ningun problema, y creo q el movefirst tampoco:

en el apartado OLA1 hago una búsqueda y meto todos los resultado en una tabla temporal. Después, en las 5 siguientes (solo he puesto una, por que es todo el rato lo mismo) compruebo si el campo TMPNPANELISTA de la búsqueda está en blanco (If isnull(ola5.fields("tmpnpanelista")) then) Si está en blanco, es por que en OLA1 no se encontró ningún registro con ese identificador, asi que añado un registro nuevo a la tabla. Pero si ese campo no está en blanco, tengo que editar el registro y añadirle más valores. El problema está en llegar de forma rápida a ese registro dentro de la tabla temporal. He marcado donde tengo exactamente el problema, a ver si tu alguna vez has utilizado el método que quería utilizar ahi, por que a mi me da problemas.


Const adOpenKeyset = 1
Const adLockOptimistic = 3

'Creo la conexión con la base de datos
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\..\basesdatos\EncuestasObservator ioDATOS.mdb"))

set borrado=createobject("ADODB.Recordset")
borrado.CursorType = adOpenKeyset
borrado.LockType = adLockOptimistic
'Limpiamos la Tabla tmpEmpRecibidasEvolucion
sql_borrado="delete * from tmpEmpRecibidasEvolucion"
borrado.Open sql_borrado, conn

set temporal=createobject("ADODB.Recordset")
temporal.CursorType = adOpenKeyset
temporal.LockType = adLockOptimistic
sql_temporal="select * from tmpEmprecibidasEvolucion"
temporal.open sql_temporal, conn


'Ola 1
anyo1=request.Querystring("anyo1")
nola1=request.Querystring("nola1")
set ola1=createobject("ADODB.Recordset")
ola1.CursorType = adOpenKeyset
ola1.LockType = adLockOptimistic

sql_ola1="SELECT * from consEmpRecibidasEvolucion1 where año=" & anyo1 & " AND Nola='" & nola1 &"'"
ola1.Open sql_ola1, conn
i=1
Response.Write("<table width='95%' border='1'><tr><td valign='top'>")
Response.Write("Ola1<br>")
While Not ola1.eof

Response.Write (i & ". " & ola1("npanelista")&"<br>")
temporal.addnew
temporal.fields("npanelista") = ola1("npanelista")
temporal.fields("FaxConllamadas1") = ola1("FaxConLlamadas")
temporal.fields("FaxEspontaneo1") = ola1("FaxEspontaneo")
temporal.fields("Telefono1") = ola1("Telefono")
temporal.update
ola1.movenext
i = i + 1
wend
Response.Write("</td>")

'Ola 5
anyo5=request.querystring("anyo5")
nola5=request.querystring("nola5")
set ola5=createobject("ADODB.Recordset")
ola5.CursorType = adOpenKeyset
ola5.LockType = adLockOptimistic
sql_ola5="SELECT * from consEmpRecibidasEvolucion1 where año=" & anyo5 & " AND Nola='" & nola5 &"'"
ola5.Open sql_ola5, conn
i=1
Response.Write("<td valign='top'>Ola5<br>")
If not temporal.eof then temporal.movefirst
While Not ola5.eof
If isnull(ola5.fields("tmpnpanelista")) then
temporal.addnew
temporal.fields("npanelista") = ola5("npanelista")
temporal.fields("FaxConllamadas5") = ola5("FaxConLlamadas")
temporal.fields("FaxEspontaneo5") = ola5("FaxEspontaneo")
temporal.fields("Telefono5") = ola5("Telefono")
temporal.update
else

------------------------------------------------------------------------------------------------------------------------------------------------------
Aqui tengo ahora el problema
He visto en algun sitio que se puede utilizar el FindFirst, pero me da un error diciendo que no se acepta ese metodo o propiedad. Otra manera sería anidando el bucle (Que son las lineas que he comentado, asi ves las dos cosas que he intentado hacer ) pero no resulta eficiente por que la tabla tiene más de 8000 registros y al anidar el bucle imagina el tiempo que se tira procesando. Alguna vez has utilizado el Findfirst?? O sabes alguna manera de llegar a ese registro que no sea anidando el bucle??

temporal.Findfirst "npanelista = '" & ola5.fields("npanelista") & "'"
'While not temporal.eof
' if temporal.fields("npanelista") <> ola5.fields("npanelista") then
' temporal.movenext
' else

temporal.fields("npanelista") = ola5("npanelista")
temporal.fields("FaxConllamadas5") = ola5("FaxConLlamadas")
temporal.fields("FaxEspontaneo5") = ola5("FaxEspontaneo")
temporal.fields("Telefono5") = ola5("Telefono")
temporal.update
' end if
'wend

------------------------------------------------------------------------------------------------------------------------------------------------------
end if
Response.Write (i & ". " & ola5("npanelista")&"<br>")
ola5.movenext
i = i + 1
wend
Response.Write("</td>")


Por favor, es urgente, seguro q no hay ninguna otra manera que no sea anidando los bucles? Si es q no, q me lo diga alguien, asi ya puedo ir pegandome un tiro, xq el resto de la aplicación no valdrá gran cosa si no consigo sacar este informe de los @#~~{}]@|[]@!!!!!
__________________
Vayamos por Partes :: Jack el Destripador

Última edición por angel_dope; 28/05/2003 a las 10:00