Access - 2 consultas SQL en una - mayor velocidad

   
Vista:

2 consultas SQL en una - mayor velocidad

Publicado por jorge1644 (1 intervención) el 20/02/2012 14:18:03
Hola a Todos


Tengo una tabla de pedidos y he de volver a ella para saber si estamos en el primer pedido o en el segundo ... etc.


En access funciona rapido en MS-SQL lentisimo.
El problema es que ataco 2 veces a la base de datos rs1 y rs2.
Se cual es el problema pero no como se soluciona.
¿


Alguien me puede decir como juntar ambas consultas en 1?
creo que sería la solución.

Este es el codigo:
''' EN LA TABLA FACTURAS RECORRO TODA LA TABLA
Set rs1 = ConData.Execute("Select * From Tabla_Facturas ")
Do While Not rs1.EOF

Response.Write " | " & rs2("Factura_Numero")
Response.Write " | " & rs2("Factura_Codigo_Cliente")
Response.Write " | " & rs2("Factura_Importe")
Response.Write " | " & rs2("Factura_Nombre_Comercial")


''' VUELVO A LA TABLA FACTURAS PARA BUSCAR FACTURAS ANTERIORES EN LA QUE ESTAMOS EN ESTE MOMENTO
ssqlrs2 = "Select distinct Factura_Numero From Tabla_Facturas Where Factura_Codigo_Cliente = '"&rs1("Factura_Codigo_Cliente")&"' And Factura_Numero <> '"&rs1("Factura_Numero")&"' And orderid < "&rs1("orderid")
Set rs2 = Server.CreateObject("adodb.RecordSet")
rs2.Open ssqlrs2,ConData,3,3
If Not rs2.EOF Then
''' HA HABIDO MAS FACTURAS ANTERIORMENTE
ComisionPorCiento = "5%"
Else
''' ES LA PRIMERA FACTURA A ESTE CLIENTE
ComisionPorCiento = "10%"
End If
rs2.Close
Set rs2 = Nothing

Response.Write " LA COMISION DE VENTA PARA EL COMERCIAL ES DEL: " & ComisionPorCiento

rs1.MoveNext
Loop
rs1.Close
Set rs1 = Nothing
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Enrique Ramírez

2 consultas SQL en una - mayor velocidad

Publicado por Enrique Ramírez (617 intervenciones) el 20/02/2012 18:06:51
Prueba utilizando DLookup(), de esta forma no utilizas tanta memoria con otro Record Set.


Set rs1 = ConData.Execute("Select * From Tabla_Facturas ")
Do While Not rs1.EOF
Response.Write " | " & rs2("Factura_Numero")
Response.Write " | " & rs2("Factura_Codigo_Cliente")
Response.Write " | " & rs2("Factura_Importe")
Response.Write " | " & rs2("Factura_Nombre_Comercial")

''' BUSCAR CON LA FUNSION DLookup LA FACTURA
ssqlrs2 = Nz(DLookup("[Factura_Numero]", "Tabla_Facturas", "[Factura_Codigo_Cliente] = '" & rs1("Factura_Codigo_Cliente") & "' And [Factura_Numero] <> '" & rs1("Factura_Numero") & "' And [orderid] < " & rs1("orderid")))

If ssqlrs2 > 0 Then
''' HA HABIDO MAS FACTURAS ANTERIORMENTE
ComisionPorCiento = "5%"
Else
''' ES LA PRIMERA FACTURA A ESTE CLIENTE
ComisionPorCiento = "10%"
End If
Response.Write " LA COMISION DE VENTA PARA EL COMERCIAL ES DEL: " & ComisionPorCiento

rs1.MoveNext
Loop
rs1.Close
Set rs1 = Nothing
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Enrique Ramírez

2 consultas SQL en una - mayor velocidad

Publicado por Enrique Ramírez (617 intervenciones) el 20/02/2012 18:19:28
Por cierto Response.Write ¿te funciona en access? a mi me manda error mejor utiliza MSGBOX
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

2 consultas SQL en una - mayor velocidad

Publicado por Jefferson (381 intervenciones) el 22/02/2012 20:04:32
Hola jorge1644

Saludos Amigo Enrique Ramírez

Oye y porque no usamos un simple dcount.....???? si lo que estamos es buscando diferencias en una misma tabla y con campo todos numericos.

te ahorra mucha memoria y es mucho mas rapido con un Recordset cuando la data sobrepasa el millon de registros.

Desde Venezuela
Jefferson Jimenez
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar