1
« en: Miércoles 23 de Abril de 2008, 21:36 »
Hola a todos,
Tengo un portatil con:
- Windows vista ultimate con sp1 instalado
- Visual Studio 2005 profesional con sp1 instalado
- Crystal Report XI R2 Developer con sp3 instalado
- todas las versiones de .net framework hasta 3.5 con sus service packs instalados
- Utilizo el ADO.NET y en el reporte esta el dataset que he creado en el vs2005.
El problema es cuando lanzo un reporte, es aleatorio, hay veces que el error da a la segunda vez, otras a la tercera y otras a la primera. el error en cuestión es:
Intento de leer o escribir en la memoria protegida. A menudo, esto indica que hay otra memoria dañada.
Lo da en la linea que he puesto en rojo.
Aguien sabe por que pasa y como solucionarlo?
Gracias a todos de antemano.
Private Sub imprimir(ByVal desde As String, ByVal hasta As String)
System.Windows.Forms.Cursor.Current = Cursors.WaitCursor
Dim impresora As New frmInformes
Dim CrReporte As New CRAXDRT.Report
Dim CrAplicacion As New CRAXDRT.Application
Dim strSql As String
Dim strSql2 As String
strSql = "select * from familias where codfam >= '" _
& desde & "' and codfam <= '" & hasta & "'"
Try
objconex.Open()
objda = New OleDbDataAdapter(strSql, objconex)
objds = New DsFamilias
objda.Fill(objds, "familias")
objda.Dispose()
objconex.Close()
Catch ex As Exception
MessageBox.Show("Error al llistar " & ex.Message)
End Try
'Abre el fichero de tipo reporte el (1) significa que lo abre en exclusiva es opcional
CrReporte = CrAplicacion.OpenReport(PathAplicacion & "\reports\crfamilias.rpt")
'Descarta los datos que puedan haber salvados en el report
CrReporte.DiscardSavedData()
' asignamos los datos de todas las tablas.
CrReporte.Database.SetDataSource(objds.Tables("familias"), , 1)
'Que no pida parámetros
CrReporte.EnableParameterPrompting = False
'Paso de parametros
CrReporte.ParameterFields.GetItemByName("desde").AddCurrentValue(desde)
CrReporte.ParameterFields.GetItemByName("hasta").AddCurrentValue(hasta)
'Titulo del listado
impresora.Text = "Llistat de famílies."
'Esto será casi siempre igual
impresora.AxCrystalActiveXReportViewer1.ReportSource = CrReporte 'Asigna el reporte al visor
impresora.AxCrystalActiveXReportViewer1.DisplayGroupTree = False
impresora.AxCrystalActiveXReportViewer1.DisplayTabs = False
impresora.AxCrystalActiveXReportViewer1.Visible = True
impresora.AxCrystalActiveXReportViewer1.Dock = DockStyle.Fill
impresora.AxCrystalActiveXReportViewer1.ViewReport()
System.Windows.Forms.Cursor.Current = Cursors.WaitCursor
'Esta linea es la que realmente visualiza el reporte
impresora.ShowDialog()
CrReporte = Nothing
CrAplicacion = Nothing
Me.Focus()
End Sub