• 0
رحيّم

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

سؤال

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

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

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

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

السؤال هو :

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

 

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

 

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

 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

12 إجابة على هذا السؤال .

  • 0

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

 

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

 

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

 

تشفير Connection String

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

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

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

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

Database Publishing Wizard

Connection strings for SQL Server 2005

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

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

        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();        }
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أستاذي محمد 

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

http://arabteam2000-forum.com/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 ولكني لم أفهمه ... وماهي العبارات التي أغيرها بما يتناسب مع برنامجي وقاعدة بياناتي ...

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخي الفاضل

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

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

 

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

 

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

 

Imports System.Data.SqlClientImports System.DataModule 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

 

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

 

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أستاذ محمد

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

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

هذا الموديل

Imports System.Data.SqlClientImports System.DataImports System.IOModule 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 DataSetEnd 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")

 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخي الفاضل

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

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

WindowsApplication1.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

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

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

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

 

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

 

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

http://arabteam2000-forum.com/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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخي الفاضل

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

 

المثال الذي ارفقتة يوجد بداخلة أخطاء كثيرة هذا بالاضافة الي انه مصمم علي الاصدار 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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم 

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

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

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

http://arabteam2000-forum.com/index.php?app=core&module=attach&section=attach&attach_id=141864

 

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

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

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

Imports System.IOPublic 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 FunctionEnd 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()

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

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

http://arabteam2000-forum.com/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/

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .