consulta entre dos fechas en tabla access desde excel

Solo consultas sobre Bases de Datos y Tablas Dinámicas Excel.
Reglas del Foro 1. Antes de hacer tu pregunta intenta con el buscador de este foro (muchas preguntas ya fueron respondidas antes!)
2. Si haces una nueva pregunta, es muy recomendable que adjuntes el ejemplo Excel para poder comprenderla mejor!
3. Realiza tu pregunta de forma clara, explicando bien cada paso de lo que haces y tendrás más probabilidad de respuesta!

consulta entre dos fechas en tabla access desde excel

Notapor Genar » 24 Sep 2018 14:34

Hola y buenos días a todos,

Explico el problema que tengo, estoy realizando un aplicativo en Excel y base de datos en Access todo funciona como se espera pero al querer hacer una consulta con respecto a las ventas del mes o como sea en un intervalo entre dos fechas a veces funciona y a veces no, yo creo que el problema esta cuando se consulta fechas que vba las considera ambiguas y cambia el formato "dd/mm/yyyy" por "mm/dd/yyyy" , por ejemplo, si realizo una consulta entre las fechas 01/09/2018 al 30/09/2018 me devuelve todas la ventas realizadas entre el primero y el treinta de setiembre, pero si en cambio la consulta es entre el 10/09/2018 y el 30/09/2018 no devuelve nada, al igual que si la fecha inicial fuera 11/09/2018 y 12/09/2018 tampoco devuelve nada en esos casos, por favor solicito ayuda para poder solventar este problema que se me presento, gracias de ante mano, el código que utilizo esta asociado a un botón para realizar la búsqueda y es el siguiente:

Sub btnBuscar_Click()

Dim cn As ADODB.Connection
Dim datos As Object
Dim consultaSQL As String
Dim Cont As Integer
Dim TipoDoc As String
Dim Fecha1 As Date
Dim Fecha2 As Date

Fecha1 = Format(CDate(Me.txtFecha1.Value), "mm/dd/yyyy")
Fecha2 = Format(CDate(Me.txtFecha2.Value), "mm/dd/yyyy")

Set cn = New ADODB.Connection
With cn
.Provider = "microsoft.ace.oledb.16.0"
.ConnectionString = "Data Source=" & ThisWorkbook.Path & "\SistemaDeVentas.accdb;Jet OLEDB:Database Password=123456789"
.Open
End With

consultaSQL = "SELECT FacturasV.IdDocumento, " & "FacturasV.FechaFactura, " & "FacturasV.SerieFactura, " & "FacturasV.NumeroFactura, " & "FacturasV.RucCliente, " & "Clientes.NombreCliente, " & "FacturasV.OperacionGravada, " & "FacturasV.OperacionExonerada, " & "FacturasV.SubTotalFactura, " & "FacturasV.IgvFactura, " & "FacturasV.TotalFactura " & _
"FROM Clientes " & "INNER JOIN FacturasV " & " ON Clientes.RucCliente = FacturasV.RucCliente " & _
"WHERE (((FacturasV.FechaFactura) between " & "#" & Fecha1 & "#" & " And " & "#" & Fecha2 & "#" & ")) " & _
"ORDER BY FacturasV.FechaFactura;"
Set datos = cn.Execute(consultaSQL)

Cont = 1

Do While Not datos.EOF
If datos.Fields(1) >= Fecha1 And datos.Fields(1) <= Fecha2 Then
Me.libReporteVenta.AddItem Format(Cont, "#000")
If datos.Fields(2) Like "F*" Then
TipoDoc = "FAC"
ElseIf datos.Fields(2) Like "B*" Then
TipoDoc = "BOL"
End If
Me.libReporteVenta.List(Me.libReporteVenta.ListCount - 1, 1) = datos.Fields(1).Value
Me.libReporteVenta.List(Me.libReporteVenta.ListCount - 1, 2) = TipoDoc & " " & datos.Fields(2).Value & "-" & Format(datos.Fields(3).Value, "#00000000")
Me.libReporteVenta.List(Me.libReporteVenta.ListCount - 1, 3) = datos.Fields(4).Value
Me.libReporteVenta.List(Me.libReporteVenta.ListCount - 1, 4) = datos.Fields(5).Value
Me.libReporteVenta.List(Me.libReporteVenta.ListCount - 1, 5) = Space(14 - 2 * Len(Format(datos.Fields(6).Value, "##0.#0"))) & Format(datos.Fields(6).Value, "##0.#0")
Me.libReporteVenta.List(Me.libReporteVenta.ListCount - 1, 6) = Space(14 - 2 * Len(Format(datos.Fields(7).Value, "##0.#0"))) & Format(datos.Fields(7).Value, "##0.#0")
Me.libReporteVenta.List(Me.libReporteVenta.ListCount - 1, 7) = Space(14 - 2 * Len(Format(datos.Fields(8).Value, "##0.#0"))) & Format(datos.Fields(8).Value, "##0.#0")
Me.libReporteVenta.List(Me.libReporteVenta.ListCount - 1, 8 ) = Space(16 - 2 * Len(Format(datos.Fields(9).Value, "##0.#0"))) & Format(datos.Fields(9).Value, "##0.#0")
Me.libReporteVenta.List(Me.libReporteVenta.ListCount - 1, 9) = Space(16 - 2 * Len(Format(datos.Fields(10).Value, "##0.#0"))) & Format(datos.Fields(10).Value, "##0.#0")
Cont = Cont + 1
datos.MoveNext
Else
datos.MoveNext
End If
Loop

If datos.State = 1 Then
datos.Close
Set datos = Nothing
End If
If cn.State = 1 Then
cn.Close
Set cn = Nothing
End If

End Sub
Genar
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 6
Registrado: 01 May 2018 04:27

Re: consulta entre dos fechas en tabla access desde excel

Notapor Cacho R » 24 Sep 2018 15:06

.
Hola! Genar
Te diría que comiences por "quedarte tranquilo" en el sentido que tu consulta Sql te esté devolviendo la info que esperas. Para ello y después de:

Código: Seleccionar todo
Set datos = cn.Execute(consultaSQL)

pon esto otro:

Código: Seleccionar todo
Workbooks.Add.Sheets(1).Range("a1").CopyFromRecordset datos
End

Estudia cuidadosamente las fechas y llega a alguna conclusión...

Saludos, Cacho R.
.
Avatar de Usuario
Cacho R
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 10481
Registrado: 23 Jun 2011 17:15
Ubicación: Buenos Aires

Re: consulta entre dos fechas en tabla access desde excel

Notapor Genar » 24 Sep 2018 16:53

Hola Cacho, muchas gracias por tu respuesta, realice las pruebas según lo que indicaste, en realidad me sorprendió por que todas las veces y con cualquier fecha los datos de la base de datos se traían al nuevo libro apenas creado, solo pude observar que todas las fechas estaban expresadas en números en formato general y al seleccionarlos y cambiar su formato a fecha corta expresaban la fecha que correspondía a la base de datos.

Ahora bien, veo que la consulta extrae los datos solicitados pero no entiendo por que no los carga el el listbox, almenos no siempre, por favor ayudame a encontrar una solución, la verdad es que le di tantas vueltas a esto que ya no tengo mas ideas para solventar este problema, gracias.
Genar
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 6
Registrado: 01 May 2018 04:27

Re: consulta entre dos fechas en tabla access desde excel

Notapor Genar » 24 Sep 2018 17:11

Cacho, otra vez te agradezco por tu ayuda, me hizo dar cuenta del error que cometía, la consulta sql ya esta filtrando las fechas y sin embargo puse nuevamente el mismo filtro en un if (If datos.Fields(1) >= Fecha1 And datos.Fields(1) <= Fecha2 Then) al momento de llenar el listbox con el recordset, lo que hice es simplemente quitar el if y empezar a llenar el listbox con los datos del recordset y funciona perfectamente, gracias.
Genar
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 6
Registrado: 01 May 2018 04:27

Re: consulta entre dos fechas en tabla access desde excel

Notapor Cacho R » 24 Sep 2018 21:58

.
¡Claro!... pues ese If:

- Si hubiese estado bien hecho te hubiese sido indiferente (ya que el recordset está correcto).
- Pero como está mal "armado" (ese If) entonces te distorsionaba el resultado final.

Saludos, Cacho R.
.
Avatar de Usuario
Cacho R
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 10481
Registrado: 23 Jun 2011 17:15
Ubicación: Buenos Aires


Volver a Bases de Datos y Tablas Dinámicas

¿Quién está conectado?

Usuarios navegando por este Foro: wiljaiver y 3 invitados