Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: e500 en 31 Julio 2010, 05:21 am



Título: ADODB y ACCESS [Filtrar] [SOLUCIONADO]
Publicado por: e500 en 31 Julio 2010, 05:21 am
Hola amigos, tengo una duda sobre como filtrar mi debe por medio de un rango de fechas, ejemplo:

Código
  1.  
  2. fi = Format(fi, "dd/mm/yyyy")
  3. ft = Format(ft, "dd/mm/yyyy")
  4. Busca = "Select * from Ventas where FEntrega between #" & fi & "# and #" & ft & "#"
  5.  

Hasta ahi he llegado pero no logro realizar la consulta a la DB, espero q me puedan ayudar.

Saludos


Título: Re: ADODB [Filtrar]
Publicado por: seba123neo en 31 Julio 2010, 07:16 am
crea un recordset y pasale la conexion a la base de datos para que te haga la consulta...¿tenes algo hecho del programa o recien empezas?


Título: Re: ADODB [Filtrar]
Publicado por: e500 en 31 Julio 2010, 07:44 am
Hola seba, si tengo todo echo el programa, y es un monton. estuve con xkiz
 y BlackZerox luchando pero no tuve resultados.

Llegamos hasta aqui:

Código
  1. Public Sub rangoF(fecinicio As String, fectermino As String)
  2. Dim fi, ft As Date
  3.  
  4. fi = Format(fecinicio, "dd/mm/yyyy")        ': MsgBox fi
  5. ft = Format(fectermino, "dd/mm/yyyy")       ': MsgBox ft
  6.  
  7. SQL = "SELECT * FROM Ventas WHERE FEntrega=" & fi & " And FEntrega =" & ft
  8. rsFiltro.Open SQL, cnn, adOpenDynamic, adLockOptimistic
  9.  
  10. End Sub
  11.  

Pero el RecorderSet rsFiltro prece vacio. porque al cargarlo en mi ListView no devuelve valores.

Este Modulo estoy usando para cargar datos y conectarme a la DB

Código
  1. Option Explicit
  2.  
  3. Public Declare Sub InitCommonControls Lib "comctl32" ()
  4.  
  5. ' variables para la conexión y el recordset
  6. ''''''''''''''''''''''''''''''''''''''''''''
  7. Public cnn          As New ADODB.Connection
  8. Public rsVentas     As New ADODB.Recordset
  9. Public rsFiltro     As New ADODB.Recordset      'variable que almacena las fechas filtradas
  10.  
  11. Public ObjItem As ListItem
  12.  
  13. ' Conecta con la DB
  14. Public Sub IniciarConexion()
  15.  
  16.       With cnn
  17.           .CursorLocation = adUseClient
  18.           .Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
  19.                            App.Path & "\LBDATA.mdb" & ";Persist Security Info=False;Jet OLEDB:Database Password=" & "pass123"
  20.       End With
  21.  
  22. End Sub
  23.  
  24. ' Carga las tablas
  25. Public Sub IniciarTablas()
  26.  
  27.      Set rsVentas = New ADODB.Recordset
  28.      rsVentas.CursorLocation = adUseClient
  29.      rsVentas.Open "select * from Ventas", cnn, adOpenStatic, adLockOptimistic
  30.  
  31.      Set rsFiltro = New ADODB.Recordset
  32.      'rsFiltro.CursorLocation = adUseClient
  33.      'rsFiltro.Open "select * from Ventas", cnn, adOpenStatic, adLockOptimistic
  34.  
  35. End Sub
  36.  
  37. Public Sub rangoF(fecinicio As String, fectermino As String)
  38. Dim fi, ft As Date
  39.  
  40. fi = Format(fecinicio, "dd/mm/yyyy")        ': MsgBox fi
  41. ft = Format(fectermino, "dd/mm/yyyy")       ': MsgBox ft
  42.  
  43. SQL = "SELECT * FROM Ventas WHERE FEntrega=" & fi & " And FEntrega =" & ft
  44. rsFiltro.Open SQL, cnn, adOpenDynamic, adLockOptimistic
  45.  
  46. End Sub
  47.  
  48. Public Sub CargarListViewV(LV As ListView, rs As ADODB.Recordset)
  49.  
  50.  Dim i As Integer
  51.  
  52.        'limpia el LV
  53.       LV.ListItems.Clear
  54.  
  55.        ' si hay registros
  56.       If rs.RecordCount > 0 Then
  57.  
  58.            ' recorre el recordset
  59.           While Not rs.EOF
  60.                ' añade los datos
  61.               Set ObjItem = LV.ListItems.Add(, , rs(0))
  62.  
  63.              'ObjItem.SubItems(0) = rs!Codigo
  64.              'ObjItem.SubItems(1) = rs!ClienteID
  65.              ObjItem.SubItems(1) = rs!Producto
  66.              ObjItem.SubItems(2) = rs!fpedido
  67.              ObjItem.SubItems(3) = rs!fentrega
  68.              ObjItem.SubItems(4) = rs!MPago
  69.              ObjItem.SubItems(5) = rs!Ncheque
  70.              ObjItem.SubItems(6) = rs!MTotal
  71.              ObjItem.SubItems(7) = rs!MPagado
  72.              ObjItem.SubItems(8) = rs!Chofer
  73.              ObjItem.SubItems(9) = rs!Finalizada
  74.              ObjItem.SubItems(10) = rs!Entregada
  75.              ObjItem.SubItems(11) = rs!ClienteID
  76.              ObjItem.SubItems(12) = rs!FechaID
  77.              ObjItem.SubItems(13) = rs(0)
  78.              ObjItem.SubItems(14) = rs!Dia
  79.              ObjItem.SubItems(15) = rs!Mes
  80.              ObjItem.SubItems(16) = rs!Año
  81.              ObjItem.SubItems(17) = rs!IDPago
  82.              ObjItem.SubItems(18) = rs!Observacion
  83.               ' siguiente registro
  84.              rs.MoveNext
  85.           Wend
  86.  
  87. End Sub
  88.  
  89.  
  90.  

Y cargo los datos en el ListView asi:

Código
  1. Call CargarListViewV(FrmVentas.LV, rsFiltro)
  2.  

Espero que puedas ayudarme, Saludos


Título: Re: ADODB [Filtrar]
Publicado por: e500 en 31 Julio 2010, 08:32 am
Solucionado, me autorespondo.

Código
  1. Public Sub rangoF(fecinicio As String, fectermino As String)
  2. Dim fi, ft As Date
  3.  
  4. fi = Format(fecinicio, "dd/mm/yyyy")        ': MsgBox fi
  5. ft = Format(fectermino, "dd/mm/yyyy")       ': MsgBox ft
  6.  
  7.       If rsFiltro.State = adStateOpen Then
  8.           rsFiltro.Close
  9.       End If
  10.  
  11.       SQL = "SELECT * FROM Ventas WHERE FEntrega >= '" & fi & "' And FEntrega <= '" & ft & "'"
  12.  
  13.       rsFiltro.Open SQL, cnn, adOpenStatic, adLockOptimistic
  14.  
  15. End Sub
  16.  

Gracias a todos por su ayuda,

Salu2