الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة في توصيل التقرير في الدوت نت

بدأه eng_sayed في 19 أبريل 2008 · 10 رد · 1,249 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاتة

في مشكلة بتقابلني في التقارير

انا بعمل التقرير وبشتغل تمام بس وانا بعمل التقرير بيطلب مني مكان الداتا بيز

والتقرير بيشتغل وتمام

لكن لو غيرت مكان ملف المشروع التقرير مش هايشتغل لان الباس بتاع التقرير اتغير

راجو من الاخوة المبرمجين الرد بسرعة

في مثال مرفق يارت التعديل ووضع الكود اللي بيغير مسار قاعدة البيانات

يارت بعد التعديل ارفاق الملف تاني

علما لو وضعت المشروع علي c

هايشتغل لكن لو غيرت مكانو مش هايشتغل التقرير

الرجاء الرد للاهمية

وشكرا جزيلا

WindowsApplication1.rar

#2

طبيعي حدوث هذه المشكلة لديك لأنه لديك عدة أخطاء:

- الاعتماد على النظرية الخاطئة في أنك إذا أردت تضمين أي شئ مع البرنامج فيجب نسخه إلى مجلد Bin هذا الأمر غير كافي ولايحل هكذا مشاكل بل يجب إضافة ذلك الملف للمشروع عن طريق النقر بزر الفأرة اليميني على المشروع واختيار الأمر المناسب من قائمة Add وإضافة ذلك الملف من هناك لقائمة ملفات المشروع ثم ضبط الخصائص المناسبة حسب نوع الملف

- إذا نقرت في الـ Solution Explorer بزر الفأرة اليميني على ملف التقرير K.rpt وفتحت خصائصه ستجد الخاصية Build Action مضبوطة إلى Embedded Resource كما هو مفترض وهو الوضع الافتراضي عندما تضيف ملف تقرير للمشروع وهذه الخاصية تعني أن هذا الملف سيتم دمجه كـ Resource داخل الملف التنفيذي عندما نقوم بعمل Build للمشروع

- بناء على ما تقدم لحل المشكلة في كودك بدلا من أنك تستخدم ملف التقرير الخارجي كما في كودك التالي

CrystalReportViewer1.ReportSource = "k.rpt"

نستخدم التقرير الذي قامت بيئة التطوير بإدخاله لنا ضمن الملف النفيذي لذا بتغيير بسيط على كودك السابق أصبحنا نستخدم ملف التقرير من داخل الملف التنفيذي كما يلي

		Dim rp As New k
		CrystalReportViewer1.ReportSource = rp

- بالنسبة لقاعدة البيانات يجب نسخها مع الملف التنفيذي إلى نفس المجلد المنسوخ إليه الملف التنفيذي ويمكنك تغيير مصدر البيانات المرتبط بالتقرير عن طريق الوظيفة SetDataSource الخاصة بالتقرير

تم تعديل هذه المشاركة بواسطة محمد سامر أبو سلو في 19 أبريل 2008 في 22:38

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#3

السلام عليكم ورحمة الله وبركاتة

اولا احب اشكر حضرتك علي الرد

انا فهمت كلام حضرتك كلو

بس في الاخر مش فاهم

CrystalReportViewer1.ReportSource = New k

يارت حضرتك توضح اكتر علشان النقطة مهمة جدا

وشكرا جزيلا

#4

اتفقنا أن التقرير تمت إضافته كمصدر داخل الملف التنفيذي ولكي نستخدم هذا المصدر يجب إنشاء نسخة جديدة منه ثم وضعها كقيمة في الخاصية ReportSource وهذا في الكود الذي تسأل عنه

وربما ستلاحظ أنني قد عدلت قليلا على ردي أثناء كتابتك لردك فقد غيرت الكود من

CrystalReportViewer1.ReportSource = New k

إلى

Dim rp As New k
		CrystalReportViewer1.ReportSource = rp

وذلك لسببين: الأول هو التوضيح والثاني أنت ربما تحتاج لتغيير بعض خصائص التقرير قبل اسناده للخاصية ReportSource مثل ضبط مصدر البيانات باستخدام الطريقة SetDataSource

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#5

هي فعلا المشكلة كلها في مسار قاعدة البيانات

اناعايز قبل ما يشوف التقرير اظبط المسار

لكن خاصية

SetDataSource

غير موجودة في خصائص

CrystalReportViewer1

ياريت الكود كامل

وشكرا جزيلا

#6

الخاصية SetDataSource هي من خصائص التقرير وليست من خصائص CrystalReportViewer

انظر هذا المثال من مشروع لي

			Dim rep As New DisksArchiveRep
			rep.SetDataSource(DiskArchive.DisksArchiveDataSet)
			CrView.SelectionFormula = ""
			CrView.ReportSource = rep
			CrView.RefreshReport()

لاحظ أنني أقوم هنا بضبط قيمة الوظيفة SetDataSource العائدة للتقرير قبل ربطه بـ Crystal ReportViewer

وهذا مثال آخر من نفس المشروع

			   Dim rep As New DisksCurrentRep
				rep.SetDataSource(DiskArchive.DisksArchiveDataSet)
				CrView.ReportSource = rep
				CrView.SelectionFormula = "{DISKS.DSKID}= " & DiskArchive.DSKIDTextBox.Text
				CrView.RefreshReport()

طبعا الـ DataSet يجب أن تكون مملوءة بالبيانات قبل ربطها بالتقرير كي لايظهر فارغا

تم تعديل هذه المشاركة بواسطة محمد سامر أبو سلو في 19 أبريل 2008 في 23:30

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#7

Dim rep As New k

rep.SetDataSource(k.DisksArchiveDataSet) هنا في خط تحت الكلام دة

CrystalReportViewer1.SelectionFormula = "" اكتب اية بين الدبل كوتيشن مسار قاعدة البيانات

CrystalReportViewer1.ReportSource = rep

CrystalReportViewer1.RefreshReport()

اولا هل انا عوض مظبوط

ياريت حضرتك تكتبلي التعويض المظبوط

وشكرا جزيلا

انا اسف جدا تاعب حضرتك

تم تعديل هذه المشاركة بواسطة eng_sayed في 19 أبريل 2008 في 23:37

#8

أولا - انس موضوع الـ SelectionFormula أنا قمت بنسخ الكود كما هو وقد وضعتها فارغة لأسباب تتعلق برنامجي يمكنك تجاهل هذا السطر على كل حال قيمة هذا السطر تكون مماثلة لقسم Where في عبارة select

ثانيا - أنت تبرمج برنامج قواعد بيانات يجب أن يكون لديك DataSet عامة للمشروع تحتوي على البيانات المملوءة من قاعدة البيانات وهي التي تستخدمها هنا كقيمة لـ SetDataSource إلا إن كنت ممن يقومون بعمل كل شئ بالكود ولايستخدمون الـ DataSet و الـ TableAdapter لتسهيل أمورهم ففي هذه الحالة يؤسفني أنني سأقول لك أنني لاأستطيع المتابعة معك أكثر من هذا

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#9

شكرا جزيلا

#10

بسم الله الرحمن الرحيم

الحمد لله والشكرلله

بعد البحث ربنا وفقني ووصلت للكود الصح

الكود كامل

ربنا يوفقكم

Imports System.Data.OleDb

Public Class Form1

Public cn As New OleDbConnection

Public cmd As New OleDbCommand

Public da As New OleDbDataAdapter

Public ds As New DataSet

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=store.mdb;Persist Security Info=False"

cn.Open()

cmd.Connection = cn

cmd.CommandType = CommandType.Text

ds.Reset()

cmd.CommandText = "select * from item22"

da.SelectCommand = cmd

da.Fill(ds, "item22")

Dim C1 As CrystalDecisions.CrystalReports.Engine.Table

Dim C2 As CrystalDecisions.Shared.TableLogOnInfo

Dim Rpt As New k ' .Rpt من غير

For Each C1 In Rpt.Database.Tables

C2 = C1.LogOnInfo

With C2.ConnectionInfo

.ServerName = ""

.DatabaseName = Application.StartupPath & "\store.mdb"

End With

C1.ApplyLogOnInfo(C2)

Next C1

CrystalReportViewer1.ReportSource = Rpt

End Sub

End Class

كلملة اخيرة ياريت اللي يشوف اخ لية في المندي بيسال سؤال وهو عارف الاجابة مايتكسلش ويرد علية

المنتدي دة علشان ناخد من بعض وندي لبعض مش ناخد بس

وشكرا جزيلا

#11

السلام عليكم

يمكنك أخي تتبع الرابط التالي هنـــا وان شاء الله سوف تجد فيه الجواب

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…