Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

sistema de reportes

Estas en el tema de sistema de reportes en el foro de Visual Basic clásico en Foros del Web. Haber si alguien me puede ayudar. Estoy desarrollando un sistema de reportes personalizados, que se conecta con una base de datos de access formato 2000 ...
  #1 (permalink)  
Antiguo 25/08/2011, 13:49
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 13 años, 6 meses
Puntos: 2
Exclamación sistema de reportes

Haber si alguien me puede ayudar. Estoy desarrollando un sistema de reportes personalizados, que se conecta con una base de datos de access formato 2000 y tengo 2 problemas:

1- Tengo los query y los reportes funcionando pero una vez que cierro el reporte (Hecho con datareport), ya no lo puedo volver a abrir de nuevo hasta que no cierre la aplicacion y la ejecute otra vez.

2- Como estoy usando el DataEnviroment la ruta de la base de datos la tengo en el codigo fuente del programa, pero me gustaria que esta la tome de un archivo ini, asi no importa donde este la base simplemente modifico el ini y no tengo que tocar el codigo fuente.

Saudos y gracias.
  #2 (permalink)  
Antiguo 25/08/2011, 14:42
 
Fecha de Ingreso: mayo-2009
Mensajes: 238
Antigüedad: 15 años
Puntos: 7
Respuesta: sistema de reportes

1.- Especifica que procedimientos utilizas, cierras y vacias el recordset, quizas lo dejas en visible=false y por eso no lo puedes ver.

2.-Lo mejor que puedes hacer dejar de utilizar el dataEnvironment por que no se puede lo que quieres, hazlo todo desde codigo, algo asi, recuerda que se puede hacer lo mismo q el dataenvironmente pero con codigo y asi tener la posibilidad de utilizar .ini para la ruta.

Código:
Dim sRep As New Recordset
Dim Con_sql As String
Dim iFormato As New StdDataFormat

Screen.MousePointer = vbHourglass
iFormato.Format = "Fixed"

Con_sql = "SELECT*FROM tabla"

    Set sRep = New Recordset
    sRep.Open Con_sql, variable_cadena_conexion
    Set Datareport1.DataSource = sRep
    Load Datareport1
Screen.MousePointer = vbDefault
    
With Datareport1
    .Sections("ReportHeader").Controls("EtiqDesde").Caption = "Fecha: " & dtpDesde & " - " & dtpHasta
    .Sections("ReportHeader").Controls("etqBase").Caption = "Reporte # 12"
    
    Set .Sections("NIVEL2").Controls("txtTotal").DataFormat = iFormato
    Set .Sections("ComCliente_venta_Grouping_Footer").Controls("Función1").DataFormat = iFormato
    .Show 1
End With
  #3 (permalink)  
Antiguo 25/08/2011, 17:39
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 13 años, 6 meses
Puntos: 2
Respuesta: sistema de reportes

Cita:
Iniciado por zxs23 Ver Mensaje
1.- Especifica que procedimientos utilizas, cierras y vacias el recordset, quizas lo dejas en visible=false y por eso no lo puedes ver.

2.-Lo mejor que puedes hacer dejar de utilizar el dataEnvironment por que no se puede lo que quieres, hazlo todo desde codigo, algo asi, recuerda que se puede hacer lo mismo q el dataenvironmente pero con codigo y asi tener la posibilidad de utilizar .ini para la ruta.

Código:
Dim sRep As New Recordset
Dim Con_sql As String
Dim iFormato As New StdDataFormat

Screen.MousePointer = vbHourglass
iFormato.Format = "Fixed"

Con_sql = "SELECT*FROM tabla"

    Set sRep = New Recordset
    sRep.Open Con_sql, variable_cadena_conexion
    Set Datareport1.DataSource = sRep
    Load Datareport1
Screen.MousePointer = vbDefault
    
With Datareport1
    .Sections("ReportHeader").Controls("EtiqDesde").Caption = "Fecha: " & dtpDesde & " - " & dtpHasta
    .Sections("ReportHeader").Controls("etqBase").Caption = "Reporte # 12"
    
    Set .Sections("NIVEL2").Controls("txtTotal").DataFormat = iFormato
    Set .Sections("ComCliente_venta_Grouping_Footer").Controls("Función1").DataFormat = iFormato
    .Show 1
End With
Con respecto al punto uno lo de vaciasr el recordset no lo comprendo bien ya que soy un usuario bastante muy basico en visual.

Mismo que me lleva al punto 2, en el cual no entiendo bien muchas cosas del codigo, como por ejemplo en que parte le indico la ruta del ini, que seccion leer o demas cosas?.

Saludos y Gracias
  #4 (permalink)  
Antiguo 25/08/2011, 18:43
 
Fecha de Ingreso: mayo-2009
Mensajes: 238
Antigüedad: 15 años
Puntos: 7
Respuesta: sistema de reportes

Bueno en cuanto a lo del archivo .ini no te coloque ningun codigo mas que nada era para darte un ejemplo de como utilizar el Datareport con puro codigo.

Mejor utiliza un archivo de texto(.txt) es mas sencillo ya lo del ini tienes que utilizar API's de windows(Las API's se podria decir que son archivos .DLL las cuales tienen varias funciones, osea utilizar dichas funciones para leer el archivo .ini)

Con un archivo de texto seria asi de simple:
Código:
Private Sub Command1_Click()
Dim vArchivo As Integer
Dim vCadenaConexion As String
    vArchivo = FreeFile
    Open App.Path & "\ruta.txt" For Input As vArchivo 'app.path te devuelve la ruta donde esta tu proyecto.
    'Open "C:\ruta.txt" For Input As vArchivo 'Tambien puedes poner la ruta directamente
    Line Input #vArchivo, vCadenaConexion
    Close #vArchivo
    MsgBox vCadenaConexion
End Sub
Por el momento mejor intenta solucionar el punto 1, eso de cerrar el Datareport y ya no poder volverlo a abrir hasta cerrar todo esta raro, puedes poner el codigo que utilizas para abrirlo o algun indicio para saber por donde puede estar el error.
  #5 (permalink)  
Antiguo 25/08/2011, 19:12
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 13 años, 6 meses
Puntos: 2
Respuesta: sistema de reportes

ZXS23 estoy dele leer lo del ini y si parece un poco complicado, tengo que generar un modulo en mi proyecto donde poner el codigo y demas asique mejor como dices eso lo dejo para un segundo paso.

del punto uno te pongo el codigo que tengo en el boton que llama al data report

Private Sub cmdprint_Click()
On Error GoTo trap
DataEnvironment1.CheckinoutMaes DTPicker1.Value, DTPicker2.Value
Load ReporteMaestros
ReporteMaestros.Show
trap:
Exit Sub
End Sub

eso esta asi ya que en mi dataenviroment tengo ya armado los query de consulta de la db y demas, yo lo que me imagino es que tengo que de alguna manera hacer un unload del reporte, y intente con varias cosas pero no pude.

Saludos.
  #6 (permalink)  
Antiguo 25/08/2011, 22:38
 
Fecha de Ingreso: enero-2008
Ubicación: Lima - Perú
Mensajes: 1.127
Antigüedad: 16 años, 3 meses
Puntos: 10
Respuesta: sistema de reportes

Por tu codigo claramente me doy cuenta que seguro te da un error la 2da vez que ejecutas dicho codigo y como tienes un exit sub no te aparece ningun mensaje que te avise de dicho error.

Intenta asi y ve que error te sale para poder solucionarlo, probablemente sea que ya tienes el objeto abierto y por lo tanto no puedes volver a abrirlo.
Código:
Private Sub cmdprint_Click()

On Error GoTo trap
     DataEnvironment1.CheckinoutMaes DTPicker1.Value, DTPicker2.Value
     Load ReporteMaestros
     ReporteMaestros.Show
trap:
MsgBox "Nº de error: " & Err.Number & " | " & Err.Description, vbCritical

End Sub
Probablemte podrias solucionando descargando y cerrando el recordset o el objeto que utilizes, no se mucho sobre dataenvironmente pero los recordset los vacio y cierro asi

Código:
Private Sub Form_Unload(Cancel As Integer)
  ' cierra los recordset
  If Not rs Is Nothing Then
      rs.Close
      Set rs = Nothing
  End If

End Sub
  #7 (permalink)  
Antiguo 26/08/2011, 11:54
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 13 años, 6 meses
Puntos: 2
Respuesta: sistema de reportes

Franco desde ya muchisimas gracias tenias razon me da un error 3705, la operacion no esta permitida si el objeto esta abierto.

Ahora estoy intentando con el codigo de los record set que me mandaste, pero no me funciona, seguramente lo estoy poniendo mal.

Saludos.
  #8 (permalink)  
Antiguo 26/08/2011, 12:12
 
Fecha de Ingreso: mayo-2009
Mensajes: 238
Antigüedad: 15 años
Puntos: 7
Respuesta: sistema de reportes

Prueba asi en caso quieras descargar el recordset creo que este caso el objeto a cerrar y descargar seria asi DataEnvironment1.CheckinoutMaes.recordsert no estoy seguro pero puedes probar de diferentes formas, yo tampoco manejo bien el DataEnvironment.

Código:
Private Sub Form_Unload(Cancel As Integer)
  ' cierra los recordset
  If Not DataEnvironment1.CheckinoutMaes.recordsert Is Nothing Then
      DataEnvironment1.CheckinoutMaes.recordsert .Close
      Set DataEnvironment1.CheckinoutMaes.recordsert  = Nothing
  End If

End Sub
  #9 (permalink)  
Antiguo 26/08/2011, 14:18
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 13 años, 6 meses
Puntos: 2
Pregunta Respuesta: sistema de reportes

Cita:
Iniciado por zxs23 Ver Mensaje
Prueba asi en caso quieras descargar el recordset creo que este caso el objeto a cerrar y descargar seria asi DataEnvironment1.CheckinoutMaes.recordsert no estoy seguro pero puedes probar de diferentes formas, yo tampoco manejo bien el DataEnvironment.

Código:
Private Sub Form_Unload(Cancel As Integer)
  ' cierra los recordset
  If Not DataEnvironment1.CheckinoutMaes.recordsert Is Nothing Then
      DataEnvironment1.CheckinoutMaes.recordsert .Close
      Set DataEnvironment1.CheckinoutMaes.recordsert  = Nothing
  End If

End Sub
Estoy en duda aqui tu dices Form_Unload, eso es para un formulario verdad?, no se supone que este codigo deberia ir en mi archivo .Dsr que es el del datareport?

Igualmente no me funciono.

Saludos.
  #10 (permalink)  
Antiguo 27/08/2011, 11:58
 
Fecha de Ingreso: mayo-2009
Mensajes: 238
Antigüedad: 15 años
Puntos: 7
Respuesta: sistema de reportes

Tienes razon pero eso que te menciono seria en el form desde donde llamas al Datareport en este caso desde el form donde aplicas el Datareport1.show, de todas formas te tire un codigo sin comprobar jeje, no tengo idea como descargar un comando del Dataenvironment.

Si todavia tienes alguna duda abre otro tema, saludos
  #11 (permalink)  
Antiguo 29/08/2011, 10:26
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 13 años, 6 meses
Puntos: 2
Respuesta: sistema de reportes

despues de dar vueltas y checar por internet llegue a poner algo asi en mi codigo para que me cierre mi datareport pero me da un error:

Código:
Private Sub cmdprint_Click()
    On Error GoTo trap

    If DataEnviroment1.CheckinoutMaes.State = adStateOpen Then
       DataEnviroment1.CheckinoutMaes.Close
    End If
    
    DataEnvironment1.CheckinoutMaes DTPicker1.Value, DTPicker2.Value
    Load ReporteMaestros
    ReporteMaestros.Show
trap:
MsgBox "Nº de error: " & Err.Number & " | " & Err.Description, vbCritical
End Sub
la idea es que con el If cheque si esta abierto y si es asi lo cierre, pero me da el siguiente error:


error 424 object required y no encuntro bien que puede ser..

Última edición por gasuton; 29/08/2011 a las 10:53
  #12 (permalink)  
Antiguo 30/08/2011, 20:49
 
Fecha de Ingreso: mayo-2009
Mensajes: 238
Antigüedad: 15 años
Puntos: 7
Respuesta: sistema de reportes

Bueno al final averigue que tienes que hacerlo en el evento del datareport asi, espero sea lo que necesitas sino puedes abrir otro tema, saludos
Código:
Private Sub DataReport_Terminate() 
   DataEnvironment1.rsNombreComando.Close 
End Sub
  #13 (permalink)  
Antiguo 31/08/2011, 09:33
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 13 años, 6 meses
Puntos: 2
Sonrisa Respuesta: sistema de reportes

Cita:
Iniciado por zxs23 Ver Mensaje
Bueno al final averigue que tienes que hacerlo en el evento del datareport asi, espero sea lo que necesitas sino puedes abrir otro tema, saludos
Código:
Private Sub DataReport_Terminate() 
   DataEnvironment1.rsNombreComando.Close 
End Sub
Groso, Maestro, Fiera, no se que adjetivo ponerte pero con eso santo remedio. Lo puedo cerrar y abrir toda las veces que se me de la gana y cambiandole la fecha.

Se puede dar por cerrado el tema.

Saludos

Etiquetas: reportes, sistema
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 04:37.