Restringir sobre una consulta access

25/10/2010 - 11:12 por raul | Informe spam
Buenas,
Tengo un formulario, que entre otras cosas comprueba una serie de
datos introducidos con los datos que tengo en una consulta :

Set rs = CurrentDb.OpenRecordset("producciontest")
Do While Not rs.EOF
If ((rs![Poliza] = Form.Poliza) And (rs!Colectivo = Form.Colectivo)
And (Round(rs![Coste Bonificación], 2) = Form.Coste And (rs![S/Remesa]
= Form.Tomador)))
Then
Call MsgBox(" Existe")

_______

Esto hace que si coinciden los 4 datos, continue haciendo otras
cosas.

El problema es que la consulta tiene 40000 registros, y se pega unos
20 segundos hasta que encuentra los datos, y se hace eterno.

Quisiera saber si me podriais ayudar con esto.
Yo creo que deberia crear una sentencia sql donde me muestre las
lineas de la consulta, pero filtradas por ejemplo por el nº de la
poliza que se introduce, entonces seria instantanea la comprobación,
pero estoy un poco perdido en el tema.

A ver si me podeis echar una mano.

Gracias otra vez!!

Preguntas similare

Leer las respuestas

#1 José Mª Fueyo
25/10/2010 - 12:32 | Informe spam
Hola
La verdad no entiendo muy bien cual es tu problema. ¿No podrías crear
los criterios de una sentencia SQL y pasarlo al método OpenRecordset
en el evento click, por ejemplo, de un botón? obviamente, en el
proceso de creación del criterio tendrás que comprobar sí el control
en cuestión tiene valor (por ejemplo, Form.Poliza) antes de
incorporarlo al criterio.

Salu2,
José Mª Fueyo
[MS MVP Access]
Respuesta Responder a este mensaje
#2 raul
25/10/2010 - 12:44 | Informe spam
Hola, gracias por tu respuesta!!

El formulario en cuestion es un proceso de digitalizacion, lo que hace
en cuestion es lo siguiente:
la persona mete cuatro datos, y el sistema comprueba si estos cuatro
datos concuerdan con los metidos en una tabla proveniente de otro
programa, de ahi la consulta. si es correcto, la escanea el documento
y el sistema recoge este documento, lo renombra y mueve a su lugar
correspondiente, a la vez que guarda informacion en la base de datos.

la consulta sql creo que seria la siguiente:

miSQL = "SELECT * FROM producciontest WHERE (Produccion por Compañia y
agente.Poliza)= [Form.fromulario1].[Poliza];"

pero esto no se como convertirlo en una consulta para cotejar datos.

gracias por tu ayuda!
Respuesta Responder a este mensaje
#3 José Mª Fueyo
25/10/2010 - 14:32 | Informe spam
Hola de nuevo.
Mira en la ayuda la función DCount, quizás te pueda ayudar para
determinar sí hay datos o no antes de actuar.

Salu2
José Mª Fueyo
[MS MVP Access]
Respuesta Responder a este mensaje
#4 raul
25/10/2010 - 15:18 | Informe spam
On 25 oct, 14:32, José Mª Fueyo wrote:
Hola de nuevo.
Mira en la ayuda la función DCount, quizás te pueda ayudar para
determinar sí hay datos o no antes de actuar.

Salu2
José Mª Fueyo
[MS MVP Access]



El Tema es que cuando hago la consulta si que se esta el dato, pero
tengo que compararlo con los otros cuatro, no se como desarrollar
esto:
Dim qdf As DAO.QueryDef
Set qdf = CurrentDb.QueryDefs("producciontest")
qdf.SQL = "SELECT * FROM producciontest WHERE [Produccion por
Compañia y agente].[Poliza]=" & Me.Poliza & ";"

Do While Not rs.EOF 'aqui me da error por que me dice que hay
variable de objeto o bloque with no establecido
If ((rs![Poliza] = Form.Poliza) And (rs!Colectivo Form.Colectivo) And (Round(rs![Coste Bonificación], 2) = Form.Coste
And (rs![S/Remesa] = Form.Tomador))) Then
Call MsgBox(" Existe")


estoy un poco atascado aqui.
Gracias otra vez!
Respuesta Responder a este mensaje
#5 José Mª Fueyo
25/10/2010 - 17:40 | Informe spam
Hola nuevamente.
Podrias declarar una variable de tipo string, e ir construyendo la
sentencia
Supongo que los valores antecedidos por Form., son campos y por tanto
controles ¿no? bien

dim sCriterio as string

sCriterio=""
if me.Poliza.value<>""
sCriterio="Poliza=" & me.Poliza.value
'Sí el tipo de dato es texto, encerrar entre comillas
'sCriterio="Poliza='" & me.Poliza.value & "'"
end if
if me.Colectivo.value<>"" then
if sCriterio<>""
sCriterio=sCriterio & " AND Colectivo=" & me.Colectivo.value
else
sCriterio="Colectivo=" & me.Colectivo.value
end if
end if


De ésta forma creamos la parte final del una selección, con la parte
WHERE

Salu2
José Mª Fueyo
[MS MVP Access]
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida