Consulta SQL con Visual Basic en Access

Estoy aprendiendo a usar Access, años que no uso SQL y muy poca experiencia en VB y tengo esta duda que probablemente ya estoy bloqueado o me falta teoría por reafirmar.

Quiero hacer una consulta a mi base desde visual basic pero este me manda el siguiente error:

"la accion ejecutar sql requiere como argumento una instrucción sql"

Esta es la función que estoy utilizando;

------------------------------------------------

Function contarDiasLibres(vFechadeEntrega As Double, VFechaFinal1 As Double) As Integer

Dim strSQL As String, vFechaEntrega As Double, vFechaFinal As Double
vFechaEntrega = Format(vFechadeEntrega, "YYYYMMDD")
vFechaFinal = Format(vFechaFinal, "YYYYMMDD")
strSQL = "SELECT DiasLibres.FechaLibre FROM DiasLibres WHERE (((DiasLibres.FechaLibre) Between"
strSQL = strSQL + " " & vFechaEntrega
strSQL = strSQL + " And " & vFechaFinal
strSQL = strSQL + "))"

DoCmd.RunSQL strSQL
End Function

--------------------------------------------------------------------

Respuesta
1

[Hola

No he revisado la funcionabilidad de tu función pero, yendo al punto del error que mencionas, mira, tu cadena queda algo así:

"SELECT DiasLibres.FechaLibre FROM DiasLibres WHERE (((DiasLibres.FechaLibre) Between " & vFechaEntrega " And " & vFechaFinal "))"

No tiene mucho sentido, es más, está mal "construida". Deberías tener algo así:

"SELECT DiasLibres.FechaLibre FROM DiasLibres WHERE DiasLibres.FechaLibre Between #" & vFechaEntrega "# And #" & vFechaFinal & "#"

Otra cosa, asumiendo que en el Access las fechas son del tipo "Fecha", deberías declarar las variables, en la función, más que como tipo "Double", como tipo "date" y usar los "Format" así:

vFechaEntrega = Format(vFechadeEntrega, "mm/dd/yyyy")
VFechaFinal = Format(vFechaFinal, "mm/dd/yyyy")

Tampoco es necesario volver a declarar las variables con el "Dim" (las de las fechas).

Saludos]

Abraham Valencia

2 respuestas más de otros expertos

Respuesta
3

Como mencionaste Icue con docmd. Runsql es necesario realizar una acción como actualizar o borrar.

Así quedo mi código para poder hacer la consulta que quería les agradezco mucho su tiempo y ayuda.

Function contarDiasLibres(vFechadeEntrega As Date, VFechaFinal As Date) As Integer
Dim strSQL As String

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim intResult As Integer
vFechaEntrega = Format(vFechadeEntrega, "mm/dd/yyyy")
VFechaFinal = Format(VFechaFinal, "mm/dd/yyyy")
Set db = CurrentDb
strSQL = "SELECT COUNT (FechaLibre) As RecordCount FROM DiasLibres WHERE DiasLibres.FechaLibre Between #" & vFechaEntrega
strSQL = strSQL + "# And #" & VFechaFinal
strSQL = strSQL + "#"
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
contarDiasLibres = rs("RecordCount")

Rs. Close
Db. Close
End Function

Respuesta
3

Abundando en lo que te dice Abraham, que es lo correcto, declaras Fechaentrega como double y pregunto ¿para qué quieres definir un valor con decimales? Lo lógico sería definirlo como integer o Long

Por otro lado, defines la variable FechaEntrega como double, pero más abajo le dices

fechaentrega=format(.....

Eso es texto, no numérico

Y por último, lo que te dice el mensaje es normal, fíjate bien en que no le estás diciendo que haga nada. En todo caso tienes que ponerle algo, por ejemplo

docmd.runsql"Insert into tablaquesea select....

o

Docmd.runsql"update tablaquesea...

Es que no quiero actualizar, solo quiero hacer una consulta con el parámetro between con unas variables que recibe la función y contar el número de registros que regresa esta consulta.

Y use los datos como Double, ya que las funciones DateDiff y DateAdd usan la fecha como doble.

¿Datediff y dateadd usan la fecha como doble? Creo que estás confundido. Ningún ordenador del mundo trabaja con fechas, trabaja con números enteros correspondiente a los días. Al día 01/01/1900 se le asignó el 1, al 02/01/1900 se le asignó el 2, hasta hoy que estamos en el 43217. Por tanto, cuando en datediff o dateadd, le sumas algo, ya sea días, meses, años, le sumas números enteros. Lo que si trabaja con formato single son las horas y minutos que son decimales de un días, o sea una hora es aprox 0,042 de día. Por ejemplo, a esta hora en que escribo, las 22:30, realmente para el ordenados estamos en 43217,9384

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas