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

Indexar una tabla para agilizar una busqueda

Estas en el tema de Indexar una tabla para agilizar una busqueda en el foro de ASP Clásico en Foros del Web. Hola, nunca he indexado una tabla y el poner un campo como indice no es el problema, si no como hago la relación con la ...

  #1 (permalink)  
Antiguo 05/08/2005, 11:28
 
Fecha de Ingreso: julio-2005
Mensajes: 128
Antigüedad: 18 años, 10 meses
Puntos: 0
Indexar una tabla para agilizar una busqueda

Hola, nunca he indexado una tabla y el poner un campo como indice no es el problema, si no como hago la relación con la otra tabla? tengo la tabla1 de la bD 1, con el campo Articulo como PK, este dato lo encuentro en la BD2 Tabla2, como hago esta relación? Ya que en el manage relationships solo aparecen las tablas que tengo en la BD1, esto se puede hacer entre diferentes BD's?

Saludos
  #2 (permalink)  
Antiguo 05/08/2005, 11:35
 
Fecha de Ingreso: junio-2005
Mensajes: 114
Antigüedad: 19 años
Puntos: 0
Creo que no se puede hacer una relacion entre tablas de distinta base de datos (no lo mencionaste, pero estás hablando de Access, no?)
  #3 (permalink)  
Antiguo 05/08/2005, 11:36
 
Fecha de Ingreso: julio-2005
Mensajes: 128
Antigüedad: 18 años, 10 meses
Puntos: 0
no de sql, pero entonces como podría agilizar mi consulta?
  #4 (permalink)  
Antiguo 05/08/2005, 11:48
 
Fecha de Ingreso: junio-2005
Mensajes: 114
Antigüedad: 19 años
Puntos: 0
Para hacer referencia a tablas de otra BD , se usa el siguiente sistema:

nombre_base_datos.nombre_usuario.tabla

por ejemplo, yo me conecto a la bd encuestas, y haciendo esto

select *
from alovmap.dbo.amba_avenidas

accedo a la tabla amba_avenidas de la bd alovmap.
No sé si esto te sirve, porque la verdad que yo no uso los asistentes de SqlServer.
Slds.
  #5 (permalink)  
Antiguo 05/08/2005, 11:57
 
Fecha de Ingreso: julio-2005
Mensajes: 128
Antigüedad: 18 años, 10 meses
Puntos: 0
Gracias ya lo puse comentas, pero no me agiliza la consulta, el primer problema que tenia era que se terminaba el tiempo de espera, ya no me marca ese eror y ya simplifique mi consulta, pero ahora me actualiza la consulta pero se queda pasmado y nunca pasa a la otra parte del proceso.
  #6 (permalink)  
Antiguo 05/08/2005, 12:02
 
Fecha de Ingreso: julio-2005
Mensajes: 128
Antigüedad: 18 años, 10 meses
Puntos: 0
Anexo el codigo:
<% ' Selecciono Articulo que es la clave que el proveedor le pone al articulo
Dim rsFact, sqlFact
Dim rsFact_numRows
Set rsFact = Server.CreateObject("ADODB.Recordset")
rsFact.ActiveConnection = MM_ConFactura_STRING
rsFact.Source = "SELECT Articulo FROM FacturaP WHERE Bandera='" & 0 & "'"
rsFact.CursorType = 0
rsFact.CursorLocation = 2
rsFact.LockType = 1
rsFact.Open()

rsFact_numRows = 0
%>
<%
Dim cmdUpDate, sqlUp
Set cmdUpDate = Server.CreateObject("ADODB.Command")

Dim rsCMKArt
Dim rsCMKArt_numRows

dim vardesc
Set rsCMKArt = Server.CreateObject("ADODB.Recordset")
rsCMKArt.ActiveConnection = MM_ConD84_STRING
rsCMKArt.CursorType = 0
rsCMKArt.CursorLocation = 2
rsCMKArt.LockType = 1

While (NOT rsFact.EOF)

vardesc= rsFact("Articulo")
response.Write(vardesc)
response.Write("<BR>")
'Selecciono de la BD CMKSIO TB ProveedorArticulos la clave que maneja cinemark donde coincida con la clave del articulo proveedor
rsCMKArt.Source = "SELECT Articulo FROM cmksio.dbo.ProveedorArticulos Where IdArtProv = '" & TRIM(rsFact("Articulo")) & "'"
rsCMKArt.Open()

if Not rsCMKArt.EOF then
'Actualizo en FacturaP la clave de cmk
sqlUp = "UPDATE FacturaP Set ClaveArtCMK= ' " & rsCMKArt("Articulo") &" ' Where Articulo='" & TRIM(rsFact("Articulo")) & " ' "
cmdUpDate.ActiveConnection = MM_ConFactura_STRING
cmdUpdate.CommandType = 1
cmdUpDate.CommandText = sqlUp
cmdUpDate.CommandTimeout = 0
cmdUpDate.Execute
end if
rsCMKArt.Close()
rsFact.MoveNext
Wend %>

Alguna sugerencia?!
  #7 (permalink)  
Antiguo 05/08/2005, 12:23
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
y mas o menos cuantas iteraciones hace?
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #8 (permalink)  
Antiguo 05/08/2005, 12:35
 
Fecha de Ingreso: julio-2005
Mensajes: 128
Antigüedad: 18 años, 10 meses
Puntos: 0
unas mil mas o menos, es mucho?
Mira ya reescribi el codigo pero no solucione mucho.
Dim rs, sqlr
Dim rs2,sqlr2
Dim cmdUpDate, sqlUp
Set cmdUpDate = Server.CreateObject("ADODB.Command")
Set rs = Server.CreateObject("ADODB.Recordset")
Set rs2 = Server.CreateObject("ADODB.Recordset")
sqlr= "SELECT Articulo FROM FacturaP WHERE Bandera='" & 0 & "'"
rs.Open sqlr, MM_ConFactura_STRING
While (NOT rs.EOF)
sqlr2= "SELECT Articulo FROM cmksio.dbo.ProveedorArticulos Where IdArtProv = '" & TRIM(rs("Articulo")) & "' And Proveedor='PFSdeMéxico,S.A'"
rs2.Open sqlr2, MM_ConD84_STRING

if Not rs2.EOF then
'Actualizo en FacturaP la clave de cmk
sqlUp = "UPDATE FacturaP Set ClaveArtCMK= ' " & rs2("Articulo") &" ' Where Articulo='" & TRIM(rs("Articulo")) & " ' "
cmdUpDate.ActiveConnection = MM_ConFactura_STRING
cmdUpdate.CommandType = 1
cmdUpDate.CommandText = sqlUp
cmdUpDate.CommandTimeout = 0
cmdUpDate.Execute

end if
rs2.close()
rs.movenext()
Wend
  #9 (permalink)  
Antiguo 05/08/2005, 12:40
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Y como cuantas tendria que iterar?
Veo que no utilizaste vectores como te lo propuse, mediante el metodo getRows, con eso liberas memoria de inmediato, ya que destruyes el rs y trabajas con datos desconectados, pero si es mucho mas lo que deberia de iterar, pasale tus consultas a un stored procedure, con eso tiene que funcionar si o si
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #10 (permalink)  
Antiguo 05/08/2005, 13:03
 
Fecha de Ingreso: julio-2005
Mensajes: 128
Antigüedad: 18 años, 10 meses
Puntos: 0
Ok, estoy probando el codigo solo haciendo una consulta, no estoy poniendo aun el update a la tabla FacturaP, y sigo en el infinito, podrias hecharle un vistaso a mi codigo haber si hay algo mal?
sqlr= "SELECT Articulo FROM FacturaP WHERE Bandera='" & 0 & "'"
rs.Open sqlr, MM_ConFactura_STRING
dim miTabla
miTabla = rs.GetRows
rs.Close
set rs = nothing
MM_ConFactura_STRING.Close
set MM_ConFactura_STRING = nothing

for I = 0 to UBound(miTabla,2)
for J = 0 to Ubound(miTabla, 1)
'Imprimo una celda para cada campo
Response.Write("<TD>" & miTabla(J, I) & "</TD>")
next
Response.Write("</TR>")
next
  #11 (permalink)  
Antiguo 05/08/2005, 13:05
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Ya sabes que solo trae un campo no?

Código:
for I = 0 to UBound(miTabla,2) 
  response.write("<td>"&mitabla(0,j)&"</td>")
next
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #12 (permalink)  
Antiguo 05/08/2005, 13:14
 
Fecha de Ingreso: julio-2005
Mensajes: 128
Antigüedad: 18 años, 10 meses
Puntos: 0
?? por lo que entiendo el getrow, me pone los datos en un arreglo bidimensional, bueno un vector, y tengo dos formas de accesarlo, segun yo con este codigo me deberia imprimir los campos articulo, no?

Sorry, estoy leyedno acerca de vectores pero no los habia utilizado de esta forma?!
  #13 (permalink)  
Antiguo 05/08/2005, 13:21
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Perdon, sustituye la j por la I dentro del ciclo
Si, es asi como tu dices, pero si sabes cuantos campos tienes no necesitas el for interno, basta con que mandes llamar al indice de dicho array con el numero del campo, recuerda que comienza siempre en 0, es por eso:

Código:
for I = 0 to UBound(miTabla,2) 
  response.write("<td>"&mitabla(0,I)&"</td>")
next
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #14 (permalink)  
Antiguo 05/08/2005, 13:45
 
Fecha de Ingreso: julio-2005
Mensajes: 128
Antigüedad: 18 años, 10 meses
Puntos: 0
Gracias , ya hice el cambio, pero seguimos igual, y no termina esta comparacion,
  #15 (permalink)  
Antiguo 05/08/2005, 13:49
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
O sea, los resultados si los imprime, el problema es con el update?
Se un poco mas explicita porque asi nada mas es dificil adivinar.
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #16 (permalink)  
Antiguo 05/08/2005, 14:26
 
Fecha de Ingreso: julio-2005
Mensajes: 128
Antigüedad: 18 años, 10 meses
Puntos: 0
no los imprime, por el momento tengo comentado el update
Esto es lo unico que esta haciendo y desde aqui se queda en el limbo

sqlr= "SELECT Articulo FROM FacturaP WHERE Bandera='" & 0 & "'"
rs.Open sqlr, MM_ConFactura_STRING
dim miTabla
miTabla = rs.GetRows
rs.Close
set rs = nothing
MM_ConFactura_STRING.Close
set MM_ConFactura_STRING = nothing

for I = 0 to UBound(miTabla,2)
response.write(mitabla(0,I)&"<br>")
next'While (NOT rs.EOF)
  #17 (permalink)  
Antiguo 05/08/2005, 14:28
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
ok, haz esto y veamos cuantos registros tiene:

Código:
if isarray(mitabla) then
  response.write(uBound(mitabla,2))
end if
response.end
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #18 (permalink)  
Antiguo 05/08/2005, 14:34
 
Fecha de Ingreso: julio-2005
Mensajes: 128
Antigüedad: 18 años, 10 meses
Puntos: 0
se queda igual... pasmado!
  #19 (permalink)  
Antiguo 05/08/2005, 14:38
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
imposible..!

Pon todo el codigo de este ASP, debe haber un error, o ni siquiera se termina de llenar el rs

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #20 (permalink)  
Antiguo 05/08/2005, 14:40
 
Fecha de Ingreso: julio-2005
Mensajes: 128
Antigüedad: 18 años, 10 meses
Puntos: 0
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="../Connections/ConFactura.asp" -->
<!--#include file="../Connections/ConD84.asp" -->
<%
'selecciono el rs que va a recorrer la tabla de facturas
Dim rs, sqlr
Dim rs2,sqlr2
Dim cmdUpDate, sqlUp
Set cmdUpDate = Server.CreateObject("ADODB.Command")
Set rs = Server.CreateObject("ADODB.Recordset")
Set rs2 = Server.CreateObject("ADODB.Recordset")
sqlr= "SELECT Articulo FROM FacturaP WHERE Bandera='" & 0 & "'"
rs.Open sqlr, MM_ConFactura_STRING
dim miTabla
miTabla = rs.GetRows
rs.Close
set rs = nothing
MM_ConFactura_STRING.Close
set MM_ConFactura_STRING = nothing

if isarray(mitabla) then
response.write(uBound(mitabla,2))
end if
response.end
%>
  #21 (permalink)  
Antiguo 05/08/2005, 14:45
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Código:
sqlr= "SELECT Articulo FROM FacturaP WHERE Bandera='" & 0 & "'"
Que tipo de dato es el campo Bandera?

Si no es string sacale las comillas simples, no lo concatenes puedes pasarlo directo:

Código:
sqlr= "SELECT Articulo FROM FacturaP WHERE Bandera='0'"
sqlr= "SELECT Articulo FROM FacturaP WHERE Bandera=0"
fijate si pasa de la consulta, para mi el problema es que ni siquiera esta ejecutando este query
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #22 (permalink)  
Antiguo 05/08/2005, 14:45
 
Fecha de Ingreso: julio-2005
Mensajes: 128
Antigüedad: 18 años, 10 meses
Puntos: 0
reinicie mi maquina y volvi a correr el codigo y ahora me sale
Microsoft OLE DB Provider for ODBC Drivers (0x80040E31)
[Microsoft][ODBC SQL Server Driver]Terminó el tiempo de espera
En la linea 13
  #23 (permalink)  
Antiguo 05/08/2005, 14:52
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
MOdificaste la sentencia SQL?

A ver, ve al analizador de consultas y pega esa consulta, ejecutala y veamos si te devuelve registros.
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #24 (permalink)  
Antiguo 05/08/2005, 14:52
 
Fecha de Ingreso: julio-2005
Mensajes: 128
Antigüedad: 18 años, 10 meses
Puntos: 0
ok, ya lo hice y me marca error de tiempo de espera

Bandera es un campo que utilizo para que solo eliga los campos que acabo de subir y no agarre los anteriores, pero cuando hago una consulta en el sql analyzer, Select Articulo From FacturaP, esto me despliega 1300 registros, y si le pongo Select Articulo From FacturaP Where Bandera = 0, se dilata y no despliega nada, por el momento en esta tabla solo tengo los campos del proceso actual. Que es lo que sucede?
  #25 (permalink)  
Antiguo 05/08/2005, 14:53
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
OK, entonces tenemos que hacer un stored procedure.
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #26 (permalink)  
Antiguo 05/08/2005, 14:54
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Perdon por el post tan rapido, dices que si haces tu consulta desde el analyzer y le pones la condicion WHERE bandera = 0 se queda pegado aun en el analyzer??
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #27 (permalink)  
Antiguo 05/08/2005, 14:59
 
Fecha de Ingreso: julio-2005
Mensajes: 128
Antigüedad: 18 años, 10 meses
Puntos: 0
Asi es y no me espantes con el store procedure, por que no lo sabria hacer!
  #28 (permalink)  
Antiguo 05/08/2005, 15:01
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Que tipo de dato tiene Bandera?
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #29 (permalink)  
Antiguo 05/08/2005, 15:02
 
Fecha de Ingreso: julio-2005
Mensajes: 128
Antigüedad: 18 años, 10 meses
Puntos: 0
Int
y desde que comienzo el proceso le pongo 0
  #30 (permalink)  
Antiguo 05/08/2005, 15:09
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
cambialo a bit, default (0), obviamente no acepta nulos, cambia tu sentencia por

SET NOCOUNT ON;SELECT campo FROM tabla WHERE bandera = 0

Correlo desde el analyzer y veamos si asi si te arroja resultados.
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
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 20:58.