Búsqueda y presentación en formulario

Estoy programando un formulario que permita la introducción en un control de un código, lo busque y presente l información en otro formulario.
Mi pregunta es la siguiente:
¿Mejor hacerlo mediante un filtro o mejor ejecutando un select y presentando los datos en el formulario?...
Gracias de antemano. Saludos

1 respuesta

Respuesta
1
Tanto monta, monta tanto.
En ambos casos, el formulario debería cargarse inicialmente sin datos (filtro o cláusula Where incluyendo un 'and false' por ejemplo) y reasignarse con el filtro o la where que resulte de los criterios de búsqueda según lo que decida el usuario.
Hay una cierta rumorología por ahí acerca de que access carga todos los datos y luego aplica los filtros, por lo que sería más lento este sistema que una where directa. Sin embargo, como se puede comprobar haciendo una traza de bases de datos al trabajar con tablas vinculadas, esto no es así. Que se sepa, las únicas funciones sumamente idiotas y que hay que evitar al trabajar con volúmenes grandes es la familia del dlookup, dfirst y similares, que no usan índices, y la infame find.
Por tanto, lo que prefieras en cuanto a rendimiento.
Hay una diferencia en interacción, y es que con filtros el usuario tiene el botón de la barra de herramientas para desactivarlos, y quizá no te interese.
¿Por qué comentas que find no es buena en cuanto al rendimiento? Que es lo optimo para buscar un dato en una tabla vinculada y presentarlo en un formulario ADO, ¿DAO o bien mediante filtros?
Gracias de nuevo...
Si es para tablas vinculadas, utiliza de forma exclusiva sqls con su where. En caso contrario, donde se permita, utiliza seeks.
Find tiene un problema serio, y es que NO UTILIZA índices.
Ah, y en cuanto a las sqls, para las que vayas a utilizar dentro de bucles o así, utiliza querydefs en lugar de poner la sql dentro del openrecordset. Cada llamada a openrecordset implica el reconocimiento y compilación de la sql, mientras que con querydefs se compila una vez y puedes abrir tantas veces el recordset como quieras.
Ej: Trabajando con Oracle vinculado, en mi máquina, supongamos un bucle que se repite n veces:
Caso a) dentro del bucle se lanza un openrecordset directo
Tiempo = n*100
caso b) CreteQuerydef al principio + 5 ms por cada qdf.openrecordset
tiempo=100+n*5
Por ejemplo, para n=500 (carga de un soporte con 500 DNIs con su búsqueda correspondiente
caso a) 100*500=50000 ms=50 s
caso b)100+500*5=2600 ms =2,6 s

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas