Seletc

Solo disponible en BuenasTareas
  • Páginas : 5 (1124 palabras )
  • Descarga(s) : 0
  • Publicado : 27 de abril de 2011
Leer documento completo
Vista previa del texto
Consultas con SELECT
Funciones en Access que devuelven más de un valor en access (I)
Las funciones en Access sólo pueden tener un valor de retorno, no obstante existen varias maneras de obtener varios valores de una misma función.
La primera forma se pude definir en el argot informático como multi-retorno a pedales pero no por ello es menos efectiva que otras más sofisticadas.
Consiste en irpidiendo los valores en sucesivas llamadas a la misma función utilizando un parámetro para seleccionar el retorno pedido. Tiene el inconveniente de que los valores devueltos (retornados) siempre deben ser del mismo tipo:
Function MultiRetorno(Valor As Integer) As String
Select Case Valor Case 1
MultiRetorno = "Primer retorno"
Case2
MultiRetorno = "Segundo retorno"
Case Else
MultiRetorno ="Error"
End Select
End Function
Funciones en Access que devuelven más de un valor (II)
Como continuación al anterior truco, presentamos una manera más refinada de obtener varios valores de retorno de una función en Access. La alternativa es pasar a la función tantos argumentos como valores queremos que retorne y hacer que la función los modifuque. En este caso, se tiene la ventaja de poderretornar valores de distintos tipos:
Function MultiRetorno(R1 as integer, R2 as string)
R1 = 1 R2 = "Segundo valor de retorno"
End Function
Funciones en Access que devuelven más de un valor (y III)
Para finalizar esta serie de trucos presentamos las forma más elegante (y sofisticada) de obtener varios valores de retorno de una misma función en Access. El lenguaje VBA de Access permite que unafunción devuelva una estructura de valores. en el siguiente ejemplo se muestra cómo definir una estructura y utilizarla:
Public Type Multivalor
R1 As Integer R2 As String
End type
Una vez definido el nuevo tipo, se puede utilizar como valor de retorno de una función:
Function MultiRetorno() As MultiValor
MultiRetorno.R1 = 950 MultiRetorno.R2 = "Segundo valor devuelto"
End Function
Con el usode estructuras queda definitivamente resuelto el problema de las funciones que devuelven más de un valor.
2 caso
La consulta era la siguiente:
Tengo una tabla con varios campos. Dos de ellos son fechas, que correspoden con un intervalo. Uno de ellos es la fecha de inicio del intervalo (fechadesde) y otro la de final del intervalo (fechahasta)
Quisiera saber cómo se puede hacer una consulta SQLen Access para obtener los registros cuyo intervalo de fechas contenga el día de hoy.
Es decir, que la fecha desde sea menor que hoy y la fecha hasta sea mayor que hoy.
Estuvimos primero haciendo un par de pruebas sin éxito, comparando las fechas con operadores artitméticos. En algunos casos obtuvimos la respuesta esperada, pero no siempre funcionaban las sentencias y teníamos problemas alejecutarlas desde Access o desde el servidor web, porque no devolvían los mismos resultados.
Función DateDiff()
Al final, la respuesta que propusimos pasó por utilizar la función DateDiff, que sirve para obtener la diferencia entre dos fechas. Por ejemplo:
DateDiff("y", #06/10/2004#, Now())
Nos dice los días que han pasado desde el seis de octubre de 2004.
Nosotros podemos utilizarla comocondición en un where de una sentencia SQL. Por ejemplo, para una sentencia como esta:
DateDiff("y",A,B)
Si son iguales, la función devolverá cero.
Si A es una fecha anterior a B, entonces la función devolverá un número de días que será mayor que cero.
Si A es una fecha posterior a B, entonces devolverá un número de días que será menor que cero.
Tenemos que comparar el día de hoy con las fechas desdey hasta. Hoy tiene que ser mayor que desde y menor que hasta. Nos queda como resultado esta sentencia.
SELECT * FROM vuelos WHERE
DateDiff('y',fechadesde,now())>=0
and DateDiff('y',fechahasta,nom())<=0

Nota: Hay que tener cuidado con el idioma de las fechas, pues en castellano se escriben de manera distinta que en inglés. Access intenta interpretar la fecha correctamente, por...
tracking img