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

comparar tablas y update

Estas en el tema de comparar tablas y update en el foro de ASP Clásico en Foros del Web. Hola que tal, a ver si me pueden ayudar en este problemita. Lo que pasa es que tengo 2 tablas. Una llamada exi1 y otra ...
  #1 (permalink)  
Antiguo 28/10/2003, 18:28
Avatar de jorel  
Fecha de Ingreso: abril-2003
Ubicación: Monterrey, N.L.
Mensajes: 253
Antigüedad: 21 años, 2 meses
Puntos: 0
Exclamación comparar tablas y update

Hola que tal, a ver si me pueden ayudar en este problemita.

Lo que pasa es que tengo 2 tablas.

Una llamada exi1 y otra exi2

contiene campos:
codigo
nombre
precio
etc.

la tabla exi1 contiene valores que quiero acutalizar en la tabla exi2 en especial el precio. Las 2 tablas contiene los mismos campos son de igual nombre.

Si un precio cambio en la tabla exi1 quiero que este me lo actualize en la tabla exi2 si no pues que lo deje igual.

Estaba haciendo un codigo asi pero me da error, a ver si me pueden ayudar con este codigo o dar una idea por favor.


<%
Set oConn = Server.CreateObject ("ADODB.Connection")
Set RS = Server.CreateObject ("ADODB.RecordSet")
oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="&Server.MapPath("bd.mdb")

sql = "SELECT * FROM exi1"
Rs.Open sql, oConn, 3, 1

Set RS2 = Server.CreateObject ("ADODB.RecordSet")
sql2 = "SELECT * FROM exi2"
RS2.Open sql2, oConn, 3, 1

Do While not RS.EOF
Do While not RS2.EOF
if (RS("codigo")) = (RS2("codigo")) Then
' dale un update al precio (el precio de la tabla 1 ponlo en la tabla 2)
precio = RS("precio")
sql2 = "UPDATE exi2 SET precio="&precio&" "
Set RS2=oConn.Execute(sql2)
else
RS2.MoveNext
end if
Loop
RS.MoveNext
Loop


RS2.Close
Set RS2 = nothing
RS.Close
oConn.Close
Set RS = nothing
Set oConn = nothing

Response.Write "cambios realizados"

%>


Y me da el siguiente error

Operation is not allowed when the object is closed.
/gamamusic/proyectos/compara/Default.asp, line 23


donde la linea 23 es:
Do While not RS2.EOF


Como ven alguna sugerencia donde estar el error ¡¡¡
__________________

:adios:

Jorge Santana
  #2 (permalink)  
Antiguo 29/10/2003, 09:37
Avatar de txarly  
Fecha de Ingreso: marzo-2003
Ubicación: Eibar (Gipuzkoa)
Mensajes: 455
Antigüedad: 21 años, 3 meses
Puntos: 2
Echando un primer vistazo a tu código el primer error que veo es que cuando haces un update estás intentando almacenar "algo" en un recordset.
Debes saber que eso solo es posible en las consultas de tipo SELECT. En las consultas en las que haces cambios en la base de datos del tipo DELETE, UPDATE, INSERT debes utilizar simplemente oConn.Execute(sql2)

Espero que este concepto básico te ayude a depurar un poco más ese código.

Un saludo
Txarly
__________________
¿Por qué Uri Geller doblaba cucharas?
  #3 (permalink)  
Antiguo 29/10/2003, 13:03
Avatar de jorel  
Fecha de Ingreso: abril-2003
Ubicación: Monterrey, N.L.
Mensajes: 253
Antigüedad: 21 años, 2 meses
Puntos: 0
Sigo con problemas con este codigo, ya me ejecuta un cambio de la tabla 1 a la tabla2 pero el problema que solo me acutaliza un valor y en la tabla 2 me pone el mismo valor.

<%
Set oConn = Server.CreateObject ("ADODB.Connection")

Set RS = Server.CreateObject ("ADODB.RecordSet")
oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="&Server.MapPath("mitabla.mdb")

sql = "SELECT * FROM exi1"
Rs.Open sql, oConn, 3, 1

Set RS2 = Server.CreateObject ("ADODB.RecordSet")
sql2 = "SELECT * FROM exi2"
RS2.Open sql2, oConn, 3, 1

Do While not RS.EOF
codigo1 = RS("codigo")
precio1 = RS("precio1")
Do While not RS2.EOF
codigo2 = RS2("codigo")
if codigo1 = codigo2 Then
' dale un update al precio2 (el precio de la tabla 1 ponlo en la tabla 2)
sql2 = "UPDATE exi2 SET precio1="&precio1&" "
oConn.Execute(sql2)
end if
RS2.MoveNext
Loop
RS.MoveNext
Loop

RS2.Close
Set RS2 = nothing
RS.Close
oConn.Close
Set RS = nothing
Set oConn = nothing

Response.Write "cambios realizados"


%>

Espero se de a entender lo que quiero hacer ... las dos tablas tiene los campos iguales con los mismos valor, pero en la tabla 1 a veces cambia un valor del campo precio1 y ese que cambio quiero que me lo actualize en la tabla2.

Esto lo quiero hacer por que tengo una lista en txt que paso a acces (tabla1) y en la tabla2 es la de mi web en donde si cambio un valor le precio1 de la tabla1 quiero que me lo acutalize en la tabla2

Alguien ayudeme por favor ¡¡¡¡¡¡¡¡¡¡¡¡

Help, Help, un tip por favor
__________________

:adios:

Jorge Santana

Última edición por jorel; 29/10/2003 a las 15:57
  #4 (permalink)  
Antiguo 30/10/2003, 12:58
Avatar de jorel  
Fecha de Ingreso: abril-2003
Ubicación: Monterrey, N.L.
Mensajes: 253
Antigüedad: 21 años, 2 meses
Puntos: 0
ya pude comparar y actualizar

Bueno despues de varios intentos ya pude realizar lo que queria, me faltan agregar unas cosas, pero ya logre entender lo que me estaba haciendo, bueno no soy experto pero el codigo ya me hace lo que quiero a la perfección

Así quedo lo comparto por si a alguien le sirve


<%
Set oConn = Server.CreateObject ("ADODB.Connection")
Set RS = Server.CreateObject ("ADODB.RecordSet")
oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="&Server.MapPath("mibd.mdb")
sql = "SELECT * FROM exi1"
Rs.Open sql, oConn, 3, 1

Do While not RS.EOF
codigo1 = RS("codigo")
precio1 = RS("precio1")
Set RS2 = Server.CreateObject ("ADODB.RecordSet")
sql2 = "SELECT * FROM exi2"
RS2.Open sql2, oConn, 3, 1

Do While not RS2.EOF
codigo2 = RS2("codigo")
precio2 = RS2("precio2")
'dale un update al precio2 (el precio de la tabla 1 ponlo en la tabla 2)
sql2 = "UPDATE exi2 SET precio2="&precio1&" where codigo="&codigo1&" "
oConn.Execute sql2
RS2.MoveNext
Loop
RS.MoveNext
Loop
RS2.Close
Set RS2 = nothing
RS.Close
oConn.Close
Set RS = nothing
Set oConn = nothing

Response.Write "cambios realizados"
%>
__________________

:adios:

Jorge Santana
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 00:46.