Access - Eficacia y Eficiencia

 
Vista:
sin imagen de perfil
Val: 130
Bronce
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Eficacia y Eficiencia

Publicado por Pablo (46 intervenciones) el 22/10/2020 18:56:02
Hola a Tod@s:
La siguiente instruccion sql me de 1 registro
SELECT TOP 1 subcuentas.codigosubcta, subcuentas.numsubcta, subcuentas.descripcionsubcta, subcuentas.cmdadsubcta, PV([numsubcta]) AS Expr1 FROM subcuentas WHERE (((Left([numsubcta],3))="410") And ((subcuentas.numsubcta)<>"410999")) ORDER BY val([numsubcta]) DESC;

El mismo resultado me lo da un cuadro de texto que lo hago igual a
=DMáx("numsubcta";"subcuentas";"val(numsubcta)<410999")

Andando por la calle pensé en la sql, ya haciendo pruebas en el ordenador se me ocurrio utilizar Dmax, de las dos formas se consigue el mismo resultado, ambas son eficaces pero supongo que Dmax es mucho más eficiente, más rápidez, menos memoria, no es así?

Pablo

PD: lo que busco es el numero de cuenta más alto entre "410001" y "410999"
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

Eficacia y Eficiencia

Publicado por Anonimo (2016 intervenciones) el 23/10/2020 01:11:10
¿Qué sentido tiene comparar una SQL que devuelve un montón de datos:
.- codigosubcta
.- numsubcta
.- descripcionsubcta
.- cmdadsubcta
.- PV([numsubcta])

Con una función de dominio que devuelve un único dato:
.- numsubcta
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
sin imagen de perfil
Val: 130
Bronce
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Eficacia y Eficiencia

Publicado por Pablo (46 intervenciones) el 23/10/2020 18:41:05
No tiene mucho sentido, de acuerdo. La sql sólo devuelve un dato: Select top 1...
Si tengo 20 datos no creo que haya mucha diferencia de tiempo pero, si tengo 20000 si la habrá, será muy grande?
Gracias
Pablo
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

Eficacia y Eficiencia

Publicado por Anonimo (2016 intervenciones) el 23/10/2020 19:21:09
Creo que no has analizado esa SQL y que lo de TOP no se entiende lo que implica.

TOP (sea uno o cincuenta) es el numero MAXIMO de REGISTROS que devolverá como resultado, y el resultado será de TODOS los campos que se le indiquen por cada registro que aparezca.

¿TOP 1? ... un solo REGISTRO que devolverá los datos siguientes (cada uno en su respectivo campo) :

SELECT TOP 1 subcuentas.codigosubcta, subcuentas.numsubcta, subcuentas.descripcionsubcta, subcuentas.cmdadsubcta, PV([numsubcta]) AS Expr1 .....===>>>>

1.- subcuentas.codigosubcta
2.- subcuentas.numsubcta
3.- subcuentas.descripcionsubcta
4.- subcuentas.cmdadsubcta
5.- PV([numsubcta]) AS Expr1

Esto es: por cada registro devuelto sus cinco datos .
La función de dominio solo devuelve un único dato de un único registro (en principio, que para eso esta la inventiva del programador).
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
sin imagen de perfil
Val: 130
Bronce
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Eficacia y Eficiencia

Publicado por Pablo (46 intervenciones) el 23/10/2020 20:20:57
Select top 1 subcuentas.numsubcta FROM subcuentas WHERE (((Left([numsubcta],3))="410") And ((subcuentas.numsubcta)<>"410999")) ORDER BY val([numsubcta]) DESC;
Lo que busco es el numsubcta más alto y menor que 410999
Si tengo 410001, 410002, 410003 y 410999 por ejemplo
con top 1 selecciono la que aparece primero, la que está más arriba distinta de 410999
como quiero la que tiene el número más alto le puse DESC al final
No se si me expliqué bien
Pablo
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

Eficacia y Eficiencia

Publicado por Anonimo (2016 intervenciones) el 24/10/2020 09:18:08
Respecto a eficacia <=> eficiencia

Con exactamente los mismos datos:
.- en una formula se aplican dos condiciones y un orden
.- en la otra una única condición y el orden va implícito (lo aplica o crea la función)

O bien a una le falta algo o bien al la otra le sobra algo, porque a ambas se les puede aplicar el mismo numero de condiciones (dejando aparte el orden), por cierto si ese orden existe en la tabla (un simple índice) Access lo utilizara en la función DMax y (probablemente) también lo utilice la SQL.

Pero eso solo se cumplirá en unas condiciones determinadas en las que influye el numero de elementos a manejar, la repetitividad y (no se debe de perder de vista) que una trabaja con un dato único que asignara directamente y la otra con conjuntos de datos que habrá que asignar individualmente a cada campo.

¿Qué implica lo anterior?....
.- Que la función de dominio se tendrá que utilizar tantas veces como datos de ese registro se precisen (recuérdese lo de los cinco campos en un solo registro)
.- Que la respuesta obtenida por la SQL (independiente de que pudiera ser 'mas fiel') habrá que utilizar medios para asignar los valores obtenidos a los objetos destino (en las mismas condiciones que la función DMAx).

El único que puede llegar a conclusiones validas es el programador en el entorno real de trabajo, con sus datos reales, y en tiempo de ejecución, porque influye de sobremanera el resto de la aplicación.

De todas formas (y solo por experimentar) crea un conjunto de datos disperso y unas subrutinas en VBA para ejecutar cada uno de esos métodos un numero determinado de veces y con entradas aleatorias (no olvidemos que influye la cache de trabajo)
Un simple TIME al principio y otro al final obtiene el tiempo empleado.

Después vendrá lo de la fidelidad, porque las funciones de dominio al igual (que las SQL) en caso de dos o mas resultados iguales, acostumbran a devolver el que les cae 'mas simpático' que no siempre es el mismo.
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
sin imagen de perfil
Val: 98
Ha disminuido 1 puesto en Access (en relación al último mes)
Gráfica de Access

Eficacia y Eficiencia

Publicado por raul (33 intervenciones) el 24/10/2020 00:25:24
Hola Pablo; veras es logico; que cuando si haces pruebas para un solo registro empleando las 2 vias el resultado por unidad de tiempo será el mismo, pero si empleas 2000 registros los resultados seran otros...A parte de ello DMAX es una funsión integrada al ACCESS disponible en versiones recientes o sea que no pertenece al lenguaje SQL-QUERRY y no tiene contrapartes en el SQL-TRANSAC o sea que si tienes una VIEW donde empleas la funsión DMAX es muy posible que no este disponible fuera del escenario OFFICE u OPENOFFICE.

Dicho de otra forma dentro de ACCESS Dmax es muy eficiente, pero fuera de ella nó o sea que si tu database solo será empleada desde ACCESS entonces sientete libre de explotar al maximo sus bondades; pero si existe la posibilidad de que la database mañana pueda ser empleada por otro programa, entonces yo me aseguraria 'EN SALUD' de emplear la tediosa sintaxis clasica 'WHERE (((Left([numsubcta],3))="410") And ((subcuentas.numsubcta)<>"410999")) ORDER BY val([numsubcta]) DESC;' que no será tan rapidada pero es estandar y segura... por otro lado ningun ser humano hechará de menos unos cuantos segundos de su existencia
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
sin imagen de perfil
Val: 130
Bronce
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Eficacia y Eficiencia

Publicado por Pablo (46 intervenciones) el 24/10/2020 14:54:13
Hola a tod@s
Mejor dbusq, fuera de access dmax
Me gustó el comentario de Anónimo:
Después vendrá lo de la fidelidad, porque las funciones de dominio al igual (que las SQL) en caso de dos o mas resultados iguales, acostumbran a devolver el que les cae 'mas simpático' que no siempre es el mismo
La informática es una ciencia exacta o de vez en cuando hace lo que quiere?
Pablo
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

Eficacia y Eficiencia

Publicado por Anonimo (2016 intervenciones) el 24/10/2020 17:40:06
La informática es tan exacta como capacitado y competente sea el programador y aplique su capacidad analítica del entorno para el que va a programar.

Y sobre DLookup (que es el nombre original de DBúsq):

Es una función de dominio que utiliza exactamente la misma sintaxis que el resto de las funciones de dominio, en el mismo entorno etc. etc.

Por lo que si en los registros (o datos) que pasen el filtro encuentra repetidos, tomara el primero que encuentre ya que como no se le puede condicionar como ejecuta los filtros, no se puede garantizar el 'orden entre iguales' que aplique y cuando no encuentra ninguno devuelve un NULL que se propagara por el resto de la aplicación (en mi opinión: la pieza que puede estropear la cesta de fruta).
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