Access - Ayuda con funciones

 
Vista:

Ayuda con funciones

Publicado por Joel (2 intervenciones) el 18/03/2008 15:45:42
Antes que nada un saludo a todos.

Resulta que estoy tratando de hacer una base de datos para tener un historico de los proyectos electricos, por lo que necesito realizar calculos con los campos, "buscar valores en tablas" por el momento la funcion "DLookup" me ha servido, sin embargo estoy en un punto en el que necesito buscar un valor del tipo 99.54 en una tabla que no cuenta con este valor, es decir el valor mas proximo es 115 por ejemplo. Como hacer para que me regrese este valor?

Existe una funcion en excel similar que se llama "Vlookup", esta funcion me regresa el valor que necesito, sion embargo en acces no existe, la similar es Dlookup.

De antemano gracias por la ayuda.

jrme
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

RE:Ayuda con funciones

Publicado por Enrique (1299 intervenciones) el 18/03/2008 18:14:04
Hola Joel:
Efectivamente en Access no hay ninguna función (que yo sepa) similar al VLookup de Excel pero se puede conseguir hacer lo que quieres. Supongamos que la Tabla se llama "Tabla1" con varios campos entre ellos el que contiene las cantidades, de nombre "Cantidad" y quieres buscar en la Tabla la cantidad mayor más próxima a la que introduzcas en un Cuadro de Texto Independiente de nombre "NroMayor" de un Formulario. Ejemplo para buscar con un botón de Comando:

Private Sub Buscar_Click()
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("Select * From Tabla1 Order By Cantidad", dbOpenDynaset)
rst.FindFirst "Cantidad >=" & Format(Me.NroMayor, "#,##")
If Not rst.NoMatch Then
MsgBox "El número mayor más próximo al buscado es: " & Format(rst!Cantidad, "#,##0.00")
Else
MsgBox "No hay ninguna Cantidad mayor o igual a la introducida.", vbInformation, "Aviso"
End If
End Sub

Asegurate de tener marcada la Referencia de DAO.

En el OpenRecordset ordenamos los registros por cantidades de menor a mayor en sentido Ascendente (en la Tabla se quedan con el órden que tengan) y mediante FindFirst (Buscar Primero) obtenemos el numero MAYOR siguiente al introducirdo en el TextBox. Si ese número lo necesitas en otro cuadro de Texto, por ejemplo, pués simplemente sustituyes el MsgBox por:

TextBox1 = Format(rst!Cantidad, "#,##0.00") o le pasas el valor a una Variable o lo que quieras, ya según te interese y el Evento por supuesto tambien puede ser otro.

Espero que te sirva aunque sea como orientación.
Saludos
Enrique
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

Otra vez ayuda con funciones

Publicado por Joel (2 intervenciones) el 18/03/2008 21:35:34
Gracias por la pronta respuesta.
El ejemplo es para hacer una busqueda por medio de un boton, pero que pasa si la busqueda la hago desde un "query". =(

Ya que access no permite tener valores calculados en las tablas,lo que hice fue hacer un query, y en este, por medio de la opcion build escribi algo como:
CalAmp: DLookUp(" [310-16 NOM 60C]![AWG]","310-16 NOM 60C"," [Icorr] =" & [Icorr]).
Lo que buso es que en el campo CalAmp me regrese el valor del cable (texto)

La tabla 310-16 NOM 60C tienen la informacion siguiente:

AWG Areamm2 Icorr
12 AWG 3.307 25
10 AWG 5.26 30
etc

Como podras observar si el valor del calculo que me resulta es 26.5 el valor que quiero se "vea" en el query es de 10 AWG, y en otro campo 5.26; por el contrario si el valor del calculo es de 24.5 los valores necesarios seran 12 AWG y 3.307

Desafortunadamente no soy un experto programador, por lo que recurrro a los foros para poder aclarar las dudas.

En verdad agradezco el apoyo que puedan brindar

jrme
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

RE:Otra vez ayuda con funciones

Publicado por Enrique (1299 intervenciones) el 19/03/2008 13:59:51
Hola Joel:
Ahora si te he entendido, es que el planteamiento cambia con respecto a tu primer mensaje. Quieres obtener el resultado en dos campos calculados de una consulta (query), pero tengo una duda ¿ de que forma haces el cálculo para obtener 26.56 o 24.5 ?

Con estos dos campos calculados:

CalAWG: DBúsq("AWG";"310-16 NOM 60C";"Icorr>26.5")
CalArea: DBúsq("Areamm2";"310-16 NOM 60C";"Icorr>26.5")
Hay que pulsar en la Consulta el botón de "Totales" y la fila Total: Agrupar por

muestra en el primer campo calculado: 10 AWG y en el segundo: 5.26 y si sustituyes 26.5 después de "Icorr>" por 24.5 el resultado cambia a: 12 AWG y 3.307.

Si quieres que la consulta tambien muestre el campo Icorr, añades este otro campo calculado :
CalIcorr: DBúsq("Icorr";"310-16 NOM 60C";"Icorr>26.5")

pero claro, habría que sustituir 26.5 o 24.5 que están puestos de forma fija en el DLookup, por variables que recogan el cálculo, por eso pregunto como lo obtienes.

Bueno, a ver si con esto nos hemos acercado un poco a la solución. Ya me diras.
Saludos
Enrique
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

RE:Otra vez ayuda con funciones

Publicado por Joel (2 intervenciones) el 19/03/2008 14:44:14
Creo que vamos progresando.
Aqui vamos, el valor 26.56 o 24.5 cambia de acuerdo con valores de la corriente o Icorr, es decir, este valor podria variar desde 10 hasta 750 aproximadamente, motivo por el cual el valor 12 AWG podria cambiar en funcion del valor de la corriente desde 12 AWG hasta 2000 kcmil, estos valores los tengo en una tabla, no cambian por que los obtuve de una Norma mexicana (dicho sea de paso).
Ahora bien, me es necesario ajustar el valor de la (Icorr) al valor proximo superior.
La "formula" que tengo en el (query) para el obtener el valor es:
Icorr: ([ICond]/([FCA]*[FCT]))/[CondFase]
que me regresa valores con punto decimal y en la mayoria de los casos no son iguales a los valores que tengo en la Tabla "310-16 NOM 60C"

Obviamente que con los valores FCA,FCT,Icond Y CondFase no tengo problema hasta el momento. =)

DBusq es igual a DLoookup...?

Creo que nos estamos acercando a la solucion...

Gracias por el apoyo

jrme
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

RE:Otra vez ayuda con funciones

Publicado por Enrique (1299 intervenciones) el 19/03/2008 17:16:57
Si, en Access con idioma en Español, en el entorno de Consultas, DBúsq es igual a DLookup y si ahí escribes esto último, Access lo cambia automáticamente por DBúsq; ocurre igual con otras funciones.

Bien, supongo que estarás haciendo pruebas por tu cuenta, yo no puedo reproducir el cálculo que indicas de "Icorr" para probarlo. Yo te preguntaba como haces el cálculo de los valores (24.5 o 26.5, etc), no sabía que "Icorr" tambien se obtenía con otro cálculo, pero segun dices, esos valores se calculan a partir de "Icorr" y aquí ya me pierdo un poco. Dime si necesitas alguna ayuda más, o ya sabes seguir por tu cuenta.

Saludos
Enrique
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

RE:Otra vez ayuda con funciones

Publicado por Joel (2 intervenciones) el 19/03/2008 19:48:11
Gracias por tu apoyo, te comento que tu ayuda me "ilumino", resulta que por el momento ya quedo el asunto, la modificacion que hice fue la siguiente:

[Icorr60] > " & [Icorr]

Con esto me busca valor de Icorr en la Tabla 310-16 NOM ALL regresandome el valor superior siguiente.

Abajo toda la "formula" que tuve que modificar para que funcionara:

CalAmp: IIf([TempCond]=60,DLookUp(" [310-16 NOM ALL]![AWG]","310-16 NOM ALL"," [Icorr60] > " & [Icorr]),IIf([TempCond]=75,DLookUp(" [310-16 NOM ALL]![AWG]","310-16 NOM ALL"," [Icorr75] > " & [Icorr]),DLookUp(" [310-16 NOM ALL]![AWG]","310-16 NOM ALL"," [Icorr90] > " & [Icorr])))

Sabes si existe una manera mas "limpia" de hacer las comparaciones, es decir sin escribir tantos iif, comprenderas que despues de dos iif, resulta complicado leer la formula y es muy facil equivocarse.

Gracias

jrme
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

RE:Otra vez ayuda con funciones

Publicado por Enrique (1299 intervenciones) el 19/03/2008 20:23:05
Me alegro que hayas encontrado la solución. En cuanto a hacer más limpias las comparaciones, puedes aligerar la fórmula eliminando de cada DLookup el nombre de la Tabla al principio y dejando solo el nombre del campo, por ejemplo esta parte:

DLookUp(" [310-16 NOM ALL]![AWG]","310-16 NOM ALL"," [Icorr60] > " & [Icorr]),....

se puede quedar en:

DLookUp("AWG","[310-16 NOM ALL]","Icorr60 > " & Icorr), .....

No hace falta anteponer el nombre de la tabla al nombre del campo y los IIf no veo la forma de reducirlos porque estos son necesarios.

Saludos
Enrique
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