Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] Duda respecto a consulta por fechas con DateTimePicker VB2008

Estas en el tema de Duda respecto a consulta por fechas con DateTimePicker VB2008 en el foro de .NET en Foros del Web. Bueno mi duda es la siguiente como realizar la consulta de los 2 BETWEEN en VB 2008 desde 4 datetimepicker lo e intentado pero no ...
  #1 (permalink)  
Antiguo 27/12/2013, 11:45
 
Fecha de Ingreso: noviembre-2013
Ubicación: Nuevo Leon
Mensajes: 70
Antigüedad: 11 años
Puntos: 2
Duda respecto a consulta por fechas con DateTimePicker VB2008

Bueno mi duda es la siguiente como realizar la consulta de los 2 BETWEEN en VB 2008 desde 4 datetimepicker
lo e intentado pero no me funciona me marca error supongo por el left join,
solo puedo realizar la consulta normal osea de 1 BETWEEN y 2 datetimepicker, mas no cuando deseo unir ambas consultas espero me peudan ayudar muchas gracias.


Código VISUAL:
Ver original
  1. With cmd
  2.             .CommandType = CommandType.Text
  3.             .CommandText = "Select NumCta,Nombre,SegNeg, SUM (periodo_pasado) AS Periodo_Pasado, SUM (Cargo) AS Cargo, SUM (Abono) AS Abono, Periodo_Pasado+Cargo-Abono AS SaldoFinal  from (Select NumCta,Nombre,SegNeg, SUM (periodo_pasado) AS Periodo_Pasado, SUM (Cargo) AS Cargo, SUM (Abono) AS Abono  from (select t1.Fecha,t1.NumCta,t1.Nombre,t1.SegNeg,t1.Cargo,t1.Abono,t1.Saldo_Inicial,t2.saldo_inicial periodo_pasado from(SELECT *FROM mi_vista WHERE Fecha BETWEEN '20120910' AND '20120930') as t1 left join(select NumCta,SegNeg,SUM(cargo) cargo ,SUM(abono) abono ,SUM(saldo_inicial) saldo_inicial from mi_vista WHERE Fecha BETWEEN '20121001' AND '20121007' group by NumCta,Nombre,SegNeg) as t2 on (t1.NumCta=t2.NumCta and t1.NumCta=t2.NumCta)) as completo group by NumCta,Nombre,SegNeg) as x group by NumCta,Nombre,SegNeg,Periodo_Pasado,Cargo,Abono"
  4.             .Connection = cn
  5.         End With
  6.         da.SelectCommand = cmd
  7.         da.Fill(dt)
  8.         DataGridView1.DataSource = dt
__________________
Buen dia.
Jessy Rmz.
No seas como el caminante del desierto que sólo deja una huella; el conocimiento se alcanza con el tiempo y unas cuantas lunas.
  #2 (permalink)  
Antiguo 27/12/2013, 11:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Duda respecto a consulta por fechas con DateTimePicker VB2008

La verdad, me sorprendería que te funcionara, porque hay una muy mala aplicación del GROUP BY en casi todas las subconsultas. Y por otro lado hay cosas que sólo funcionarían en MySQL, pero no en Oracle ni SQL Server.
Código SQL:
Ver original
  1. SELECT
  2.     NumCta, Nombre, SegNeg,
  3.     SUM (periodo_pasado) Periodo_Pasado,
  4.     SUM (Cargo) Cargo,
  5.     SUM (Abono) Abono,
  6.     (Periodo_Pasado+Cargo-Abono) SaldoFinal  
  7. FROM
  8.     (SELECT NumCta, Nombre, SegNeg,
  9.             SUM (periodo_pasado) AS Periodo_Pasado,
  10.             SUM (Cargo) AS Cargo,
  11.             SUM (Abono) AS Abono  
  12.     FROM  
  13.         (SELECT
  14.             t1.Fecha,t1.NumCta,t1.Nombre,t1.SegNeg,t1.Cargo,t1.Abono,
  15.             t1.Saldo_Inicial,t2.saldo_inicial periodo_pasado
  16.         FROM
  17.             (SELECT *
  18.             FROM mi_vista
  19.             WHERE Fecha BETWEEN '20120910' AND '20120930') t1
  20.             LEFT JOIN
  21.             (SELECT
  22.                 NumCta,
  23.                 SegNeg,
  24.                 SUM(cargo) cargo ,
  25.                 SUM(abono) abono ,
  26.                 SUM(saldo_inicial) saldo_inicial
  27.             FROM mi_vista
  28.             WHERE Fecha BETWEEN '20121001' AND '20121007'
  29.             GROUP BY NumCta,Nombre,SegNeg) t2
  30.                 ON (t1.NumCta=t2.NumCta AND t1.NumCta=t2.NumCta)
  31.         ) completo
  32.     GROUP BY NumCta,Nombre,SegNeg) x
  33. GROUP BY NumCta, Nombre, SegNeg, Periodo_Pasado, Cargo, Abono
En la consulta mayor no puedes poner Cargo y Abono en el GROUP BY porque están afectadas por funciones agregadas. No se sabe de donde surge "Nombre" en otras, y no puedes invocar en esa clausula columnas que no estén en el SELECT (salvo en MySQL).
Además de eso, me parece una consulta demasiado complicada. Ni siquiera estoy muy seguro de qué es lo que calcula.
¿Qué motor de base de datos estás usando?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 27/12/2013, 12:04
 
Fecha de Ingreso: noviembre-2013
Ubicación: Nuevo Leon
Mensajes: 70
Antigüedad: 11 años
Puntos: 2
Respuesta: Duda respecto a consulta por fechas con DateTimePicker VB2008

mira a si quedaria mi consulta en VISUAL y si me funciona y si me trae lo que deseo el detalle es que deseo filtrar por fechas con un datetimepicker pero tengo 4 entonces no e visto en internet ningun ejemplo ni nada relacionado y si me funciona con 2 claro por que tengo otras consultas pero en esta no tengo idea como hacer funcionar el datetimepicker igual acomodado de esta forma se entiende mas y lo que tu me dices ammm pues igual solo lo cambio pero con tal de que me funcionen los datetimepicker

.CommandText = "Select NumCta,Nombre,SegNeg, SUM (periodo_pasado) AS Periodo_Pasado, SUM (Cargo) AS Cargo, SUM (Abono) AS Abono, Periodo_Pasado+Cargo-Abono AS SaldoFinal from (Select NumCta,Nombre,SegNeg, SUM (periodo_pasado) AS Periodo_Pasado, SUM (Cargo) AS Cargo, SUM (Abono) AS Abono from (select t1.Fecha,t1.NumCta,t1.Nombre,t1.SegNeg,t1.Cargo,t1 .Abono,t1.Saldo_Inicial,t2.saldo_inicial periodo_pasado from(SELECT *FROM mi_vista WHERE Fecha BETWEEN '20120910' AND '20120930') as t1 left join(select NumCta,SegNeg,SUM(cargo) cargo ,SUM(abono) abono ,SUM(saldo_inicial) saldo_inicial from mi_vista WHERE Fecha BETWEEN '20121001' AND '20121007' group by NumCta,Nombre,SegNeg) as t2 on (t1.NumCta=t2.NumCta and t1.NumCta=t2.NumCta)) as completo group by NumCta,Nombre,SegNeg) as x group by NumCta,Nombre,SegNeg,Periodo_Pasado,Cargo,Abono"
__________________
Buen dia.
Jessy Rmz.
No seas como el caminante del desierto que sólo deja una huella; el conocimiento se alcanza con el tiempo y unas cuantas lunas.
  #4 (permalink)  
Antiguo 27/12/2013, 12:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Duda respecto a consulta por fechas con DateTimePicker VB2008

