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

تغيير السيرفر لتقارير كريستال ريبورت

بدأه رحيّم في 27 مايو 2013 · 12 رد · 6,492 مشاهدة · في تصميم وبرمجة التقارير
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

صممت تقرير كريستال في فيجول بيسك 10 بروفيشنال ... وشغال تمام 

المشكلة عند نقل البرنامج إلى جهاز آخر سيكون اسم السيرفر مختلف عن اسم السيرفر لدي

وهنا لم يعمل التقرير وطلب السيرفر على الإسم الذي في جهازي وطلب إسم المستخدم وكلمة المرور .. وفي جهازي يفتح السيرفر بحساب الويندوز

السؤال هو :

كيف أجعل عبارة الإتصال في الريبورت مأخوذة من عبارة الإتصال في البرنامج

 

عبارة الإتصال في البرنامج لدي موضوعة في موديل أستدعيه في الفورمات ... وهذا كود الموديل

 

Public con As New SqlClient.SqlConnection("data source=SERVERNAME;Initial Catalog=dbname;integrated security=SSPI;timeout=10")
#2

لابد من تخزين سلسلة الاتصال داخل ملف نصي مشفر حتي تستطيع تغيير معلومات الدخول بسهولة عندما تقوم بنقل البرنامج علي جهاز آخر

 

ارجو الاطلاع علي هذه الموضوعات

 

مشاكل تشغيل المشروع عند العميل

 

تشفير Connection String

مشكلة الارفاق القاعده

طريقه عمل project setup بأفضل طريقه !

الاتصال بقاعدة بيانات sql على الشبكة

اريط ان ادخل قاعدة بيانات Sel Serverبتاعتى فى موقعى

Database Publishing Wizard

Connection strings for SQL Server 2005

برنامج اساسى و عميل على شبكة محلية

حل مشكلة TableLogOnInfo أثناء فتح تقرير الكريستال ريبورت "التقرير لا يستطيع تحديد مسار القاعده"

طباعة معلومات على شكل بطاقة دفعة واحدة

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#3

قد يفيدك هذا الكود

        try
        {
            ReportDocument crRep = new ReportDocument();
            crRep.Load("c:\aa.rep");
            
            SqlConnectionStringBuilder csbDb = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["ConnectionString1"].ToString());
            Tables crTables;
            TableLogOnInfo crTableLogOnInfo;
            ConnectionInfo crConnectionInfo = new ConnectionInfo();
            crConnectionInfo.ServerName = csbDb.DataSource.ToString();
            crConnectionInfo.DatabaseName = csbDb.InitialCatalog.ToString();
            crConnectionInfo.UserID = csbDb.UserID.ToString();
            crConnectionInfo.Password = csbDb.Password.ToString();
            crTables = crRep.Database.Tables;
            foreach (CrystalDecisions.CrystalReports.Engine.Table crTable in crTables)
            {
                string x = crTable.Name;
                crTableLogOnInfo = crTable.LogOnInfo;
                crTableLogOnInfo.ConnectionInfo = crConnectionInfo;
                crTable.ApplyLogOnInfo(crTableLogOnInfo);
            }

            crRep.SetParameterValue("@nSoicalGovCode", "1");
            crRep.SetParameterValue("@nSocialDeptCode","30");
          

        CrystalReportViewer1.ReportSource = crRep;
        }
        catch (Exception EX)
        { 
            Label1.Text = EX.Message.ToString();
        }
#4

أستاذي محمد 

جزاك الله خيراً على هذه الروابط ... ومما كنت أبحث عنه هذه المشاركة

/index.php/topic/242026-%D8%A7%D9%84%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%A8%D9%82%D8%A7%D8%B9%D8%AF%D8%A9-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-sql-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A9/#entry1197689

ولكن المشكلة أنني لم أستطع استخدامها فعلياً في عبارة الإتصال

ففي برنامجي قمت بعمل موديل وعرفت متغير عام عبار عن جملة الإتصال حيث يمكنني استدعائها من أي فورم والعبارة هي كالتالي

    Public con As New SqlClient.SqlConnection("data source=" + My.Computer.Name & "\SQLEXPRESS;Initial Catalog=’Mydbname;integrated security=sspi;timeout=10")

تعبت وأنا أحاول تغييرها إلى أن تأخذ عبارة الإتصال من ذلك الملف .. حولت نتيجة ملف Configuration.vb إلى أن تظهر الآيبي فقط بدون فائدة ... قرأت كافة الردود وطبقت مافيها بدون فائدة ...

من ضمن تجاربي

dim con As New SqlClient.SqlConnection("data source=" + Configuration.GetConnectionString & "\SQLEXPRESS;Initial Catalog=Mydbname;IntegratedSecurity=sspi;timeout=10")

    'Dim ConnStr = String.Format("data source={0};Initial Catalog=Mydbname;IntegratedSecurity=sspi", File.ReadAllText("Configuration.txt"))
    'Dim con As New SqlClient.SqlConnection(ConnStr)

هاتين الطريقتين وغيرها لم يفلحوا

هذا كله بالنسبة لاتصال البرنامج ككل بقاعدة البيانات ... ثم بعد ذلك تأتي مشكلة التقارير بالكريستال حيث أنني لم أستطع القيام بذلك رغم عدة محاولاتي له

===========================

وبالنسبة للأستاذ كريم

حولت الكود إلى كود vb ولكني لم أفهمه ... وماهي العبارات التي أغيرها بما يتناسب مع برنامجي وقاعدة بياناتي ...

هل تتفضل بشرح بسيط عن هذا الكود

اعذروني أساتذتي

#5

أخي الفاضل

المسألة كلها تكمن في مكان وضع سلسلة الاتصال

فعند تعريف سلسلة الاتصال كمتغير عام لكي تستخدمة في كافة فورم المشروع فلابد من وضعها في Module جديد 

 

مثال لتعريف السلسلة في module

 

1- قم بانشاء موديول جديد وضع بداخلة سلسلة الاتصال

 

Imports System.Data.SqlClient
Imports System.Data

Module MYConn
    Public sqlcon As New SqlConnection("Server=.\MSSSQLSERVER;Database=MYBD;user id=sa;password=******;Trusted_connection=yes;")
End Module
بعد ذلك يمكنك استخدام الاتصال في باقي الفورم عادي بما فيم الكريستال ريبورت عن طريق فتح وغلق الاتصال
 
post-46243-0-11432100-1369891363_thumb.j
 
مثال
sqlcon.openstatments............sqlcon.close

 

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

 

بالتوفيق

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#6

أستاذ محمد

جزاك الله خير على تفاعلك

ذكرت في الرد السابق لي أنني أستخدم سلسلة اتصال كمتغير عام ( داخل موديل ) وجربت بع ردك بدون فائدة

هذا الموديل

Imports System.Data.SqlClient
Imports System.Data
Imports System.IO

Module Module2
    Public ConnStr As String = String.Format("data source={0};Initial Catalog=Mydbname;IntegratedSecurity=sspi", File.ReadAllText("Configuration.txt"))
    Public con As New SqlConnection(coonstr)

    Public SQLDataAdapter1 As New SqlClient.SqlDataAdapter
    Public sqldataset1 As DataSet

End Module

وهذه صورة الخطأ

post-11055-0-17333400-1369900837_thumb.j

 

كان الموديل قبل انشاء ملف التكست

Public con As New SqlClient.SqlConnection("data source=" + My.Computer.Name & "\SQLEXPRESS;Initial Catalog=Mydbname;integrated security=sspi;timeout=10")
#7

أخي الفاضل

لقد بتصميم لك مثال يوضح وضع سلسلة الاتصال داخل Module واستخدامها في جميع الفورم

فقط المطلوب منك ضبط معلومات الاتصال طرفك واسم الجداول وما الي ذلك حتي يعمل المثال طرفك

WindowsApplication1.rar

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#8

شكراً وعفواً أستاذي

لقد وضحت في ردي السابق أنني أستخدم سلسلة اتصال داخل الموديل وهي شغالة 100% حتى بعد نقل البرنامج ...

ما أريده الآن شيئين : ( الثاني أهم - لأن البرنامج شغال كما ذكرت عدا الكريستال ) 

* تعديل السلسلة لتقبل المتغير ( أخذ الآيبي من التكست ) .

* كود تعديل مصدر التقرير ( كريستال ريبورت ) ليأخذ بياناته من هذا الاتصال .

#9

ممكن يا أخي ترفق لنا مثال لكي يساعدني في فهم المطلوب ومحاولة مساعدتك فيه

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#10

عفواً على التأخير والإزعاج

في المرفق - أعتقد - لن يعمل عندك الكريستال لأنه مربوط بالسيرفر عندي ...

كيف أجعله يعمل عند المستخدم من دون تدخل منه .. ( في مثالنا كيف تجعله يعمل عندك لو لم يكن عندك السورس - بافتراض أنك مستخدم عادي - ) 

 

وكذلك موجود فيه موديل الإتصال ... وبداخله الشرح ( افتراضياً لن يعمل البرنامج لأن السلسلة الصحيحة غير مفعلة - الشرح بداخل الموديل ) 

 

كذلك أستاذيّ ( محمد وكريم )  أجدها فرصة لأرفق ما كنت أبحث عنه في الموضوع

/index.php/topic/278041-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-%D9%81%D9%8A-%D8%A3%D8%B9%D9%85%D8%AF%D8%A9-%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-%D8%AA%D8%B9%D8%B1%D8%B6-%D8%B9%D9%84%D9%89-%D8%B4%D9%83%D9%84-checkbox/

ففي الفورم الأول ( كود الخيار الثاني ) توضيح ومثال لما أريده ..

rohiem1.rar

#11

أخي الفاضل

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

 

المثال الذي ارفقتة يوجد بداخلة أخطاء كثيرة هذا بالاضافة الي انه مصمم علي الاصدار 2010 وانا استخدم 2008 وعلي اي حالة عملت لك مثال آخر سريعا

يحتوي علي التالي

 

1- كما تشاهد في الصورة الاولي هي عبارة عن شاشة يتم تسجيل فيها معلومات السيرفر الذي ستتصل به بعد ذلك ستقوم بحفظ هذه الاعدادات في ملف نصي

مشفر داخل ملفات المشروع

 

 post-46243-0-46552400-1370092830_thumb.j

 

2 - بعد الانتهاء تسجيل بيانات الدخول علي السيرفر ستقوم بالضغط علي زر Open Report ليتم فتح جريد فيو وبها البيانات المراد طباعتها

واذا لم يفتح معك البرنامج بعد حفظ الاعدادات قم بغلق البرنامج وفتحة مرة اخري

 

post-46243-0-61576300-1370092877_thumb.j

 

3- والان كما تشاهد في الصورة المرفقة البرنامج فتح بناء علي معلومات السيرفر التي قد سجلناها سابقا والبيانات ظهرت امامك كما تشاهد

 

post-46243-0-74643300-1370092905_thumb.j

 

4- بعد مشاهد البيانات كل المطلوب منك الضغط علي زر طباعة لتشاهد البيانات داخل تقرير Crystal Report

 

 post-46243-0-21655300-1370092964_thumb.j

 

5- وأخيرا يمكنك عمل الخطوات عندما تريد الاتصال مع سيرفر آخر بمعلومات مختلفة عن المعلومات التي قد ادخلناها سابقا والعمل معها بدون مشاكل وسيقوم التقرير بالعمل علي سيرفر ستقوم بالاتصال به لكن لابد طبعا ان يكون السيرفر الذي ستتصل به موجود بداخلة قاعده البيانات التي ستعمل عليها والموجود بدخلها

الجداول التي سيتصل بها التقرير لان مصدر التقرير طبعا مبني علي جداول موجوده علي جهازي وكل المطلوب من حضرتك اضافة مصادر البيانات الجديده بمسميات الجداول الموجود طرفك

 

مرفق المشروع الذي قمت بعمل المثال عليه

 

بالتوفيق

Encrypt-Decrypt-connection string.rar

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#12

السلام عليكم 

احب اضيف معلومة ليك اخى وهى بعد استخدمي الكثير وصلت الى افضل حلول طباعة التقارير بدون مشاكل الاتصال وكل هذا وهو تصميم تقرير مبني على Connection string   

وطبعا ال DATA SET وهى بتعمل بتاخد معلومات الاتصال من  Connection string  وبكدا يكون التقرير مفيش فيه اى مشكلة اتصال لانه مبنى على داتا سيت وجرب وشوف 
طبعا هتسالنى ازاى اعمل ده هفيدك فى الويب والديسك توب اكيد مش هيختلف كتير طبعا بس بقالى كتير مشتغلتش ديسك توب ابحث وهتلاقي بس انا قلت ليك الفكره وعن تجربة افضل طرق الحفظ والحذف والتعديل و  الطباعه استخدم strongly typed data set  وبعدان صمم التقرير وابنيه على داتا سيت واعمل كل جمل استعلامك ومررها لدتا ست واعرض فى التقرير النتيجة بدون اى مشاكل وكل ده بسهوله وسرعة وقوة كمان جرب وابحث وبجد الطريقة ديه مريحنى جدا فى الشغل 

وده مثال على الويب لاستخدام طباعة تقرير زى ما بقولك 

//attachment/141864

 

وبالتوفيق جميعا ان شاء الله 

لك الحمدُ ،،، على - مَا مضى . .

وَ لكَ الحمدُ ،،، على مَا أنا ، به الآن . .
وَ لكَ الحمدُ ،،، على - مَا سيأتي . .
وَ لكَ الحمدُ ،،، على كُلِ حال . .
الحمد لله على نعمة الاسلام و كفى بها نعمة

#13

شكراً لكم جميعاً

لقد جربت طريقتك أستاذي محمد .. واشتغلت .. ولكن مشكلتها أنها تفتح كل مرة نافذة التسجيل ولم أتعب نفسي في أن أجعلها تظهر عند عدم وجود السيرفر فقط ... 

وقد استغربت من عمل الطريقتين في أمثلتهما ولكن في برنامجي لا تعملان ...

فراجعت كود سلسلة الإتصال فوجد أنني نسيت المسافة بين الكلمتين  Integrated Security   وهذا كود الكونفقريشن الذي فيه الخطأ ... فلما عدلته اشتغل البرنامج صح

Imports System.IO

Public Class Configuration
    Shared Function GetConnectionString() As String
        Dim ConnStr As String = String.Format("data source={0};Initial Catalog=Mydataname;Integrated Security=sspi", File.ReadAllText("Configuration.txt"))
        Return ConnStr
    End Function
End Class

 

وبالنسبة لتقارير الكريستال فهذا آخر كود توصلت إليه من مثال أستاذي محمد ( بس حولت بدل الداتاتيبل سويت داتا سيت - لأن عندي أكثر من جدول ) وجعلت كل الكود في حدث زر الفتح ليعمل البارامتر الذي وضعته في التقرير ( لأنه يأخذ قيمته من الفورم الذي فيه الزر )

وهذا كود زر فتح التقرير

 

        con.Open()
        Dim cmd As New SqlCommand("Select * from table1", con)
        Dim cmd1 As New SqlCommand("Select * from table2", con)
        Dim cmd2 As New SqlCommand("Select * from table3", con)

        Dim dt As New DataSet

        Dim da = New SqlDataAdapter(cmd)
        Dim da1 = New SqlDataAdapter(cmd1)
        Dim da2 = New SqlDataAdapter(cmd2)

        da.Fill(dt, "table1")
        da1.Fill(dt, " table2")
        da2.Fill(dt, " table3")

        Dim rpt As New CrystalReport1

        rpt.Load(Application.StartupPath & "\CrystalReport1.rpt")
        rpt.SetDataSource(dt)

        rpt.SetParameterValue(0, ComboBox1.Text)

        Dim newviewre As New viewre1
        newviewre.CrystalReportViewer1.ReportSource = rpt
        newviewre.Text = "  كشف "

        newviewre.CrystalReportViewer1.Refresh()
        newviewre.Show()

        con.Close()

جزاكم الله خيراً

وبقيت مشكلة البحث أرفقت الملف في موضوعها 

/index.php/topic/278041-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-%D9%81%D9%8A-%D8%A3%D8%B9%D9%85%D8%AF%D8%A9-%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-%D8%AA%D8%B9%D8%B1%D8%B6-%D8%B9%D9%84%D9%89-%D8%B4%D9%83%D9%84-checkbox/

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

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

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

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

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