Query con parámetro

16/07/2003 - 00:50 por fernando | Informe spam
Quisiera crear un query con un parámetro, cuyo valor se
tome de forma automática de una celda de la hoja excel, en
vez de introducirlo manualmente.
Alquien puede ayudarme?

Preguntas similare

Leer las respuestas

#6 Fernando Arroyo
06/08/2003 - 18:59 | Informe spam
Ahora mismo no puedo comprobar lo de las fechas porque estoy de vacaciones y el ordenador de que dispongo no tiene el Access, pero creo recordar que para las fechas se pueden convertir el dato de Excel al tipo de datos "double" usando algo como:

"WHERE (Tabla.CampoTipoFecha=" & Cdbl(Worksheets("Hoja").Range("CeldaDondeEstáLaFecha")) & ")"

Los números se pueden usar igual que el texto, con la única diferencia de que no hay que poner la comilla simple '
En el ejemplo que estamos utilizando sería algo como:

WHERE (Tabla3.Campo1 =" & ActiveSheet.Range("G1") & ")"

en vez de:

WHERE (Tabla3.Campo1 ='" & ActiveSheet.Range("G1") & "')"

Un saludo.


Fernando Arroyo
MS MVP - Excel


"Juanjo" escribió en el mensaje news:
Ok, muchas gracias, ya no me sale el error.
El problema que tenía es que no era un campo de texto.

Ahora mi problema ( sin error ) es que cómo paso un parámetro de tipo fecha
y uno de tipo número ( en dos hojas diferentes )
porque no veo donde se le especifica que tipo de variable utilizamos.

Gracias


"Fernando Arroyo" escribió en el mensaje
news:
Ten en cuenta que ese código sólo funcionará si hay una base de datos
llamada prueba.mdb situada en C:\datos\access, y si dicha base de datos
tiene una tabla llamada Tabla3 y al menos dos campos llamados Campo1 y
Campo2, el primero de los cuales tendría que ser necesariamente de texto.
Un saludo.


Fernando Arroyo
MS MVP - Excel


"Juanjo" escribió en el mensaje
news:%
> El código es el que habías puesto en la primera respuesta:
>
> Private Sub Worksheet_Change(ByVal Target As Range)
>
> If Target.Address <> "$G$1" Then Exit Sub
> If ActiveSheet.QueryTables.Count <> 1 Then Exit Sub
>
> Dim qtQ As QueryTable
> Dim strSQL As String
>
> Set qtQ = ActiveSheet.QueryTables(1)
> strSQL = "SELECT Tabla3.Campo1, Tabla3.Campo2 FROM
> `C:\datos\Access\prueba`.Tabla3 Tabla3 WHERE (Tabla3.Campo1 ='" &
> ActiveSheet.Range("G1") & "')"
> qtQ.CommandText = strSQL
> qtQ.Refresh
>
> Set qtQ = Nothing
>
> End Sub
>
>
> Gracias
>
>


Respuesta Responder a este mensaje
#7 Juanjo
11/08/2003 - 09:36 | Informe spam
Hola Fernando,

lo del parámetro con un número me funciona perfectamente, muchas gracias
El parámetro con la fecha no me funciona, miralo cuando puedas y dime cosas

Un saludo y muchas gracias otra vez
Juanjo


"Fernando Arroyo" escribió en el mensaje
news:
Ahora mismo no puedo comprobar lo de las fechas porque estoy de vacaciones y
el ordenador de que dispongo no tiene el Access, pero creo recordar que para
las fechas se pueden convertir el dato de Excel al tipo de datos "double"
usando algo como:

"WHERE (Tabla.CampoTipoFecha=" &
Cdbl(Worksheets("Hoja").Range("CeldaDondeEstáLaFecha")) & ")"

Los números se pueden usar igual que el texto, con la única diferencia de
que no hay que poner la comilla simple '
En el ejemplo que estamos utilizando sería algo como:

WHERE (Tabla3.Campo1 =" & ActiveSheet.Range("G1") & ")"

en vez de:

WHERE (Tabla3.Campo1 ='" & ActiveSheet.Range("G1") & "')"

Un saludo.


Fernando Arroyo
MS MVP - Excel


"Juanjo" escribió en el mensaje
news:
Ok, muchas gracias, ya no me sale el error.
El problema que tenía es que no era un campo de texto.

Ahora mi problema ( sin error ) es que cómo paso un parámetro de tipo


fecha
y uno de tipo número ( en dos hojas diferentes )
porque no veo donde se le especifica que tipo de variable utilizamos.

Gracias


"Fernando Arroyo" escribió en el mensaje
news:
Ten en cuenta que ese código sólo funcionará si hay una base de datos
llamada prueba.mdb situada en C:\datos\access, y si dicha base de datos
tiene una tabla llamada Tabla3 y al menos dos campos llamados Campo1 y
Campo2, el primero de los cuales tendría que ser necesariamente de texto.
Un saludo.


Fernando Arroyo
MS MVP - Excel


"Juanjo" escribió en el mensaje
news:%
> El código es el que habías puesto en la primera respuesta:
>
> Private Sub Worksheet_Change(ByVal Target As Range)
>
> If Target.Address <> "$G$1" Then Exit Sub
> If ActiveSheet.QueryTables.Count <> 1 Then Exit Sub
>
> Dim qtQ As QueryTable
> Dim strSQL As String
>
> Set qtQ = ActiveSheet.QueryTables(1)
> strSQL = "SELECT Tabla3.Campo1, Tabla3.Campo2 FROM
> `C:\datos\Access\prueba`.Tabla3 Tabla3 WHERE (Tabla3.Campo1 ='" &
> ActiveSheet.Range("G1") & "')"
> qtQ.CommandText = strSQL
> qtQ.Refresh
>
> Set qtQ = Nothing
>
> End Sub
>
>
> Gracias
>
>


Respuesta Responder a este mensaje
#8 Fernando Arroyo
12/08/2003 - 21:25 | Informe spam
Pues a mí sí me funciona lo de Cdbl, y pienso que debería funcionar siempre que en el campo de la tabla se almacene sólo la fecha, pero no la hora también. Si se almacenara la hora habría que modificar la instrucción. En cualquier caso, si estás haciendo pruebas con una base de datos pequeña y con datos ficticios, envíamela si quieres y hago unas pruebas yo.
Un saludo.


Fernando Arroyo
MS MVP - Excel

"Juanjo" escribió en el mensaje news:e%
Hola Fernando,

lo del parámetro con un número me funciona perfectamente, muchas gracias
El parámetro con la fecha no me funciona, miralo cuando puedas y dime cosas

Un saludo y muchas gracias otra vez
Juanjo


"Fernando Arroyo" escribió en el mensaje
news:
Ahora mismo no puedo comprobar lo de las fechas porque estoy de vacaciones y
el ordenador de que dispongo no tiene el Access, pero creo recordar que para
las fechas se pueden convertir el dato de Excel al tipo de datos "double"
usando algo como:

"WHERE (Tabla.CampoTipoFecha=" &
Cdbl(Worksheets("Hoja").Range("CeldaDondeEstáLaFecha")) & ")"

Los números se pueden usar igual que el texto, con la única diferencia de
que no hay que poner la comilla simple '
En el ejemplo que estamos utilizando sería algo como:

WHERE (Tabla3.Campo1 =" & ActiveSheet.Range("G1") & ")"

en vez de:

WHERE (Tabla3.Campo1 ='" & ActiveSheet.Range("G1") & "')"

Un saludo.


Fernando Arroyo
MS MVP - Excel


Respuesta Responder a este mensaje
#9 Juanjo
14/08/2003 - 15:14 | Informe spam
Hola Fernando,

lo de la fecha, lo he arreglado de la siguiente manera porque de la forma
que tú me dijistes solo me funcionaba en una bd de acces.

Ahora me ha surgido un nuevo problema:
Tengo este código ( tengo más, pero este es el importante, creo ) y se trata
de en una hoja ( "Cuadro") le pongo una fecha y en otra hoja ( "SemRC")
ejecuto las consultas, pero al tener dos consultas, ( según leí por uno de
los mensajes ) especifico en QueryTables(1 o 2 ) según la consulta que
quiera hacer referencia.
El problema es que la primera vez que lo ejecuto funciona correctamente,
pero al guardar el documento, salir y volver a entrar, se me ejecuta
correctamente pero se me cambia el orden de los resultados, es decir, me
pasa la segunda consulta arriba y la primera abajo. Significa un grande
problema porque tengo datos relacionados en otras hojas.

No se si me explico, pero gracias.
Juanjo



Dim qtQ As QueryTable
Dim strSQL As String
Dim fecha_inicio As String

fecha_inicio = Format(Worksheets("Cuadro").Range("C18"), "yyyy-mm-dd")

Set qtQ = Worksheets("SemRC").QueryTables(1)

strSQL = "SELECT * FROM incidencias incidencias "
strSQL = strSQL + "WHERE f_comprobacion >= {d '" + fecha_inicio + "'}"

qtQ.CommandText = strSQL
qtQ.Refresh
Set qtQ = Nothing


Set qtQ = Worksheets("SemRC").QueryTables(2)

strSQL = "SELECT * FROM incidencias incidencias "
strSQL = strSQL + " WHERE tipo_incidencia='TI00000001' "

qtQ.CommandText = strSQL
qtQ.Refresh
Set qtQ = Nothing
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida