Visual Basic Foro
Programación => Bases de Datos => Mensaje iniciado por: pedroesca en Junio 21, 2011, 11:21:42 pm
-
Buenas tardes a todos, quisiera consultar si alguien podría orientarme respecto a como puedo traer determinados registros (de una BD obviamente), en los cuales la fecha (campo) sea las de la "semana actual". Por ejemplo: deseo mostrar todas las VENTAS de la semana en curso.
Desde ya muchas gracias.
-
a traves de las funciones de fecha podes obtener lo que queres, por ejemplo:
Private Sub Form_Load()
MsgBox DateAdd("D", Weekday(Date, vbMonday) * (-1) + 1, Date)
End Sub
eso te devuelve la primera fecha de la semana actual.
-
Sebaneo, yo creo que el se basa mas en SQL que en VB, de no ser asi funciona tal como lo indicaste... (Saludos bro)
Pedro, las consultas depende del formato que uses en tu SQL Server si tu campo evidentemente es datetime... Para ello te recomiendo que visualices este link.. (http://www.helpdna.net/sqlserver_faq_05_fechas_horas.htm)
-
Yo ago asi pedroesca, busco segun la fecha y lo listo en un control ListView, Ahora lo que vos tenes hacer es adaptar a tu conexión.
Private Sub Buscar_Click()
Me.MousePointer = 11
'+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
'// Conectar la Base Datos con ADO
Call ConectarADO
'+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
LReportes.ListItems.Clear
F1 = Format(txtFecha1.Value, "yyyy/MM/dd")
F2 = Format(txtFecha2.Value, "yyyy/MM/dd")
StrSQL = "SELECT * FROM cuotas WHERE fpago BETWEEN '" & F1 & "' AND '" & F2 & "' AND forma='PG'"
rsADO.Open StrSQL, cnADO, adOpenStatic, adLockOptimistic, adCmdText
Do Until rsADO.EOF
Set LV = LReportes.ListItems.Add()
With rsADO
LV.Text = .Fields("cedula")
LV.SubItems(1) = strReplaceVer(.Fields("nombre") & "")
LV.SubItems(2) = strReplaceVer(.Fields("fpago") & "")
LV.SubItems(3) = Format(.Fields("cuota"), "##,###0") & ""
LV.SubItems(4) = Format(.Fields("morozo"), "##,###0") & ""
rsADO.MoveNext
End With
Loop
'+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
'// Cerrar la base de datos y liberar la memoria
Call CerrarADO
'+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
Me.MousePointer = 0
End Sub
Cualquier duda avisa
-
Enter, como haces si el formato fecha en SQL es el 103??? dd/mm/yyyy hh:mm:ss,
ya que para aplicar tu ejemplo el deberia hacer un Convert y alli ejecutar el select tal como lo expones...!
-
como haces si el formato fecha en SQL es el 103??? no entiendo que es ese 103.
En MySQL siempre la fecha te guarda en formato Año,Mes,Dia. y lo que hice ahi es pasar le asi a la consulta.
-
Eso es cuando el campo es date, pero si es datetime (no se como se llamara en MySQL) alli en todo caso y para todos los casos se podria hacer esto:
F1 = Format(txtFecha1.Value, "YYYY/MM/DD") '<--- Asume desde el 00:00:00
F2 = Format(txtFecha2.Value, "YYYY/MM/DD 23:59:59")
Igual uso F1 y F2 como string y en el formato YYYY/MM/DD, y lo mando asi como Enterariel cuando se que los campo son Date y no Datetime
-
La verdad nunca use campo time juntos siempre los separo por columna la fecha en una columna y time en otra columna creo que es mas como trabajar asi.
-
Si pero en SQL es diferente..! Vean el link que le recomende...!
-
Muchas gracias a todos por la buena onda y predisposición a compartir conocimientos, ya que tenía el prejuicio de que los programadores (o por lo menos los que conozco personalmente, y que son muy pocos) son muy reacios a responder consultas o brindar asistencia desinteresada. En fin, vamos a los bifes:
En mi sistema poseo un módulo de RECORDATORIOS/Tareas/etc, con lo cual cada determinado intervalo de tiempo, "actualizo" el panel de visualización de los mismos de la siguiente forma, aunque lo voy a poner de forma resumida:
''1° consulto todos
SQL="SELECT * From RECORDATORIOS Where Activo=SI;"
If Rs.State=1 Then Rs.Close
RS.Open Sql, Cn, adOpenStatic, adLockReadOnly
''2° comienzo a cargar los registros en la grilla
Do While Not Rs.EOF
' cargo los registros de HOY
if Rs!Fecha=format(date,"mm/dd/yyyy") Then CargarDatosenGrid
' cargo los registros de MAÑANA
if Rs!Fecha=format(date+1,"mm/dd/yyyy") Then CargarDatosenGrid
' cargo los registros de PASADO MAÑANA
if Rs!Fecha=format(date+2,"mm/dd/yyyy") Then CargarDatosenGrid
Rs.MoveNext
Loop
Rs.Close
Ahora bien, así como obtengo los registros de hoy, mañana, etc, quisera poder cargar los de la semana en curso.
-
Gracias por preguntar. :D
Mira, creo que la linea:
If Rs.State=1 Then Rs.Close
esta demás, salvo que este dentro de un bucle o hallas declarado RS a un nivel superior, sino, dejalo asi.
Supongo que en CargarDatosenGrid tienes un add de esa consulta.
En todo caso creo que se puede resolver con el script que te dio Sebas
DateAdd("D", Weekday(Date, vbMonday) * (-1) + 1, Date)
pero modificando tu select quedaría mas o menos asi: (afinalo segun tu tipo de motor)
SELECT * From RECORDATORIOS Where Activo=SI and Fecha >= DateAdd("D", Weekday(Date, vbMonday) * (-1) + 1, Date) ;" (de memoria creo el pone -1 si es que te vas para atras y +1 si te vas a futuro)
Y en el grid ya lo reformateas si fuera necesario.
Saludos
-
Jaja, primero que nada, la línea If Rs.State=1 Then Rs.Close acostumbré a colocarla no se porque, tuve un mentor en programación que me enseñó así y se me quedó grabada esa línea (?), mas que nada por si se me olvida cerrar por algún lugar un recordset, jaja, en fin, gracias por la respuesta, y ni bien pueda colgar unas capturas en el algún server de imágenes (puesto que no se hacerlo), las estaré subiendo acá. Gracias nuevamente....
-
A mi me paso exactamente lo mismo. Hasta que definí como politica de programacion (asuuu) que nunca declararía rs a nivel global y solo a nivel de modulo, de esa forma cada vez que entre a ese modulo siempre tendré la seguridad que no esta en memoria y por tanto no cerrarla. todo lo que declaro a nivel global lo pongo con una G, osea: rsG .
Me cuentas como te va con lo de la fecha, si pudes un pantallazo de como quieres verlo y ahora en la noche q llegue a casa le doy una checada también.
:D
-
rs.filter = "fecha = #" & campo & "#"