Access - Error en consulta por fecha Access VBA

 
Vista:
sin imagen de perfil

Error en consulta por fecha Access VBA

Publicado por Luis (32 intervenciones) el 07/02/2024 21:51:59
Buenas tardes, tengo una tabla con el fin de actualizar la tasa del dolar según el banco ver adjunto tabla:

tabla


Aqui esta con algunos datos de ejemplo ver adjunto tabla-con-datos:

tabla-con-datos

Tengo un formulario donde puedo llenar esta tabla ver adjunto form:

form

Mi problema es que si quiero realizar una búsqueda de la tasa que se agrego un día especifico no me trae el resultado, aquí muestro el código:

Private Sub cmb_Buscar_Click()
Dim rst As DAO.Recordset, SQL As String
Dim v As Variant
If IsNull(Me.txtFecha) Or Me.txtFecha = "" Then
MsgBox "DEBE COLOCAR LA FECHA PARA REALIZAR LA BUSUQEDA", vbCritical, "AVISO"
Me.txtFecha.SetFocus
Exit Sub
Else
If DLookup("[Fecha]", "[Tasa_BCV]", "[Fecha] = #" & Format(Me.txtFecha, "dd/mm/yyyy") & "#") Then
SQL = "SELECT * " _
& "FROM Tasa_BCV " _
& "WHERE Fecha =#" & Me.txtFecha & "#"
Set rst = CurrentDb.OpenRecordset(SQL, dbOpenForwardOnly)
With rst
Me.txtID = !Id
Me.txtFecha = !Fecha
Me.txtTasa = !Tasa
End With
Else
MsgBox "NO EXISTE TASA PARA ESA FECHA", vbCritical, "AVISO"
Me.txtFecha = ""
End If
End If
End Sub

Lo que quiero es colocar una fecha en el campo texto Fecha y al presionar el botón de buscar realice una búsqueda en la tabla de la fecha y me muestre la tasa de ese día, agradezco la ayuda que me puedan brindar.
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

Error en consulta por fecha Access VBA

Publicado por Anonimo (3316 intervenciones) el 08/02/2024 10:33:19
El error se produce por forzar a europeo el formato de fecha.

Internamente Access interpreta las fechas en formato americano (mes-dia-año) y la capa de abstracción (el formato regional de Windows) las muestra en el formato local de Windows (no es 'cosa de Access').

Normalmente es transparente el proceso en ambos sentidos, pero cuando se le tiene que dar un parámetro de fecha y se le aplica formato, el formato ha de ser el que Access utiliza de forma interna y no el formato local, cabe la alternativa de dejar que sea Access quien lo interprete (arriesgándose a obtener falsos resultados si el día no supera el numero doce, dado que puede intercambiar mes y día)

Lo seguro cuando las fechas no están en un campo de tipo Fecha/hora (están en un cuadro de texto con formato, pero es simple texto) es utilizar la función CDate que convierte/interpreta el formato local a formato adecuado para Access que en esencia no es texto: es un número.

Una vez conocido el responsable del problema, la solución mas simple esta aquí:

Antes:
1
2
3
....
If DLookup("[Fecha]", "[Tasa_BCV]", "[Fecha] = #" & Format(Me.txtFecha, "dd/mm/yyyy") & "#") Then
....
Despues:
...
1
2
If DLookup("[Fecha]", "[Tasa_BCV]", "[Fecha] = #" & Format(Me.txtFecha, "mm/dd/yyyy") & "#") Then
...

Una fecha correctamente convertida en la que el formato no importa:

Desde un cuadro de texto independiente (que tenga formato de fecha es inconsistente)
1
CDbl(CDate([el cuadro de texto]))

CDate interpreta el formato, CDbl lo convierte a numero decimal (parte entera = días, parte decimal = horas)

Desde un cuadro de texto basado en un dato de tipo fecha/hora
1
CDbl([el cuadro de texto])

CDbl lo convierte a numero decimal (parte entera = días, parte decimal = horas)
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

Error en consulta por fecha Access VBA

Publicado por Luis Castro (32 intervenciones) el 08/02/2024 13:15:00
Gracias por la consulta pero no entendi mucho, hice lo que me dijo y no me funciona, cabe destacar que el campo fecha de la tabla es de tipo fecha/hora y el textbox del formulario tambien es tipo fecha.
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

Error en consulta por fecha Access VBA

Publicado por Anonimo (3316 intervenciones) el 08/02/2024 21:11:15
Si el cuadro de texto en el formulario es independiente (no depende del origen de datos del formulario y es de tipo fecha) ponerle formato no convierte en dato de tipo Fecha/Hora.

Si el dato en cuestión necesita un tratamiento, se le debe de aplicar en todas las partes en las que se le utilice y en ese sub (en la SQL) hay una linea mas que lo utiliza:
1
& "WHERE Fecha =#" & Me.txtFecha & "#"

Intentalo asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub cmb_Buscar_Click()
'Dimensionamos las variables
Dim rst As DAO.Recordset, SQL As String
'Verificamos que sea una fecha valida
If Not IsDate(Me.txtfecha) Then MsgBox "DEBE COLOCAR LA FECHA PARA REALIZAR LA BUSUQEDA", vbCritical, "AVISO": Me.txtfecha.SetFocus: Exit Sub
'Verificamos que existe en la tabla
If DCount("*", "[Tasa_BCV]", "[Fecha] = #" & Format(Me.txtfecha, "mm/dd/yyyy") & "#") Then MsgBox "NO EXISTE TASA PARA ESA FECHA", vbCritical, "AVISO": Me.txtfecha = "": Exit Sub
'En este punto hay fecha valida y existe en la tabla, mostramos los datos
SQL = "SELECT * FROM Tasa_BCV WHERE Fecha =#" & Format(Me.txtfecha, "mm/dd/yyyy") & "#"
Set rst = CurrentDb.OpenRecordset(SQL, dbOpenForwardOnly)
With rst
Me.txtID = !Id
Me.txtfecha = !Fecha
Me.txtTasa = !Tasa
End With
rst.Close
Set rst = Nothing
End Sub
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

Error en consulta por fecha Access VBA

Publicado por Luis Castro (32 intervenciones) el 08/02/2024 21:15:26
Excelente, de mucha ayuda, Gracias
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

Error en consulta por fecha Access VBA

Publicado por Anonimo (3316 intervenciones) el 08/02/2024 23:02:10
Una acotación al código recién publicado:

En la función DCount hay que compararla con cero para que de un TRUE.
De la forma actual si no hay datos devolverá un FALSE y si los hay un TRUE

(que es lo contrario de lo que se pretende: salir si no encuentra datos pues devolveáa un cero que equivale a FALSE).

La línea siete quedará así:

1
If DCount("*", "[Tasa_BCV]", "[Fecha] = #" & Format(Me.txtfecha, "mm/dd/yyyy") & "#") = 0 Then MsgBox "NO EXISTE TASA PARA ESA FECHA", vbCritical, "AVISO": Me.txtfecha = "": Exit Sub
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

Error en consulta por fecha Access VBA

Publicado por Eduardo Pérez Fernández (317 intervenciones) el 09/02/2024 15:14:21
Siga como lo explique en el correo enviado. Espero su base de datos
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