من یک گزارش تو کرییستال طراحی کردم، ولی بعد از طراحی دیتابیسم رو تغییر دادم، با آپدیت کردن set lacation بازم تو سیستم کلاینت دیتا بیسم رو نمی شناسه، ولی وقتی تو یه گزارش جدید یک کانشکشن استرینگ درست می کنم دیتا بیس رو می شناسه و بدون مشکل نشونش می ده
حالا می خوام کانشکن استرینگ بقیه گزارش ها رو هم عوض کنم تا تو اون گزارش ها هم دیتا بیس رو بشناسه
کسی می دونه چطور می تونم کانکشن استرینگ رو عوض کنم؟تعداد گزارش های من خیلی بالاست واقعا نمی تونم از اول درستشون کنم
کانکشن استرینگ رو چجوری نوشتین؟
معمولا . یا لوکال هاست میزنیم که سیستم خودمونه که باید آدرس پرتال رو بنویسیم و یا آی پی ولید سرور
زمان نوشتم پروژه لوکال هاست بود، ولی برای اجرا عوضش کردم و آی پی سرور رو نشوتم
الان روی سرور بدون مشکل گزارش ها اجرا می شه
ولی روی کلایینت مشکل دراه و نشون نمی ده
بیشتر توضیح بدین که اگه تونستیم راهنمایی کنیم!!!!
مثلا:
از چه ورژن کریستالی استفاده کردی؟
نوع پروژه یا بهتر بگم فایل ریپورت به چه صورته؟ حالت Design در نظر گرفتی برای کاربر یا گزارش آماده فقط نمایش؟
سورس قسمت ریپورت پروژه تونو ارسال کنید؟
گزراش آماده ، فقط از کاربر مثلا تاریخ و شماره دستگاه رو می گیره و گزارش روز رو بهش می ده
از OLE DB استفاده کردم
الان مشکل اینجا هست که بعد از ساختن SETUP گزارش ها تو سیستم سرور اجرا می شه ولی وقتی می ره رو سیستم کلاینت صفحه ای که تو عکس زیر هست نشون داده می شه
ببینید قسمت دیتا بیس رو بسته و حتی نمی تونیم دستی اسم دیتابیس رو بنویسیم و گزارش رو ببینم
در حالی که من وقتی با یک کانکشن جدید یک گزارش جدید می سازم و تو سیستم کلاینت اجرا می کنم گزارش رو نشون می ده
من فکر می کنم دیتابیس رو بعد از اینکه تغییر کرده نمی شناسه، نمی دونم شاید هم اشتباه می کنم
به هر حال با کانکشن جدید جواب می ده
دیتابیسو چجوری به ریپورت پاس میدین؟ بصورت ویزادی اوکی کردین؟
بهتره که دیتا بیس رو از طریق
crystalReportViewer1.ReportSource = objRpt;
به ریپورت پاس بدین اینجوری یوزر نیم و پسورد توسط سرور اوکی میشه و کاربر نمیبینه اطلاعات شمارو
این یه نمونه است:
objRpt = new CrystalReport1(); string connString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=|DataDirectory|\\db1.mdb"; string query = CreateSelectQueryAndParameters(); //if there is no item select, then exit from the method. if (!query.Contains("Column")) { MessageBox.Show("No selection to display!"); return; } try { OleDbConnection Conn = new OleDbConnection(connString); OleDbDataAdapter adepter = new OleDbDataAdapter(query, connString); DataSet1 Ds = new DataSet1(); adepter.Fill(Ds, "Customer"); objRpt.SetDataSource(Ds); crystalReportViewer1.ReportSource = objRpt; } catch (OleDbException oleEx) { MessageBox.Show(oleEx.Message); } catch (Exception Ex) { MessageBox.Show(Ex.Message); }
و یه نکته مهم:
کنترل کنید که در سطح شبکه به دیتابیس دسترسی داشته باشین!!!!
پورت SqlServer باید باز باشه برای استفاده در سطح شبکه ( برای این کار باید پورت 1433 را در اینباند firewall دسترسی بدین به همه! )
این رو هم بگم من بعد از عوض کردن کانکنشن استرینگ برنامه برای گذاشتن روی سرور کلاینت برای اینکه کانکشن گزراشم عوض بشه فقط رفتم توی محیط تو database expert و یک بار با آی پی سرور لاگین کردم همین
نه ببیند تو عکس مشخصه من مشکل یوزر و پس ورد ندارم مشکل من دیتابیس هست، الان یوزر و پس رو تو صفحه ای که باز شده خود کریستال نوشته ولی دیتابیس رو پیدا نکرده که بنویسه
اگر می شد برای همین گزارشی که طراحی کردم یک کانکشن استرینگ جدید رو جایگزین کانشکن استرینگ قبلی کنم فکر می کنم مشکل حل می شد
همه جای پروژه کار می کنه و اطلاعات رو از سرور می گیره فقط مشکل تو گزراش گیری ها هست
کنترل کنید که امکان اتصال به دیتابیس در شبکه وجود داره!!!
بله در سیستم کلاینت از تمام پروژه می شه حذف و درج و... رو انجام داد
این کارها رو انجام بدین!! ( درصورتی که سرور سیستم خودتون نیست )
اول Sql Server رو باز کنید
آی پی سرور رو بزنید ، نام کاربری و رمز رو هم بزنید اگر وصل شد که اوکی اگر وصل نشد مشکل اینجاست!!!
اینو امتحان کنید
برنامه ربطی نداره به این موضوع ولی کریستال ریپورت باید دسترسی داشته باشه به سرور
سیستم کلاینت اس کیو ال نداره
ولی وقتی یک ریپورت جدید می سازم تو سیستم کلاینت ریپورت رو بدون مشکل نشون می ده، پس یعنی دسترسی داره
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)