none
Seleccionar solamente las fechas a 7 dias vista 2 tablas RRS feed

  • Pregunta

  • Hola,
    llevo rato haciendo pruebas y no me acaba de ir, la consulta me devuelve valores que no tienen ningun campo fecha en
    el mes actual (ahora que estamos a fin de mes me tiene que devolver 1 registro)
    Lo que pretende la consulta es que devuelva los acontecimientos que pasaran amtes de 7 dias (si es final de mes seran
    menos dias), solamente que una de las 2 fechas (fecha_nac o data) este a menos de 7 dias vista
    Dim query = From vsQLsats In dataset1.santoral _
          Join vsqlamistats In dataset1.amistats _
           On vsqlamistats.nom Equals vsQLsats.nom _
           Where vsQLsats.data.Month = Now.Month _
           Or vsqlamistats.fecha_nac.Month = Now.Month _
           And ((vsqlamistats.fecha_nac.Day() - Now.Day) >= 0) Or ((vsQLsats.data.Day() - Now.Day) >= 0)
           Select vsqlamistats.nom, vsqlamistats.cognom, vsqlamistats.fecha_nac, vsQLsats.data
           Order By data, fecha_nac
    


    Spandau
    miércoles, 27 de octubre de 2010 23:25

Respuestas

  • Hola,<br/>
    haciendo pruebas ya esta solucionado...<br/>
    Gracias. 


     Dim vlocSQ = From vsQLsats In dsamistats.santoral _
          Join vsqlamistats In dsamistats.amistats _
           On vsqlamistats.nom Equals vsQLsats.nom _
            Where ((vsQLsats.data.Month = Now.Month) _
               And (vsQLsats.data.Day) <= (Now.Day + 7)) Or _
              (vsqlamistats.data_naixement.Month = Now.Month _
             And (vsqlamistats.data_naixement.Day) <= (Now.Day + 7))
             Select vsqlamistats.nom, vsqlamistats.cognom, vsqlamistats.data_naixement, vsQLsats.data
             Order By data, data_naixement

    Spandau
    • Marcado como respuesta Spandau miércoles, 3 de noviembre de 2010 10:34
    • Editado Spandau miércoles, 3 de noviembre de 2010 14:38
    miércoles, 3 de noviembre de 2010 10:34

Todas las respuestas

  • Yo colocaría algo como :

    Where  (vsQLsats.data >= Now.AddDays(-7) and vsQLsats.data <= Now) or (vsqlamistats.fecha_nac >= Now.AddDays(-7) and vsqlamistats.fecha_nac <= Now)

     

    Cordial saludo,

     

     


    Mauricio Atanache G. - MCP
    Bogotá - Colombia
    "Bienaventurados los Pesimistas. Por que hacen BACKUPS."
    jueves, 28 de octubre de 2010 0:54
  • Gracias Mauricio,

    he provado tu codigo y ahora no me devuelve nada, incluso he modificado registros que cumplan las 2 fechas y no me las selecciona.

    Gracias


    Spandau
    jueves, 28 de octubre de 2010 7:59
  • Spandau, los campos que quieres filtrar te aparecen como de tipo Fecha si los inspecciones?
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    jueves, 28 de octubre de 2010 8:01
  • si son campos datetime

    Spandau
    jueves, 28 de octubre de 2010 8:11
  • Hola,<br/>
    haciendo pruebas ya esta solucionado...<br/>
    Gracias. 


     Dim vlocSQ = From vsQLsats In dsamistats.santoral _
          Join vsqlamistats In dsamistats.amistats _
           On vsqlamistats.nom Equals vsQLsats.nom _
            Where ((vsQLsats.data.Month = Now.Month) _
               And (vsQLsats.data.Day) <= (Now.Day + 7)) Or _
              (vsqlamistats.data_naixement.Month = Now.Month _
             And (vsqlamistats.data_naixement.Day) <= (Now.Day + 7))
             Select vsqlamistats.nom, vsqlamistats.cognom, vsqlamistats.data_naixement, vsQLsats.data
             Order By data, data_naixement

    Spandau
    • Marcado como respuesta Spandau miércoles, 3 de noviembre de 2010 10:34
    • Editado Spandau miércoles, 3 de noviembre de 2010 14:38
    miércoles, 3 de noviembre de 2010 10:34
  • Spandau, creo que la respuesta no es correcta al 100 %, te explico porque:

    Imagina que tienes una fecha: 26/10/2010, según tu planteamiento:

    - Extraes el mes 10

    - Extraes el dia 26, y lo comparas con 33?

     

    Pienso que no es correcto porque, evidentemente el dia 33 no existe y el mes pasaria a ser el 11...

    No entiendo porque no te funciona la solución de Mauricio, pero se aproxima a lo que realmente deberia ser.

     


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    miércoles, 3 de noviembre de 2010 11:53
  • gracias jtorrecilla por tus comentarios.. tienes toda la razón, pero,

    Es que cuando lo prove no me devolvió nada.... mi teoria era que :  (no tengo mucha idea, seguramente estaré equivocado)

    en el ejemplo de  Mauricio, por ejemplo:

        (vsqlamistats.fecha_nac >= Now.AddDays(-7) 

    fecha_nac = es un datetime con año/mes/dia

    now.addDays= serà ahora+7... pero el año no me coincidira... por ejemplo=  fecha_nac: 04/11/1969 >= hoy=3/11/2010  = no tengo claro que el año me coincida..

     

    ESTOY EQUIVOCADO? si no lo estoy... de alguna manera se tendria que descartar comparación años...

    he estado mirando y no he encontrado mucha información sobre este método linq.... agradeceria ayuda..... 

    ya que el uso de este mètodo me descartaria los finales de mes... que en mi código me funciona siempre y cuando no llegue a él...

    Gracias por todo..

     

    *Edito: en mi anterior codigo fecha_nac = data_naixement



    Spandau
    miércoles, 3 de noviembre de 2010 14:49
  • Lo que pretendes es algo asi, como determinar que eventos estan proximos por Mes y día sin tener en cuenta el año no?

    Se me ocurren 2 formas,

    Forma A

    1) Pasar la fecha a A Cadena:

    vsqlamistats.fecha_nac.ToString("MMdd")  'Obtenemos la fecha solo con Mes y Dia es decir hoy seria 1103

    2) y Hagas las misma operacion con Date.Now.AddDays(-7)...

    3) Hagas una conversion a Entero, y compares...

    Forma B

    1) Al campo de Fecha de Nacimiento hagas esto: vsqlamistats.fecha_nac.AddYear(Date.Now.Year-vsqlamistats.fecha_nac.Year)

    2) Comparar los datos...

     

    Espero que te sirva.


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    miércoles, 3 de noviembre de 2010 15:12
  • Si,

    lo que pretendo es conocer a través de la consulta los eventos a 7 dias vista,

    esta noche lo pruebo... quiza la más simple sea la B... ya te informaré

    Gracias


    Spandau
    miércoles, 3 de noviembre de 2010 15:23
  • Hola,

    lo he estado provando y no hay manera... me genera errores...

    he estado en la opcion b, ya que la a si paso la fecha a cadena ya no me funciona el .adDays()

    y en la opcion b me genera error cuando intento ponerle al año de nacimiento el año actual...

    Gracias de todas maneras....


    Spandau
    miércoles, 3 de noviembre de 2010 22:35
  • Spandau, publica como tienes el código e intento adaptarlo, o si no sube el ejemplo a SkyDrive para revisarlo.
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    jueves, 4 de noviembre de 2010 7:08
  • Gracias jtorrecilla:

    publico aqui la funcion,

    lo que esta comentado es lo que he provado sin resultado positivo,

    disculpas por el desorden...

     

     Private Sub BtCercalinq_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles BtCercalinq.Click
     Try
      Dim dsamistats As New amistatsDataSet1
      Dim custsants As New amistatsDataSet1TableAdapters.santoralTableAdapter
      custsants.Fill(dsamistats.santoral)
      Dim custamist As New amistatsDataSet1TableAdapters.amistatsTableAdapter
      custamist.Fill(dsamistats.amistats)
    
      'trobarem els aconteixaments a 7 dies vista
    
      Dim vlocSQ = From vsQLsats In dsamistats.santoral _
      Join vsqlamistats In dsamistats.amistats _
      On vsqlamistats.nom Equals vsQLsats.nom _
      Where ((vsQLsats.data.Month = Now.Month) _
       And (vsQLsats.data.Day) <= (Now.Day + 7)) Or _
       (vsqlamistats.data_naixement.Month = Now.Month _
       And (vsqlamistats.data_naixement.Day) <= (Now.Day + 7))
       Select vsqlamistats.nom, vsqlamistats.cognom, vsqlamistats.data_naixement, vsQLsats.data
       Order By data, data_naixement
    
      'Dim vlocSQ = From vsQLsats In dsamistats.santoral _
      'Join vsqlamistats In dsamistats.amistats _
      'On vsqlamistats.nom Equals vsQLsats.nom _
    And vsqlamistats.data_naixement.AddYears(Date.Now.Year-vsqlamistats.data_naixement.Year) _
      'Where (vsQLsats.data >= Now.AddDays(-7) And vsQLsats.data <= Now) _
      ' (vsqlamistats.data_naixement >= Now.AddDays(-7) And vsqlamistats.data_naixement <= Now)
      ' Select vsqlamistats.nom, vsqlamistats.cognom, vsqlamistats.data_naixement, vsQLsats.data
      ' Order By data, data_naixement
    
      '(vsQLsats.data >= Now.AddDays(-7) And vsQLsats.data <= Now) _
      ' And vsqlamistats.data_naixement.AddYears(Date.Now.Year-vsqlamistats.data_naixement.Year) _
      ' vsqlamistats.fecha_nac.AddYear(Date.Now.Year-vsqlamistats.fecha_nac.Year)
      Dim listatfalta As New llistat2
      listatfalta.Show()
    
      listatfalta.DataGrid1.ItemsSource = vlocSQ
     
    
     Catch ex As Exception
      MsgBox("error access a linq2")
      MsgBox(ex.ToString)
     End Try
    
    
    
     End Sub
    

     

    cuelgo aqui la clase:


    Spandau
    • Editado Spandau jueves, 4 de noviembre de 2010 9:15
    jueves, 4 de noviembre de 2010 9:11
  • Solo para completar, que guardas en el campo data?
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    jueves, 4 de noviembre de 2010 9:14
  • Hola Jtorrecilla,

    mira tengo 2 tablas, te las describo por encima:

    una que se llama amistats con: nom (nombre), cognom (apellido),data_naixement (fecha nacimiento ->datetime), entre otros  campos

    otra que se llama santoral con 2 campos: nom (nombre) y data (campo datatime con la fecha del santo, aqui las entradas le pongo el año que me da la gana, ya que me interesa el mes y dia)...

    en esta consulta lo que pretendo (aparte de familiarizarme con el linq) realizar una consulta que me devuelva qualquier evento aniversario o santo de mis contactos a 7 dias vista

    Gracias


    Spandau
    jueves, 4 de noviembre de 2010 9:30
  • Jeje Ok, te expongo algo a ver si esto te ayuda a resolver:

     Dim vlocSQ = From vsQLsats In dsamistats.santoral _
     Join vsqlamistats In dsamistats.amistats _
     On vsqlamistats.nom Equals vsQLsats.nom _
     Where ((vsQLsats.data.AddYears(Date.Now.Year - vsQLsats.data.Year) <= Now.AddDays(7)) _
      Or _
      ((vsqlamistats.data_naixement.AddYears(Date.Now.Year - vsqlamistats.data_naixement.Year) >= Now) _
      And (vsqlamistats.data_naixement.AddYears(Date.Now.Year - vsqlamistats.data_naixement.Year) <= Now.AddDays(7)))) _
      Select vsqlamistats.nom, vsqlamistats.cognom, vsqlamistats.data_naixement, vsQLsats.data _
      Order By data, data_naixement
    


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    jueves, 4 de noviembre de 2010 9:34
  • Hola jtorrecilla,

    lo acabo de probar...

    me devuelve creo que todos los registros  muchos de los cuales no tienen ninguna de las 2 fechas (data_naixement o data), en el mes actual...

    ayer tambien perdí mucho tiempo y la sintaxis Where con el addYears no tengo muy claro si funciona correctamente...

    Gracias de todos modos por el esfuerzo... es que es 'complicadito' esto de  comparar fechas desestimando el año...



    Spandau
    jueves, 4 de noviembre de 2010 12:11
  • Para que veas como funciona el AddYears, hazte un ejemplo muy sencillo

     

    dim fecha as new DateTime(1983,1,1)

    MessageBox.Show(fecha.ToString())

    MessageBox.Show(fecha.AddYears(Now.Year-fecha.Year).toString())

    El primero te tiene que devlver "01/01/1983" y el segundo "01/01/2010".

    Te devolverá mas datos de los que debe por que las condiciones no estan bien expresadas "OR o AND".


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    jueves, 4 de noviembre de 2010 12:18