Autor Tema: Es posible agrupar un Datareport sin Dataenvironment?  (Leído 14820 veces)

0 Usuarios y 1 Visitante están viendo este tema.

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Es posible agrupar un Datareport sin Dataenvironment?
« en: Junio 13, 2010, 09:39:22 pm »
Tengo un codigo y corre bien pero depende de un DataEnvironment ademas de utilizar las clausulas SHAPE y COMPUTE para agrupar la tabla productos por categoria, es posible hacerlo sin el DataEnvironment?

Código: [Seleccionar]
Sub Productos_categoria()
Dim cnxListado As ADODB.Command 'Objeto de tipo comando.
Dim Entorno As dteEntornoDatos  'Nuestro entorno de datos.

Set Entorno = New dteEntornoDatos 'Iniciamos el entorno de datos.
Entorno.cnxListados.ConnectionString = cn.ConnectionString
       
Set cnxListado = Entorno.Commands("ComProducto_Grouping")
   
Con_sql = "SHAPE{SELECT P.CodProd, P.NomProd,P.PrecioVenta, P.CodCat, C.NomCat" & _
                 " FROM Categoria C, Producto P WHERE C.CodCat=P.CodCat" & _
                 "}AS ComProducto COMPUTE ComProducto BY 'CodCat','NomCat'"
 
cnxListado.CommandType = adCmdText
cnxListado.CommandText = Con_sql
   
Load drShape

Set drShape.DataSource = Entorno
drShape.Show 1

End Sub

Aqui esta la imagen del reporte que tengo el cual utiliza datenvironment.





YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Es posible agrupar un Datareport sin Dataenvironment?
« Respuesta #1 en: Junio 13, 2010, 10:53:56 pm »
Claro que es totalmente posible. Te muestro un ejemplo mio.

Código: (vb) [Seleccionar]
Private Sub BtImprimir_Click()
Dim rsCD As New ADODB.Recordset
Dim rsDet As Variant

rsCD.StayInSync = False

sqlPH = _
"SHAPE {" & sqlCSP_FUL_CAB(Fec1, Fec2) & "} AS Cabecera " & _
"APPEND ({" & sqlDSP_FUL_DET(Fec1, Fec2) & "} AS Deta " & _
"RELATE CSP_ID to CSP_ID) AS Deta"

rsCD.Open sqlPH, dB, 1, 1
rsDet = rsCD("Deta")

Set RepOV.DataSource = rsCD
RepOV.Show 1
'----------------

Private Function sqlCSP_FUL_CAB(Fec1 As String, Fec2 As String)
sqlCSP_FUL_CAB = _
"SELECT CSP.CSP_SER, CSP.CSP_NUM, MCL.MCL_TIT, CSP.CSP_ID as CSP_ID " & _
"FROM CSP " & _
"WHERE (CAST(CSP.CSP_FDMA AS DATE) BETWEEN '" & Fec1 & "' AND '" & Fec2 & "')"
End Function

Public Function sqlDSP_FUL_DET(Fec1 As String, Fec2 As String)
sqlDSP_FUL_DET = _
"SELECT DSP.DSP_CANT, MPR.MPR_NCOMPLETO AS NCOMPLETO, DSP.DSP_PRECIO, DSP.DSP_CSP_ID AS CSP_ID " & _
"From DSP, MPR, CSP " & _
"Where " & _
"(Cast(CSP.CSP_FDMA AS date) BETWEEN '" & Fec1 & "' and '" & Fec2 & "') And " & _
"CSP.CSP_ID = DSP.DSP_CSP_ID AND DSP.DSP_MPR_ID = MPR.MPR_ID"
End Function

Explicación.
No soy un ducho en el tema, pero te señalo algo, para que te pinte el detalle debes tener una relacion que en mi ejemplo es:
Código: (vb) [Seleccionar]
"RELATE CSP_ID to CSP_ID) AS Deta" No me funcionó si hacia:
Código: (vb) [Seleccionar]
"RELATE CSP_ID to DSP.DSP_CSP_ID) AS Deta" y por eso tuve que ponerle el mismo alias.

Luego abres un nuevo reporte, y no lo conectas con ningun DataE, o sea que los valores DataMember y DataSource quedan vacios (del reporte), luego simplemente pones los controles rptTextBox con su propiedad Datafield igual al campo de la cabecera de tu consulta.
Y para el detalle pones en la propiedad Datafield el campo del detalle de tu consulta PERO también pones en las propiedades el nombre del DataMember (en mi ejemplo Deta)

Si no quedo claro la explicación me avisas para ahondar mas.
Me encuentras en YAcosta.com

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Re:Es posible agrupar un Datareport sin Dataenvironment?
« Respuesta #2 en: Junio 14, 2010, 12:43:33 am »
Gracias por responder.
Me salta un error
Instruccion SQL no valida; se esperaba DELETE, INSERT, PROCEDURE, SELEC o UPDATE

Código: [Seleccionar]
Sub Productos_categoria2()
Dim rs As New ADODB.Recordset
rs.StayInSync = False


Con_sql = "SHAPE{SELECT CodProd,NomProd,PrecioVenta,CodCat FROM producto} AS Cabecera " & _
          "APPEND ({SELECT CodCat,NomCat from categoria} AS Detalle " & _
          "RELATE codcat TO codcat) AS Detalle"

rs.Open Con_sql, cn, adOpenStatic, adLockOptimistic
Set drShape.DataSource = rs
drShape.Show 1

End Sub





YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Es posible agrupar un Datareport sin Dataenvironment?
« Respuesta #3 en: Junio 14, 2010, 02:32:12 am »
Sorry, es mi culpa, se me paso mencionarte que en tu conexion pongas esta linea:
cn.Provider = "MSDataShape".

es decir, donde haces tu conexion:

Código: (vb) [Seleccionar]
Conexion = "DRIVER=" & Driver & "; UID=" & Usuario & "; PWD=" & PassWord & "; DBNAME=" & BaseD & ";"
Set cn = New ADODB.Connection
cn.Provider = "MSDataShape"  '<---- pon esta linea

cn.Open Conexion   
Me encuentras en YAcosta.com

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Re:Es posible agrupar un Datareport sin Dataenvironment?
« Respuesta #4 en: Junio 14, 2010, 04:19:21 pm »
voy a probar, ojo que estoy con access2003 espero no haya ningun problema, saludos

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Re:Es posible agrupar un Datareport sin Dataenvironment?
« Respuesta #5 en: Junio 14, 2010, 10:36:12 pm »
He leído un poco y parece que no hay problema que sea access pero el error persiste y no he podido darle solucion, te adjunto el ejemplo haber si me ayudas cuando tengas unos minutos para intentar ver donde fallo ya que no he podido darme cuenta.

{Editado}: Parece que al hacer la conexion desde un modulo igual al ejemplo que deje no funciona y sale el error que menciono, si hago la conexion en el mismo form si se ejecuta el reporte correctamente, alguna solucion para hacer la conexion desde un modulo?.

http://www.megaupload.com/?d=8785L7WB


« última modificación: Junio 14, 2010, 11:18:52 pm por lucius »

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Es posible agrupar un Datareport sin Dataenvironment?
« Respuesta #6 en: Junio 15, 2010, 02:05:45 am »
Ya esta resuelto. Y permite compartirlo con el foro por si alguien mas lo siguió.

Primero, si se puede hacer la conexión desde modulo, cambia la conexión de:
Código: (vb) [Seleccionar]
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\DB_01.mdb;Password=;Persist Security Info=false"a:
Código: (vb) [Seleccionar]
cn.Open "Provider=MSDataShape.1;Extended Properties=Jet OLEDB:Database Password=;Persist Security Info=False;Data Source=" & App.Path & "\DB_01.mdb;Data Provider=MICROSOFT.JET.OLEDB.4.0"
Segundo: Al inicio no lei tu consulta en atención a las tablas sino a la estructura de la consulta, y no me habia percatado de que pones el detalle como cabecera y la cabecera como detalle ¿?. Me enviaste esto:
Código: (vb) [Seleccionar]
Con_sql = "SHAPE{SELECT CodProd, NomProd, PrecioVenta, CodCat FROM producto} AS Cabecera " & _
          "APPEND ({SELECT CodCat, NomCat from categoria} AS Detalle " & _
          "RELATE codcat TO codcat) AS Detalle"

y debe ser esto:
Código: (vb) [Seleccionar]
Con_sql = "SHAPE{SELECT CodCat, NomCat from categoria} AS Cabecera " & _
          "APPEND ({SELECT CodProd, NomProd, PrecioVenta, CodCat FROM producto} AS Detalle " & _
          "RELATE codcat TO codcat) AS Detalle"
         
Tercero y ultimo. En el reporte, el control de funcion que suma le pones en el DataMember=ComProducto cuando debe ser DataMember=Detalle

Bueno, todo esto en función del código que me enviaste, en todo caso debes ajustarlo pero tal como me lo envías esta funcionando, acá te devuelvo el código corregido y muestro la pantalla del reporte obtenido.


P.D. En tu BD, cambien un registro de tu BD, ya que el registro 4 de la tabla Producto debe tener el id CodCat en 1 no en 2

Aqui el codigo:
http://www.4shared.com/file/FN_1Q6pM/shape_vb_Depurado.html

Espero haberte ayudado.
Me encuentras en YAcosta.com

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Re:Es posible agrupar un Datareport sin Dataenvironment?
« Respuesta #7 en: Junio 15, 2010, 02:28:29 am »
Tienes razon el problema era la cadena de conexion ademas me di cuenta que el problema era el modulo donde utilizaba "Provider" y en el form utilizaba "Data Provider" y este ultimo si resulta para recordset's jerarquitos

Al final era mas sencillo de lo que parecia era cuestion de practica y de paciencia, gracias por los codigos compartidos, saludos
« última modificación: Junio 15, 2010, 01:43:03 pm por lucius »

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:Es posible agrupar un Datareport sin Dataenvironment?
« Respuesta #8 en: Junio 15, 2010, 11:47:50 am »
Excelente YvanB que estas metido bien con el DataReport, yo sinceramente le tengo cierta idea puesto que me parece muy incompleto. Confio mas y me enfoco mas por el Crystal Reports, creo que deberian guiarse para alla...!
Miguel Núñez.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Es posible agrupar un Datareport sin Dataenvironment?
« Respuesta #9 en: Junio 15, 2010, 01:05:25 pm »
Excelente YvanB que estas metido bien con el DataReport, yo sinceramente le tengo cierta idea puesto que me parece muy incompleto. Confio mas y me enfoco mas por el Crystal Reports, creo que deberian guiarse para alla...!

Yo estoy de acuerdo contigo Miguel, el tema se frena por el asunto de la licencia. Ya desde hace años tengo soluciones terminadas con DataReport y salvo el doble detalle todo lo demás lo he podido resolver. Creo que dejare el DataReport por completo cuando deje el VB6 por completo y eso sera cuando programemos en realidad virtual... jeje... no creo que corra una aplicación w32 en ese entorno....o si?... vb6 nunca muere jajaja
Me encuentras en YAcosta.com