Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

optimizar consultas sql

Estas en el tema de optimizar consultas sql en el foro de Visual Basic clásico en Foros del Web. buenas.....con este codigo que desarrolle logro obtener el resultado deseado pero con el unico detalle que tarda una eternidad a la hora de cargar.....aqui les ...
  #1 (permalink)  
Antiguo 14/07/2011, 10:11
Avatar de ARGFA  
Fecha de Ingreso: noviembre-2009
Ubicación: Ciudad Guayana, Venezuela
Mensajes: 55
Antigüedad: 14 años, 5 meses
Puntos: 0
optimizar consultas sql

buenas.....con este codigo que desarrolle logro obtener el resultado deseado pero con el unico detalle que tarda una eternidad a la hora de cargar.....aqui les anexo el codigo....., lo que intento es cargar un listbox con ciertos numeros de pagos que tienen que cumplir varias condiciones....

Código vb:
Ver original
  1. 'lleno la lista con todos los pagos que estan almacenados en la base de datos
  2. 'tomando en cuenta los diferentes filtros
  3. Set rslista = myconn.Execute(" SELECT * FROM dbo_pagos WHERE monto <>" & 0 & " AND anulado <>" & -1 & " ")
  4.     Do Until rslista.EOF
  5.         Set rsnumdoc = myconn.Execute("SELECT doc_num FROM  dbo_reng_pag WHERE cob_num =" & rslista!cob_num)
  6.             Set rsobserva = myconn.Execute("SELECT observa FROM dbo_docum_cp WHERE nro_doc =" & rsnumdoc!doc_num)
  7.                 observacion = rsobserva!observa
  8.                 observacion = Left(observacion, 37)
  9.                 If observacion = "CORPORACION VENEZOLANA DE GUAYANA CVG" Then
  10.                     List1.AddItem rslista!cob_num
  11.                 End If
  12.         rslista.MoveNext
  13.     Loop

debe haber una manera mas sotisficada de hacer lo mismo sin tener que realizar tantas consultas sql.... creo que asi no se tardaria una eternidad en cargar el listbox...

gracias por su tiempo..... cualquier ayuda se las agradecere....

p.d. son casi 6mil registros que tiene que recorrer...
  #2 (permalink)  
Antiguo 14/07/2011, 12:44
Avatar de Kruzado  
Fecha de Ingreso: marzo-2007
Mensajes: 307
Antigüedad: 17 años, 2 meses
Puntos: 17
Respuesta: optimizar consultas sql

lo que yo haria es crearme una consulta donde "enzalo" las dos tablas y hago el select a esa consulta y el where quedaria algo como WHERE monto <>0 AND anulado <>-1 and mid(observa,1,37)="CORPORACION VENEZOLANA DE GUAYANA CVG"
  #3 (permalink)  
Antiguo 14/07/2011, 14:04
Avatar de ARGFA  
Fecha de Ingreso: noviembre-2009
Ubicación: Ciudad Guayana, Venezuela
Mensajes: 55
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: optimizar consultas sql

una pregunta: donde dices:

mid(observa,1,37)="CORPORACION VENEZOLANA DE GUAYANA CVG"

es lo mismo que

observacion = Left(observacion, 37)

????

estoy intentando de la siguiente forma pero me devuelve los valores como si no cumpliera las condiciones:

Set rs1 = myconn.Execute("SELECT dbo_pagos.cob_num,dbo_reng_pag.doc_num,dbo_docum_c p.observa FROM dbo_pagos,dbo_reng_pag,dbo_docum_cp WHERE dbo_pagos.monto <>" & 0 & " AND dbo_pagos.anulado <>" & -1 & " AND mid(observa,1,37)= 'CORPORACION VENEZOLANA DE GUAYANA CVG' ")
Do Until rs1.EOF
pago = rs1!cob_num
rs1.MoveNext
Loop
  #4 (permalink)  
Antiguo 14/07/2011, 15:25
Avatar de ARGFA  
Fecha de Ingreso: noviembre-2009
Ubicación: Ciudad Guayana, Venezuela
Mensajes: 55
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: optimizar consultas sql

la logica me dice que deberia ser algo como esto:

Código vb:
Ver original
  1. Set rs1 = myconn.Execute("select * FROM dbo_pagos WHERE (dbo_pagos.cob_num = dbo_reng_pag.cob_num) && (dbo_reng_pag.doc_num = dbo_docum_cp.nro_doc) && (dbo_docum_cp.observa = 'CVG') && (dbo_pagos.monto != " & 0 & ") && (dbo_pagos.anulado !=" & -1 & ") ")

pero igual me da error de sintaxis
  #5 (permalink)  
Antiguo 15/07/2011, 12:13
Avatar de Kruzado  
Fecha de Ingreso: marzo-2007
Mensajes: 307
Antigüedad: 17 años, 2 meses
Puntos: 17
Respuesta: optimizar consultas sql

en tu pregunta, no es lo mismo
observacion=left(observacion,37)
estas comparando onservacion con los primeros 37 caracteres de la misma variable, entonces siempre que observacion tenga largo 37 o menor, van a ser iguales me entiendes????

ahora vamos a tu select, en las condiciones ocupas campos de tablas distintas a las que estas utilizando(ej.dbo_docum_cp.observa = 'CVG', dbo_docum_cp no es la tabla que tienes en el select), no creo que eso se pueda hacer...

cuando comence a utilizar acces un amigo me recomendo lo siguiente :

en la pantalla de diseño de consultas, create una consulta que enlace todas las tablas que necesitas, con todas las condiciones para seleccionar registros, una vez que la tengas diseñada en access y el resultado es el que quieres, dale click con el boton derecho del mouse y anda a la vista sql, copia ese texto de la consulta y pegala en tu programa, reemplaza los valores por tus variables y listo, problema resuelto.

tambien puedes utilizar el metodo inverso para revisar tus consultas, esto es, copia la consulta que tienes en el programa, crea una nueva en access y andate a la vista SQL, pega la consulta en esa ventana y revisa los datos, te ayuda a detectar los errores que tienes,

trata de revisar y nos avisas

Etiquetas: sql
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 12:23.