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

ayuda con vectores¡

Estas en el tema de ayuda con vectores¡ en el foro de ASP Clásico en Foros del Web. Alguien podria orientarme de como cambiar este codigo que hice , pero utilizando vectores ¡¡¡ por favor necesito que me ayude alguein con esto, pasar ...
  #1 (permalink)  
Antiguo 26/03/2004, 12:44
Avatar de jorel  
Fecha de Ingreso: abril-2003
Ubicación: Monterrey, N.L.
Mensajes: 253
Antigüedad: 22 años, 1 mes
Puntos: 0
ayuda con vectores¡

Alguien podria orientarme de como cambiar este codigo que hice , pero utilizando vectores ¡¡¡ por favor necesito que me ayude alguein con esto, pasar este codigo utilizando vectores, ya que me quedan dudas con el uso de vectores ¡

Código PHP:
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 prod1"
Rs.Open sqloConn31

Do While not RS.EOF 
    codigo 
RS("codigo")
    
precio RS("precio")
    
Set RS2 Server.CreateObject ("ADODB.RecordSet")
    
sql2 "SELECT * FROM prod2"
    
RS2.Open sql2oConn31
    
Do While not RS2.EOF 
        sql2 
"UPDATE prod2 SET precio="&precio&" where codigo="&codigo&" "
        
oConn.Execute sql2
        RS2
.MoveNext
        Loop 
RS
.MoveNext
Loop

RS2
.Close
Set RS2 
nothing
RS
.Close
oConn
.Close
Set RS 
nothing
Set oConn 
nothing 
__________________

:adios:

Jorge Santana
  #2 (permalink)  
Antiguo 26/03/2004, 13:11
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 23 años, 5 meses
Puntos: 0
te sirve con Split????

Código PHP:
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 prod1"
Rs.Open sqloConn31

codigo
="";
precio="";

Do While 
not RS.EOF 
    codigo 
codigo "-" RS("codigo")
    
precio precio "-" RS("precio")
    
RS.MoveNext
Loop

ArrCodigo
=Split(codigo,"-")
ArrPrecio=Split(precio,"-")


For 
i=Lbound(ArrCodigoto Ubound(ArrCodigo)
    
sql2 "UPDATE prod2 SET precio="&ArrPrecio(i)&" where codigo="&ArrCodigo(i)&" "
    
oConn.Execute sql2

Next


....
.... 
  #3 (permalink)  
Antiguo 26/03/2004, 13:57
 
Fecha de Ingreso: enero-2004
Mensajes: 154
Antigüedad: 21 años, 3 meses
Puntos: 0
Si lo único que quieres hacer es guardar los datos de la primera tabla en la segunda es mucho más facil que eso. Solo tienes que ejecutar una sentencia sql tal como esta:

update prod2 set precio=p1.precio from prod2 p2,prod1 p1 where p2.codigo=p1.codigo

Si además quieres hacer mas cosas pues ya se vería, pero esta es la solución más rápida para hacer lo que estabas haciendo con el código ASP que has puesto.

Saludos!!!!
  #4 (permalink)  
Antiguo 26/03/2004, 13:58
 
Fecha de Ingreso: enero-2004
Mensajes: 154
Antigüedad: 21 años, 3 meses
Puntos: 0
Te quedaría así, por si no lo ves claro:
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 = "update prod2 set precio=p1.precio from prod2 p2,prod1 p1 where p2.codigo=p1.codigo
"
Rs.Open sql, oConn, 3, 1
RS.Close
oConn.Close
Set RS = nothing
Set oConn = nothing

Saludos!!!!
  #5 (permalink)  
Antiguo 26/03/2004, 15:17
Avatar de jorel  
Fecha de Ingreso: abril-2003
Ubicación: Monterrey, N.L.
Mensajes: 253
Antigüedad: 22 años, 1 mes
Puntos: 0
Muchas gracias, bankzzip tu solucione me funciono a la perfeccion, lo de usar un arreglo lo queria hacer por que es mas rapido que como lo estaba haciendo, ya que si mi bd era muy grande el explorer se quedaba pensado y con el arreglo ya funciono bien...

Ivan tambien gracias por tu ayuda, tambien estuve checnado si lo pudiera hacer con una sentencia sql seria genial, y si quiero hacer lo que tu dice,, tengo 2 tablas y quiero hacerle un update a los registros de la tabla 2 (prod2), es decir si hay un cambio en el campo precio de la tabla 1, quiero que en la tabla 2 tambien lo haga... , el programita que hice hace un recorrido de esto y busca los codigos iguales y hace un update... de la manera que lo tenia, se quedaba esperando mucho el explorer en ejecutar el codigo... esto cuando la tabla tenia muchos registros,,, y con arreglo ya funciona bien... pero si se puede con una sentencia sql nada mas,,, seria mejor...


Hice esto y me marca el error:


Código PHP:
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 "update prod2 set prod1.precio = prod2.precio from prod1,prod2 where prod2.codigo = prod1.codigo"

oConn.Execute sql

RS
.Close
oConn
.Close
Set RS 
nothing
Set oConn 
nothing 
Error:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'prod2.precio from prod1'.

me pone error en el query...no me queda claro como solo con la sentecia sql,,, puede recorrerme y compararme los registros que quiero hacerle el update ¡¡¡
__________________

:adios:

Jorge Santana
  #6 (permalink)  
Antiguo 26/03/2004, 15:38
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 23 años, 5 meses
Puntos: 0
he visto que se puede hacer un insert junto con un select...pero un update con un select no lo habia visto antes...

estan seguro que esta expresion es valida?, un from dentro de un update?


update prod2 set prod1.precio = prod2.precio from prod1,prod2 where prod2.codigo = prod1.codigo"
  #7 (permalink)  
Antiguo 26/03/2004, 16:05
Avatar de jorel  
Fecha de Ingreso: abril-2003
Ubicación: Monterrey, N.L.
Mensajes: 253
Antigüedad: 22 años, 1 mes
Puntos: 0
la verdad no se,,, por eso pense hacerlo de la forma en que lo tenia, y con el arreglo que me ayudo bakanzipp funciono,,, pero si hubiera una forma de hacerlo mas directo seria ideal...

Muchas gracias
__________________

:adios:

Jorge Santana
  #8 (permalink)  
Antiguo 26/03/2004, 16:07
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 23 años, 5 meses
Puntos: 0
estuve buscando y si existe esa clausula al parecer

update <class_name> set <attr1>=<expr1>,...<attrN>=<exprN> [from <from_clause>]
[where <qual>];

al parecer jorel hiciste mal una referencia

update prod2 set prod2.precio = prod1.precio from prod1,prod2 where prod2.codigo = prod1.codigo

ve como anda con esto...
  #9 (permalink)  
Antiguo 26/03/2004, 16:22
Avatar de jorel  
Fecha de Ingreso: abril-2003
Ubicación: Monterrey, N.L.
Mensajes: 253
Antigüedad: 22 años, 1 mes
Puntos: 0
no anda... marca un error similar.

sql = "update prod2 set prod2.precio = prod1.precio from prod1,prod2 where prod2.codigo = prod1.codigo"

oConn.Execute sql


Syntax error (missing operator) in query expression 'prod1.precio from prod1'.
__________________

:adios:

Jorge Santana
  #10 (permalink)  
Antiguo 26/03/2004, 16:32
Avatar de jorel  
Fecha de Ingreso: abril-2003
Ubicación: Monterrey, N.L.
Mensajes: 253
Antigüedad: 22 años, 1 mes
Puntos: 0
oye Bakanzipp ya que estamos en esto y abusando de tu confianza... como podria hacerle si ademas del codigo que me pasaste... quiero agregar registros nuevos que no se encuentre en la tabla2 ...


es decir lo que hago es acutalizar de la tabla1 el campo precio en la tabla2... pero si en la tabla1 agrego nuevos registros,, como podira hacerl para que estos tambien se agregaran en la tabla 2?¿

Muchas gracias por tu ayuda
__________________

:adios:

Jorge Santana

Última edición por jorel; 26/03/2004 a las 16:35
  #11 (permalink)  
Antiguo 26/03/2004, 17:03
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 23 años, 5 meses
Puntos: 0
buuu...que mala que no funcione

y asi?

sql = "update prod2 set prod2.precio = prod1.precio from prod1 where prod2.codigo = prod1.codigo"

con respecto a tu pregunta tendrias que hacer un select contra las dos tablas para saber los registro que falta...una vez con esos datos ya tendrias para hacer los insert...

select * from tabla1 where campo1 in not (Select campo1 from tabla2)

recorrer en recordset, guardar en un arreglo split y despues insert por elemento del arreglo
  #12 (permalink)  
Antiguo 26/03/2004, 18:17
Avatar de jorel  
Fecha de Ingreso: abril-2003
Ubicación: Monterrey, N.L.
Mensajes: 253
Antigüedad: 22 años, 1 mes
Puntos: 0
Vaya caso, parece que funciono a la perfeccion, no lo he visto a fondo, pero ya hice unas cuantas pruebas y al parecer todo marcha bien... solo que, me pusiste in not, lo correcto es not in ?¿?¿???

select * from tabla1 where campo1 in not (Select campo1 from tabla2)

Asi quedo el codigo, como vez esta bien vda?

Código PHP:
sql "SELECT * FROM prod1 where codigo not in(select codigo from prod2)"

Rs.Open sqloConn31

Do While not RS.EOF 
    codigo 
codigo "-" RS("codigo")
    
precio precio "-" RS("precio")
    
RS.MoveNext
Loop

ArrCodigo
=Split(codigo,"-")
ArrPrecio=Split(precio,"-")

For 
i=1 to UBound(ArrCodigo)
    
sql2 "INSERT into prod2 (codigo, precio) VALUES ('"&ArrCodigo(i)&"', '"&ArrPrecio(i)&"') "
    
oConn.Execute sql2
Next 

Me inserta todo bien, los registros que no existen en prod2 los agrega ....solo que si ves algo raro mencionamelo, es que quiero que quede lo mas depurado posible sin errores,....

Muchas gracias por tu grande ayuda

y la otra opcion, utilizando solo el query no funciona
marca el mismo error....


__________________

:adios:

Jorge Santana

Última edición por jorel; 26/03/2004 a las 18:22
  #13 (permalink)  
Antiguo 26/03/2004, 18:33
 
Fecha de Ingreso: enero-2004
Mensajes: 154
Antigüedad: 21 años, 3 meses
Puntos: 0
Vamos por partes colegas: yo puse esto
update prod2 set precio=p1.precio from prod2 p2,prod1 p1 where p2.codigo=p1.codigo

entonces por que poneis esto??:
update prod2 set prod1.precio = prod2.precio from prod1,prod2 where prod2.codigo = prod1.codigo

No veis las diferencias??

Para que entendais el funcionamiento os lo voy a explicar:
Estamos haciendo un update de un campo de una tabla que indicamos así:
update prod2 set precio=
hasta aqui bien,no?
pos ahora tenemos que sacar el valor que queremos asignar y como este valor debe tener una relacion con la tabla que vamos a updatear pues la usamos:
from prod1,prod2 where prod1.codigo=prod2.codigo

Ahora, y creo que es el detalle por el que os perdeis un poco, debemos tener en cuenta que la sentencia update relaciona la tabla a updatear con la tabla que ponemos tras el from con mismo nombre (la tabla prod2 que sale tras el update es la misma que la que sale detras del from) pero el campo que vamos a updatear no puede llevar prefijo, porque a la tabla que ponemos tras el update no podemos asignarle alias, los campos tras el set van sin alias y se refieren a la trabla que se indica delante.
A que ahora ya tiene sentido??
Por eso la sentencia es
update prod2 set precio=prod1.precio from prod1,prod2 where prod1.codigo=prod2.codigo

Si ademas quieres añadir registro nuevos puedes ejecutar la siguiente sentencia
insert into prod2 select * from prod1 where prod1.codigo not in (select codigo from prod2)
(Esto ya lo ha mencionado bakanzipp)
De esta forma con dos sentencias sql te ahoras bucles y historias en asp.

Saludos!!!

-------------------------------------------------------------
SQL Power!!!!!!!!
  #14 (permalink)  
Antiguo 27/03/2004, 11:58
Avatar de jorel  
Fecha de Ingreso: abril-2003
Ubicación: Monterrey, N.L.
Mensajes: 253
Antigüedad: 22 años, 1 mes
Puntos: 0
ok Ivan_noe gracias por tu ayuda ...

es clara tu explicación, en lo que veo problema es que falte algo,.... lo que veo con el ejemplo de bakanzipp, es que guarda en un arreglo los datos para despues realizar el update de los cambios...en toda la lista.

pero utilizando solo la sentencia sql no veo donde haga ese movimiento de datos.. es decir que haga el update a toda la lista de registros de mi bd, es por eso que al poner solo esto:

Código PHP:
Set oConn Server.CreateObject ("ADODB.Connection")
Set RS Server.CreateObject ("ADODB.RecordSet")
oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="&Server.MapPath("db1.mdb")

sql "update prod2 set precio=prod1.precio from prod1,prod2 where prod1.codigo=prod2.codigo"

oConn.Execute sql

RS
.Close
oConn
.Close
Set RS 
nothing
Set oConn 
nothing 

Marca lo siguiente
Syntax error (missing operator) in query expression 'prod1.precio from prod1'.

A lo mejor entendi mal , o falta algo , ...

Gracias por tu ayuda...
__________________

:adios:

Jorge Santana
  #15 (permalink)  
Antiguo 29/03/2004, 01:31
 
Fecha de Ingreso: enero-2004
Mensajes: 154
Antigüedad: 21 años, 3 meses
Puntos: 0
No entiendo lo que quieres decir , pero por otro lado si no entiendes mucho la sentencia SQL no intentes ver que es lo que hace, porque en la sentencia no vas a ver el proceso, es solo una declaracíón para que el gestor de B.D. haga el proceso. Simplemente con las lineas mencionadas realiza el proceso de updatear los registros que existen e insertar los nuevos

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

sql = "update prod2 set precio=prod1.precio from prod1,prod2 where prod1.codigo=prod2.codigo"
oConn.Execute sql
sql="insert into prod2 select * from prod1 where prod1.codigo not in (select codigo from prod2)"
oConn.Execute sql
RS.Close
oConn.Close
Set RS = nothing
Set oConn = nothing


Saludos!!!
  #16 (permalink)  
Antiguo 29/03/2004, 01:33
 
Fecha de Ingreso: enero-2004
Mensajes: 154
Antigüedad: 21 años, 3 meses
Puntos: 0
Si te da errores pueba ejecutar simplemente una select con la condición del update
"select * from from prod1,prod2 where prod1.codigo=prod2.codigo"

porque puede ser que no tengas definidas las tablas o las columnas no sean correctas o cualquier otra cosa, pero el planteamiento que te expongo es el correcto.
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:42.