Access-Visual Basic: Problema al definir una variable Fecha

Que seguro que es fácil de resolver, a ver si podéis ayudarme...

He creado un código para tomar el valor de una fecha establecida en un formulario, con ese valor creo, como criterio, una consulta.

El problema es que si la fecha es 05/08/2017, la fecha que poner en el criterio de la consulta es 08/05/2017, es decir, intercambia el día con el mes, y el resultado no es el mismo.

¿Cómo debe definir la variable Date para evitarlo?

Por si lo necesitáis, pongo el código:

Dim Entradas_Stock As QueryDef
Dim Salidas_Stock As QueryDef
Dim Base_Actual As Database
Dim Var_Año_Albaran As String
Dim Var_Serie_Albaran As String
Dim Var_Id_Albaran As Long
Dim MiFecha As Date
Dim MiAño As Integer
Dim MiSerie As String
MiFecha = Forms![Formulario Control Stock]![Subformulario Traspaso_Almacenes].Form![Fecha]
MiAño = Year(MiFecha)
MiSerie = Forms![Formulario Control Stock]![Subformulario Traspaso_Almacenes].Form![Serie_Albaran]
Forms![Formulario Control Stock]![Subformulario Traspaso_Almacenes].Form![Año] = MiAño
N_Albaran = Nz(DMax("Id_Albaran", "Albaranes_Compras", "[Año] = '" & MiAño & "' And (Albaranes_Compras.Serie_Albaran) = '" & MiSerie & "'"), 0) + 1
Forms![Formulario Control Stock]![Subformulario Traspaso_Almacenes].Form![Id_Albaran] = N_Albaran
If Me![Tipo_Albaran] = "Inventario" Then
Fecha_Ultimo_Inventario = DMax("Fecha", "Albaranes_compras", "(Albaranes_Compras.Serie_Albaran) = '" & MiSerie & "'")
If IsNull(Fecha_Ultimo_Inventario) Then
    Fecha_Ultimo_Inventario = #1/1/2016#
Else
End If
Fecha_Actual = Forms![Formulario Control Stock]![Subformulario Traspaso_Almacenes].Form![Fecha]
Var_Año_Albaran = Forms![Formulario Control Stock]![Subformulario Traspaso_Almacenes].Form![Año]
Var_Serie_Albaran = Forms![Formulario Control Stock]![Subformulario Traspaso_Almacenes].Form![Serie_Albaran]
Var_Id_Albaran = Forms![Formulario Control Stock]![Subformulario Traspaso_Almacenes].Form![Id_Albaran]
    Dim Respuesta As String
    Respuesta = MsgBox("¿Deseas añadir los artículos con stock actual?", 36, "Atención")
    If Respuesta = vbYes Then
        With Base_Actual
        Set Salidas_Stock = .CreateQueryDef("Stock_Salidas", "SELECT Articulos_Venta.[Referencia Articulo], Sum(Articulos_Venta.Cantidad) AS SumaDeCantidad FROM Albaranes_Ventas LEFT JOIN Articulos_Venta ON (Albaranes_Ventas.Año = Articulos_Venta.[Año Albaran]) AND (Albaranes_Ventas.Serie_Albaran = Articulos_Venta.SerieAlbaran) AND (Albaranes_Ventas.Id_Albaran = Articulos_Venta.NumeroAlbaran) WHERE (((Albaranes_Ventas.Fecha) Between #" & Fecha_Ultimo_Inventario & "# And #" & Fecha_Actual & "#)) GROUP BY Articulos_Venta.[Referencia Articulo] ORDER BY Articulos_Venta.[Referencia Articulo], Sum(Articulos_Venta.Cantidad);")
        Set Entradas_Stock = .CreateQueryDef("Stock_Entradas", "SELECT Articulos_Compra.[Referencia Articulo], Sum(Articulos_Compra.Cantidad) AS SumaDeCantidad FROM Albaranes_Compras LEFT JOIN Articulos_Compra ON (Albaranes_Compras.Año = Articulos_Compra.[Año Albaran]) AND (Albaranes_Compras.Serie_Albaran = Articulos_Compra.SerieAlbaran) AND (Albaranes_Compras.Id_Albaran = Articulos_Compra.NumeroAlbaran) WHERE (((Albaranes_Compras.Fecha) Between #" & Fecha_Ultimo_Inventario & "# And #" & Fecha_Actual & "#)) GROUP BY Articulos_Compra.[Referencia Articulo];")
        End With
        DoCmd.SetWarnings False 'Desactiva el mensaje de ACCESS de que se van a agregar registros
        DoCmd.RunSQL "INSERT INTO Articulos_Compra ( [Referencia Articulo], Cantidad, [Precio Compra], [Total Articulo], [Año Albaran], SerieAlbaran, NumeroAlbaran ) SELECT Articulos.Referencia, Nz([Stock_Entradas].[SumaDeCantidad])-Nz([Stock_Salidas].[SumaDeCantidad]) AS Stock, Nz([Precio_Ultima_Compra]) AS Precio_Compra, Round([Stock]*[Precio_Ultima_Compra],2) AS Total, '" & Var_Año_Albaran & "' AS Año, '" & Var_Serie_Albaran & "' AS Serie, " & Var_Id_Albaran & " AS Albaran FROM (Articulos LEFT JOIN [Stock_Entradas] ON Articulos.Referencia = [Stock_Entradas].[Referencia Articulo]) LEFT JOIN [Stock_Salidas] ON Articulos.Referencia = [Stock_Salidas].[Referencia Articulo] ORDER BY Articulos.[Codigo Familia], Articulos.[Codigo Subfamilia];"
        DoCmd.SetWarnings True  'Vuelve a activar los mensajes
        Me![Subformulario_Articulos_Traspaso].Form.Recalc
    Else
    End If
Else
End If

Supongo que el problema está en la definición de la variable, o en la configuración del PC.

Respuesta
3

Pues no, el problema no está dónde piensas (la variable está bien definida, y la configuración del PC supongo que será la correcta: fecha en formato europeo).

El error lo tienes en la construcción de la SQL, que como todo lenguaje de programación solo "entiende" el inglés americano, y tienes que darle ese formato a la fecha para que al ejecutar la SQL no se haga "la picha un lío".

Resumiendo:

 ... Between #" & Format(Fecha_Ultimo_Inventario,"mm/dd/yyyy") & "# And #" ...

y así en cada sitio de las SQLs en que trabajes con un valor de fecha.

Un saludo.


1 respuesta más de otro experto

Respuesta
1

El formato correcto es: "mm/dd/yyyy hh:nn:ss"

Por ejemplo:

Fomat(Now(),"mm/dd/yyyy hh:nn:ss")

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas