• Jueves 2 de Mayo de 2024, 23:56

Autor Tema:  Ayuda Con Datareport  (Leído 2766 veces)

FABIANGARCIA

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Ayuda Con Datareport
« en: Jueves 2 de Septiembre de 2004, 22:09 »
0
:(  :(  :( HOLA DE NUEVO YO

TENGO QUE IMPRIMIR UN REPORTE DE UNAS OREDENES CON UN ACONSULTA DE SQL Y NO E PODIDO E SACADO TODOS LOS EJEMPLO QUE EXISTEN EN ESTA PAGINA Y NO EN TIENDO PORQUE EL DATA REPORT NO ME FUNCIONA .

ESTE ES EL CODIGO DE IMPRESION.

Private Sub IMPRIMIR_Click()
    Dim strSQL As String
    Set cnn1 = New ADODB.Connection
    strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\CARPETA  PUBLICA\VEHICULO\G y W\VEHICULOS.MDB;Persist Security Info=False"
    strSQL = "SELECT * From Orden, detalles1 where Orden.IdOrden = detalles1.IdOrden AND Orden.IdOrden = '" & codigo.Text & "'"
    cnn1.Open strCnn
    Set rstransportador = New ADODB.Recordset
    Set rstransportador.ActiveConnection = cnn1
    rstransportador.CursorType = adOpenKeyset
    rstransportador.LockType = adLockBatchOptimistic
    rstransportador.Open strSQL, strCnn, , , adCmdText
   'Set DataReport1.DataSource = rstransportador
    If Not rstransportador.EOF Then
        Set DataReport1.DataSource = rstransportador
        DataReport1.Show
    Else
        MsgBox "Archivo vacío.", vbInformation + vbOKOnly, App.Title
    End If
    Set rstransportador = Nothing
End Sub

ME SACA EL SIGUIENTE ERROR  :unsure:  :unsure:  :unsure:  :unsure:

ARGUMENTOS INCORRECTOS FUERA DEL INTERVALO PERMITIDO O EN CONFLICTOS CON OTROS.

AYUDEMEN POR FAVOR

GRACIAS

AlbertRoig

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Ayuda Con Datareport
« Respuesta #1 en: Martes 29 de Marzo de 2005, 14:46 »
0
Cita de: "FABIANGARCIA"
:(  :(  :( HOLA DE NUEVO YO

TENGO QUE IMPRIMIR UN REPORTE DE UNAS OREDENES CON UN ACONSULTA DE SQL Y NO E PODIDO E SACADO TODOS LOS EJEMPLO QUE EXISTEN EN ESTA PAGINA Y NO EN TIENDO PORQUE EL DATA REPORT NO ME FUNCIONA .

ESTE ES EL CODIGO DE IMPRESION.

Private Sub IMPRIMIR_Click()
    Dim strSQL As String
    Set cnn1 = New ADODB.Connection
    strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\CARPETA  PUBLICA\VEHICULO\G y W\VEHICULOS.MDB;Persist Security Info=False"
    strSQL = "SELECT * From Orden, detalles1 where Orden.IdOrden = detalles1.IdOrden AND Orden.IdOrden = '" & codigo.Text & "'"
    cnn1.Open strCnn
    Set rstransportador = New ADODB.Recordset
    Set rstransportador.ActiveConnection = cnn1
    rstransportador.CursorType = adOpenKeyset
    rstransportador.LockType = adLockBatchOptimistic
    rstransportador.Open strSQL, strCnn, , , adCmdText
   'Set DataReport1.DataSource = rstransportador
    If Not rstransportador.EOF Then
        Set DataReport1.DataSource = rstransportador
        DataReport1.Show
    Else
        MsgBox "Archivo vacío.", vbInformation + vbOKOnly, App.Title
    End If
    Set rstransportador = Nothing
End Sub

ME SACA EL SIGUIENTE ERROR  :unsure:  :unsure:  :unsure:  :unsure:

ARGUMENTOS INCORRECTOS FUERA DEL INTERVALO PERMITIDO O EN CONFLICTOS CON OTROS.

AYUDEMEN POR FAVOR

GRACIAS
Hola, soy nuevo en este foro y he visto que tengo el mismo problema que tenías tú hace un año.

Si pudiste resolver el error estaría eternamente agradecido si me orientas un poco ya que llevo varias horas con esto.

Yo sigo intentándolo (uso VB 6.0), si descubro algo prometo publicarlo.

Gracias por adelantado,
Albert Roig

AlbertRoig

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Ayuda Con Datareport
« Respuesta #2 en: Viernes 1 de Abril de 2005, 13:15 »
0
Cita de: "AlbertRoig"
Cita de: "FABIANGARCIA"
:(  :(  :( HOLA DE NUEVO YO

TENGO QUE IMPRIMIR UN REPORTE DE UNAS OREDENES CON UN ACONSULTA DE SQL Y NO E PODIDO E SACADO TODOS LOS EJEMPLO QUE EXISTEN EN ESTA PAGINA Y NO EN TIENDO PORQUE EL DATA REPORT NO ME FUNCIONA .

ESTE ES EL CODIGO DE IMPRESION.

Private Sub IMPRIMIR_Click()
    Dim strSQL As String
    Set cnn1 = New ADODB.Connection
    strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\CARPETA  PUBLICA\VEHICULO\G y W\VEHICULOS.MDB;Persist Security Info=False"
    strSQL = "SELECT * From Orden, detalles1 where Orden.IdOrden = detalles1.IdOrden AND Orden.IdOrden = '" & codigo.Text & "'"
    cnn1.Open strCnn
    Set rstransportador = New ADODB.Recordset
    Set rstransportador.ActiveConnection = cnn1
    rstransportador.CursorType = adOpenKeyset
    rstransportador.LockType = adLockBatchOptimistic
    rstransportador.Open strSQL, strCnn, , , adCmdText
   'Set DataReport1.DataSource = rstransportador
    If Not rstransportador.EOF Then
        Set DataReport1.DataSource = rstransportador
        DataReport1.Show
    Else
        MsgBox "Archivo vacío.", vbInformation + vbOKOnly, App.Title
    End If
    Set rstransportador = Nothing
End Sub

ME SACA EL SIGUIENTE ERROR  :unsure:  :unsure:  :unsure:  :unsure:

ARGUMENTOS INCORRECTOS FUERA DEL INTERVALO PERMITIDO O EN CONFLICTOS CON OTROS.

AYUDEMEN POR FAVOR

GRACIAS
Hola, soy nuevo en este foro y he visto que tengo el mismo problema que tenías tú hace un año.

Si pudiste resolver el error estaría eternamente agradecido si me orientas un poco ya que llevo varias horas con esto.

Yo sigo intentándolo (uso VB 6.0), si descubro algo prometo publicarlo.

Gracias por adelantado,
Albert Roig
Bueno, lo prometido es deuda, y aunque no tengo ni idea de si ésto lo va a leer alguien yo lo pongo por si acaso.

Lo que he hecho es lo siguiente:

1.- Me apoyo en un Dataenvironment para tener una conexión a la BDD, incluyo un comando que realiza la misma select que voy a realizar posteriormente desde la aplicación, y diseño un report apoyándome en ese comando.

2.- Una vez diseñado quito el dataenvironment del proyecto, ya que quiero que los reports usen la misma conexión que el resto de la aplicación (ya sabéis, por caché y demás motivos).

3.- La idea básica es pasarle a un report un recordset ya resuelto, que, por tanto usará la conexión que ya tuviera. Le paso un clon del recordset para evitar posibles efectos colaterales (movimiento del registro activo, ...)

4.- La llamada desde un botón imprimir de un formulario es la siguiente:

Private Sub cmbImprimir_Click()
Dim loRep As RepExpediciones
   
   Set loRep = New RepExpediciones
   Call loRep.Entrar("Listado de Expediciones", AdoLista.Recordset.Clone)
   Set loRep = Nothing

End Sub

5.- El código del report es el siguiente:

Option Explicit

Dim msTitulo As String

Public Sub Entrar(Titulo As String, Datos As adodb.Recordset)
    msTitulo = Titulo

    Call Rep_Configurar
    Call Rep_ObtenerDatos(Datos)

    Me.Show vbModal

End Sub

Private Sub Rep_Configurar()
    Me.Caption = msTitulo
    Me.Title = msTitulo
    Me.Sections("EncabezadoInforme").Controls("LblTitulo").Caption = msTitulo
    Me.Top = 100
    Me.Left = 100
    Me.Width = goMainForm.ScaleWidth - 200
    Me.Height = goMainForm.ScaleHeight - 200
End Sub

Private Sub Rep_ObtenerDatos(poDatos As adodb.Recordset)
Dim i As Long
Dim s As Long
   
   ' Albert Roig a 30/03/2005.
   ' Busco en todas las secciones del listado si hay RptTextBox y RptFunction
   ' cuyo nombre empiece por "cam" o "fun" (campos o funciones respectivamente).
   ' Esos prefijos están reservados para que cojan ese campo del recordset
   ' pasado como parámetro. El resto del nombre es el nombre del campo real del
   ' recordset. Por ejemplo: camTRA_Alba. Cogerá del recordset el campo TRA_Alba.
   '
   ' Al asignar el recordset usa la conexión a BDD del recordset.
   Set Me.DataSource = poDatos
   Me.DataMember = ""
   For s = 1 To Me.Sections.Count
       With Me.Sections(s).Controls
            For i = 1 To .Count
                If UCase(Left(.Item(i).Name, 3)) = "CAM" Or _
                   UCase(Left(.Item(i).Name, 3)) = "FUN" Then
                   If TypeOf .Item(i) Is RptTextBox Or _
                      TypeOf .Item(i) Is RptFunction Then
                         .Item(i).DataMember = ""
                         .Item(i).DataField = Mid(.Item(i).Name, 4)
                   End If
                End If
            Next i
       End With
   Next s

   Me.Refresh
End Sub

6.- Una mejora: el método Rep_ObtenerDatos puede ir perfectamente en un módulo para que todos los reports llamen a la misma rutina, sólo hace falta pasarle el ADODB.RecordSet y el DataReport.


Con ello conseguimos un report específico, es decir: un formulario en concreto (mantenimiento de clientes) llama al report ListaClientes diseñado específicamente para él. A mi me va de maravilla porque ese recordset va a una grid que puedo filtrar, cambiar el orden, etc., y ese mismo recordset lo saco al report sin hacer nada y sin que dependa de una select en concreto diseñada en un dataenvironment.

Anexo el report.

En fin, creo que ya está.

Salu2 a to2,
Albert
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.