¿A qué le estás llamando "VISUAL"?
Por otro lado, la pregunta subsiste: ¿Qué base de datos usas?
En cuanto a tu problema de los DateTimePicker, la cosa es parametrizar la consulta, y dejar que sea la librería de conexión la que resuelva el formato de datos. Es algo medio de manual.
Pero para darte un ejemplo concreto, necesitaría que me digas qué estás usando, porque no veo en lo poco que has posteado de código, ninguna indicación de contra cuál DBMS estás trabajando.

Finalmente, mira, la consulta que dices que te funciona contiene esto (si omito el contenido del FROM):

Código SQL:
Ver original
  1. SELECT
  2.     NumCta,
  3.     Nombre,
  4.     SegNeg,
  5.     SUM (periodo_pasado) AS Periodo_Pasado,
  6.     SUM (Cargo) AS Cargo,
  7.     SUM (Abono) AS Abono,
  8.     Periodo_Pasado+Cargo-Abono AS SaldoFinal
  9. FROM
  10.     (...) AS x
  11. GROUP BY
  12.     NumCta,
  13.     Nombre,
  14.     SegNeg,
  15.     Periodo_Pasado,
  16.     Cargo,
  17.     Abono
Los tres campos finales (Periodo_Pasado, Cargo, Abono), son resultados de funciones agregadas, y ninguno de todos los DBMS que yo conozco permite aplicar el GROUP BY sobre columnas del SELECT donde hay funciones. Ninguno.
Si no me crees, lee los manuales de referencia.
Por eso es que te digo que me sorprendería que funcionara.

Ordenar, si funciona, pero agrupar... agrupar no.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 27/12/2013, 13:10
 
Fecha de Ingreso: noviembre-2013
Ubicación: Nuevo Leon
Mensajes: 70
Antigüedad: 11 años
Puntos: 2
Respuesta: Duda respecto a consulta por fechas con DateTimePicker VB2008

Oki ahorita me pondre a leer pero solo le dejo lo que tenia y lo que hice :D y disculpeme por no tener la calidad correcta :/ aun estoy estudiando y pues hago muchas locuras XD igual mi lojica no es la mejor y se que no trata de que me salio :$


Código vb:
Ver original
  1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.         'TODO: This line of code loads data into the 'BDReportesDataSet.mi_vista' table. You can move, or remove it, as needed.
  3.        Me.Mi_vistaTableAdapter.Fill(Me.BDReportesDataSet.mi_vista)
  4.  
  5.  
  6.         Dim da As New SqlDataAdapter
  7.         Dim cmd As New SqlCommand
  8.         Dim Servidor As String = "USUARIO-PC\SQL2008R2"
  9.         Dim BaseDatos As String = "BDReportes"
  10.         Dim cn As New SqlConnection("Data Source=" & Servidor & ";Initial Catalog=" & BaseDatos & ";Integrated Security=SSPI;")
  11.         Dim dt As New DataTable
  12.         With cmd
  13.             .CommandType = CommandType.Text
  14.             .CommandText = "Select NumCta,Nombre,SegNeg, SUM (periodo_pasado) AS Periodo_Pasado, SUM (Cargo) AS Cargo, SUM (Abono) AS Abono, Periodo_Pasado+Cargo-Abono AS SaldoFinal  from (Select NumCta,Nombre,SegNeg, SUM (periodo_pasado) AS Periodo_Pasado, SUM (Cargo) AS Cargo, SUM (Abono) AS Abono  from (select t1.Fecha,t1.NumCta,t1.Nombre,t1.SegNeg,t1.Cargo,t1.Abono,t1.Saldo_Inicial,t2.saldo_inicial periodo_pasado from(SELECT *FROM mi_vista WHERE Fecha BETWEEN '20120910' AND '20120930') as t1 left join(select NumCta,SegNeg,SUM(cargo) cargo ,SUM(abono) abono ,SUM(saldo_inicial) saldo_inicial from mi_vista WHERE Fecha BETWEEN '20121001' AND '20121007' group by NumCta,Nombre,SegNeg) as t2 on (t1.NumCta=t2.NumCta and t1.NumCta=t2.NumCta)) as completo group by NumCta,Nombre,SegNeg) as x group by NumCta,Nombre,SegNeg,Periodo_Pasado,Cargo,Abono"
  15.             .Connection = cn
  16.         End With
  17.         da.SelectCommand = cmd
  18.         da.Fill(dt)
  19.         DataGridView1.DataSource = dt
  20.  
  21.     End Sub






LO QUE HICE


Código vb:
Ver original
  1. Public Class Form1
  2.  
  3.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  4.         Dim da As New SqlDataAdapter
  5.         Dim cmd As New SqlCommand
  6.         Dim Servidor As String = "USUARIO-PC\SQL2008R2"
  7.         Dim BaseDatos As String = "BDReportes"
  8.         Dim cn As New SqlConnection("Data Source=" & Servidor & ";Initial Catalog=" & BaseDatos & ";Integrated Security=SSPI;")
  9.         Dim dt As New DataTable
  10.  
  11.         Dim TxtfechaIni As Date
  12.         Dim TxtfechaFin As Date
  13.         Dim TxtfechaIni2 As Date
  14.         Dim TxtfechaFin2 As Date
  15.  
  16.         With cmd
  17.             .CommandType = CommandType.Text
  18.             .CommandText = "Select NumCta,Nombre, SUM (periodo_pasado) AS Periodo_Pasado, SUM (Cargo) AS Cargo, SUM (Abono) AS Abono, Periodo_Pasado+Cargo-Abono AS SaldoFinal  from (Select NumCta,Nombre,SegNeg, SUM (periodo_pasado) AS Periodo_Pasado, SUM (Cargo) AS Cargo, SUM (Abono) AS Abono  from (select t1.Fecha,t1.NumCta,t1.Nombre,t1.SegNeg,t1.Cargo,t1.Abono,t1.Saldo_Inicial,t2.saldo_inicial periodo_pasado from(SELECT *FROM mi_vista  WHERE Fecha " & _
  19.         "BETWEEN #" & Format(CDate(TxtfechaIni), "dd/MM/yyyy") & "#" & _
  20.         "AND #" & Format(CDate(TxtfechaFin), "dd/MM/yyyy") & "#" & _
  21.         ")as t1 left join" & _
  22.         "(select NumCta,SegNeg,SUM(cargo) cargo ,SUM(abono) abono ,SUM(saldo_inicial) saldo_inicial from mi_vista WHERE Fecha" & _
  23.         "BETWEEN #" & Format(CDate(TxtfechaIni2), "dd/MM/yyyy") & "#" & _
  24.         "AND #" & Format(CDate(TxtfechaFin2), "dd/MM/yyyy") & "#" & _
  25.         "Group by termino NumCta,Nombre,Periodo_Pasado,Cargo,Abono" & _
  26.         ") as t2 on (t1.NumCta=t2.NumCta and t1.NumCta=t2.NumCta)" & _
  27.         ") as completo group by NumCta,Nombre,SegNeg" & _
  28.         ") as x group by NumCta,Nombre,Periodo_Pasado,Cargo,Abono"
  29.  
  30.             .Connection = cn
  31.         End With
  32.         da.SelectCommand = cmd
  33.         da.Fill(dt)
  34.         DataGridView1.DataSource = dt
  35.     End Sub

Pero sigo trabajando en ello....
__________________
Buen dia.
Jessy Rmz.
No seas como el caminante del desierto que sólo deja una huella; el conocimiento se alcanza con el tiempo y unas cuantas lunas.
  #6 (permalink)  
Antiguo 27/12/2013, 13:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Duda respecto a consulta por fechas con DateTimePicker VB2008

Ahora se entiende un poco mejor. Siempre es preferible que postees los códigos sin abreviarlos, porque de lo contrario no podemos ver lo que realmente estás haciendo.
Bueno, estás usando la clase SqlCommand, y esta tiene una propiedad denominada Paremeters, que se usa para lo que te digo: insertar directamente los datos en su formato nativo, con lo cual no tienes que hacer ninguna conversión que pueda acusar errores si no está correctamente hecha.
En el manual de referencia on-line tendrás un claro ejemplo del uso de los parametros en un objeto SqlCommand: http://msdn.microsoft.com/es-es/libr...code-snippet-1

Este es el ejemplo que tiene esa págica, como para que lo vayas viendo:
Código vb:
Ver original
  1. Private Sub UpdateDemographics(ByVal customerID As Integer, _
  2.     ByVal demoXml As String, _
  3.     ByVal connectionString As String)
  4.  
  5.     ' Update the demographics for a store, which is stored
  6.    ' in an xml column.
  7.    Dim commandText As String = _
  8.      "UPDATE Sales.Store SET Demographics = @demographics " _
  9.      & "WHERE CustomerID = @ID;"
  10.  
  11.     Using connection As New SqlConnection(connectionString)
  12.         Dim command As New SqlCommand(commandText, connection)
  13.  
  14.         ' Add CustomerID parameter for WHERE clause.
  15.        command.Parameters.Add("@ID", SqlDbType.Int)
  16.         command.Parameters("@ID").Value = customerID
  17.  
  18.         ' Use AddWithValue to assign Demographics.
  19.        ' SQL Server will implicitly convert strings into XML.
  20.        command.Parameters.AddWithValue("@demographics", demoXml)
  21.  
  22.         Try
  23.             connection.Open()
  24.             Dim rowsAffected As Integer = command.ExecuteNonQuery()
  25.             Console.WriteLine("RowsAffected: {0}", rowsAffected)
  26.  
  27.         Catch ex As Exception
  28.             Console.WriteLine(ex.Message)
  29.         End Try
  30.     End Using
  31. End Sub
En este caso lo único que debes hacer es insertar en donde van los parámetros la propiedad Value del DateTimePicker (ver manual de referencia también: http://msdn.microsoft.com/en-us/libr...vs.110%29.aspx)
Fuera de eso, siempre conviene hacer una prueba manual en la base de datos con la consulta real, y con datos reales, a fin de depurar los aspectos del SQL. Te lo recomiendo. En esencia es escribir en la interfaz de SQL Server la query tal y como la usarás en la aplicación, reemplazando los parámetros por valores reales y probar que no falle.
Recién después de esa prueba (o las correcciones necesarias), la copias y la usas en el programa.

Respecto a las limitaciones del GROUP BY, también es mejor consultar el manual de referencia antes que nada: http://technet.microsoft.com/es-es/l.../ms177673.aspx
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 27/12/2013, 13:49
 
Fecha de Ingreso: noviembre-2013
Ubicación: Nuevo Leon
Mensajes: 70
Antigüedad: 11 años
Puntos: 2
Respuesta: Duda respecto a consulta por fechas con DateTimePicker VB2008

gracias seguire trabajando en ello :D no sea enojon D: D: D: D: D:
__________________
Buen dia.
Jessy Rmz.
No seas como el caminante del desierto que sólo deja una huella; el conocimiento se alcanza con el tiempo y unas cuantas lunas.
  #8 (permalink)  
Antiguo 13/01/2014, 10:25
 
Fecha de Ingreso: noviembre-2013
Ubicación: Nuevo Leon
Mensajes: 70
Antigüedad: 11 años
Puntos: 2
Respuesta: Duda respecto a consulta por fechas con DateTimePicker VB2008

Listo ya quedo solucionado :3
__________________
Buen dia.
Jessy Rmz.
No seas como el caminante del desierto que sólo deja una huella; el conocimiento se alcanza con el tiempo y unas cuantas lunas.

Etiquetas: vb
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:30.