منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : رسالة خطأ عند عرض تقرير Crystal Report مرتين!
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله

قمت بإنشاء تطبيق يتعامل مع قواعد بيانات MS Access وتقارير Crystal Reports.
أقوم بتخزين بيانات في الجدول بنجاح، ومن ثم يتم عرض تقرير بهذه البيانات.

ولدي روتين خاص بعرض تقرير بناء على رقم الـID.

لأول مرة يقوم بعرض التقرير بلا أي مشاكل، ولكن عند طلب عرض التقرير مجدداً لأي سبب تظهر رسالة خطأ كما بالصورة.

[ATTACH=CONFIG]2918[/ATTACH]

علماً بأن برمجة Form عرض التقرير كما يلي:
كود :
Imports CrystalDecisions.Shared
Imports CrystalDecisions.Shared.OpenReportMethod
Imports CrystalDecisions.CrystalReports.Engine
Imports System.Data.OleDb
Imports System.Data

Public Class frmStool_2_Report

    Public RecID As Integer

    Private Sub frmStool_2_Report_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        RecID = 0
        CryStool.ReportSource = Nothing

        frmMain.PatID = 0
        frmMain.PatName = Nothing
        frmMain.lblPatName.Text = Nothing
    End Sub

    Private Sub frmStool_2_Report_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim rpt As New StoolReport
        Dim EmpSql As String = "SELECT * FROM StoolAnalysis WHERE ID=" & RecID & ""

        Dim Empdataset As New DataSet

        If Con.State = ConnectionState.Closed Then
            Con.Open()
            Dim EmpAdapter As New OleDbDataAdapter(EmpSql, Con)
            EmpAdapter.Fill(Empdataset, "StoolAnalysis")
            CryStool.ReportSource = Nothing
            rpt.SetDataSource(Empdataset)

            CryStool.ReportSource = rpt
            CryStool.Refresh()
            Con.Close()

        Else
            Dim EmpAdapter As New OleDbDataAdapter(EmpSql, Con)
            EmpAdapter.Fill(Empdataset, "StoolAnalysis")
            CryStool.ReportSource = Nothing
            rpt.SetDataSource(Empdataset)

            CryStool.ReportSource = rpt
            CryStool.Refresh()
            Con.Close()
        End If
        Empdataset.Reset()
    End Sub
End Class

والاتصال معرف في Module وهو كالتالي:
كود :
Imports System.Data.OleDb

Module functions
    Public Con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Application.StartupPath & "\azoumi.mdb")
End Module

فأين المشكلة؟

لكم تحية.
السلام عليكم

ارجو ارفاق المثال للتعديل عليه
لقد حللت المشكلة، وهي تتلخص في أنني أستدعي الـform الخاص بالتقرير مباشرة، والحل هو بتعريف متغير على انه نسخة من الـForm الخاص بالتقرير ومن ثم عرض هذا المتغير دون عرض الفورم الأصلي.