PDA

View Full Version : ریپورتام خیلی کندن کمکم کنید.



reham
جمعه 04 دی 1383, 10:14 صبح
من یه گزارش درست کردم با کریستال ریپورن تو دات نت.query رو تو برنامه میزنم بعد میریزم تو دیتاست بعد بایند میکنم به ریپورت و تو crystal report viewer نشون میدم.
مشکلم اینه که مثلا دیتا به 2000 تا میرسه ریپورت کند میشه.
میترسم به 4 یا 5000 تا برسه یه 5 دقیقه ای لود شدنش طول بکشه باید چی کار کنم.
نمیدونم چی کار کنم کمککککککککککککککککککککککک کککککککککککککککک

arshia_
جمعه 04 دی 1383, 11:08 صبح
چرا اینهمه مراحل اضافی طی می کندی...بهتر نیست مستقیم با کریستال ریپورت کار کنید؟....و از ابزار پیش نمایش و ... خود اون استفاده کنید...

setarehman
جمعه 04 دی 1383, 11:24 صبح
مستقیم از کریستال استفاده کردن سرعت گزارش رو کم میکنه ایشون هم اگه از command استفاده کرده باشن سرعت لود گزارش نباید کم باشه

reham
جمعه 04 دی 1383, 14:18 عصر
من از command استفاده کردم

یه چیزی مثل این

"dim my query as string="select * from t1

بعد command رو تعریف کردم و command text اون به این بایند کردم بعد query رو اجرا کردم و نتیجه رو تو دیتا ست ریختم
بعدشم data source مربوط به ریپورت رو برابر dataset قرار دادم و با crystal report viewer نمایش میدم

حدود 15 تا 20 ثانیه برای گزارش 1000 تایی طول میکشه اونوقت تعداد بالا بره چه شود
میخوام ببینم اشکال از برنامه نویسی من نباشه یا اینکه راه من درسته یا نه

ممنون از توجهتون :thnx: :thnx: :thnx: :thnx:

setarehman
شنبه 05 دی 1383, 07:12 صبح
منظور من از command یعنی اینکه شما به جای اینکه زمان طراحی فیلد ها رو بیارین داخل گزار ش یه command تعریف کنید و بعد جمله select رو داخل اون بنویسید و گزارش رو ایجاد کنید این بهترین روشه یا اینکه شما یه فرم خالی ایجاد کنید و بعد یه connection و recordset ایجاد کنید و گزارش رو با کد نویسی ایجاد کنید این دو روش شما اگه یک میلیون رکورد هم داشته باشید در عرض چند ثانیه گزارش رو لود میکنه

reham
شنبه 05 دی 1383, 19:24 عصر
من نفهمیدم روش من کدومشونه و باید چی کار کنم.من گفتم که چی کار میکنم.میشه منو دقیق تر راهنمایی کنید.خواهش میکنم. :thnx:

setarehman
یک شنبه 06 دی 1383, 07:19 صبح
شما خودتون بهتر میدونید از چه روشی استفاده کردید شاید هم از هیچ کدوم از این دو روش استفاده نکردید شما اگه از command استفاده کرده باشید باید کنار صفحه طراحی جایی که اسامی فیلدها هست به جای اسم database نوشته شده باشه command آیا این طور هست

reham
یک شنبه 06 دی 1383, 22:30 عصر
ممنون از راهنماییتون فکر نمیکنم این کاری رو که من انجام میدم بشه اسمشو command گذاشت.

BEGIN
دوشنبه 07 دی 1383, 07:50 صبح
سلام

دسترسی به دیتابیس توسط کریستال به دو مدل push و pull می باشد

در روش اول که مستقیما با دیتا بیس در ارتباط است نیاز به یک connection و یک دستور command می باشد

در دستور command همان دستور sqlcommand خودتان را می نویسید

روش دوم pull عینا همان روشی است که شما استفاده می کنید

برای راهنمایی بیشتر به MSDN مراجعه کنید و با کلمه کلیدی Report Data Access جستجو کنید

پیشنهاد می کنم شما روش اول هم امتحان کنید

در روش اول connection , command را اینجا می توانید پیدا کنید

بر روی command کلیک کنید ودستور خود را بنویسید

امیدوارم کمکتون کنه :oops: :oops:

موفق باشید

BEGIN
دوشنبه 07 دی 1383, 07:57 صبح
ببخشید روش دوم push است

که اشتباهی pull نوشتم ببخشید :oops: :oops: اول توجه نکردم الان دیدم


جدال

setarehman
دوشنبه 07 دی 1383, 09:22 صبح
بله این دقیقا یعنی استفاده کردن از command
البته توی کریستال 10یه روش دیگه هم برای وصل شدن به بانک هست

reham
سه شنبه 08 دی 1383, 19:53 عصر
از راهنمایی همتون ممنونم
حتما از روش دوم هم استفاده میکنم
ببینم سرعت کدوم یکی بهتره
ولی یه چیز عجیب وقتی یه user جدید رو ویندوز ایجاد میکنم سرعت report میره بالا بعد از چند روز دوباره کند میشه و با تغییر user دوباره خوب میشه
به نظر شما دلیلش چیه
می دونم مسخرست ولی به خدا همینه :گیج:

BEGIN
چهارشنبه 09 دی 1383, 06:22 صبح
البته توی کریستال 10یه روش دیگه هم برای وصل شدن به بانک هست

دوست عزیز setarehman تا انجا که من می دانم تنها دو روش وجود دارد که ذکر شد
از روش سوم اطلاعی ندارم ممنون می شم اگر توضیحی لطف کنید :wink:

BEGIN
چهارشنبه 09 دی 1383, 06:29 صبح
حتما از روش دوم هم استفاده میکنم
ببینم سرعت کدوم یکی بهتره
روش دوم روشی است که تا الان از ان استفاده می کردید منظورتان روش اول بود دیگه :sunglass:

من هم یک دلیل درباره روش دوم بگم شاید هم مسخره باشد
ولی باعث می شه مانند روش اول کریستال سریع لود بشه
به خدا من چند بار امتحان کردم تا مطمئن بشم جواب اتفاقی نیست
این کار که می گم رو امتحان کنید


من از command استفاده کردم

یه چیزی مثل این

"dim my query as string="select * from t1

بعد command رو تعریف کردم و command text اون به این بایند کردم بعد query رو اجرا کردم و نتیجه رو تو دیتا ست ریختم

تا اینجا درست حرفی نیست


بعدشم data source مربوط به ریپورت رو برابر dataset قرار دادم و با crystal report viewer نمایش میدم
اما از اینجا اینطوری عمل کنید

TABLE که در کریستال از ان استفاده کردید با TABLE متناظر ان در دیتا ست نسبت بدهید

اگر از یک TABLE در طراحی استفاده کردید بدین صورت


Dim cry As New CrystalReport1
cry.SetDataSource(dataset1.Tables(0))

در غیر اینصورت برای هر table بدین صورت استفاده کنید


cry.Database.Tables("student").SetDataSource(dataset1.Tables("student"))


dataset1 نام دیتا ستی است که ان را پر کردید
همانطور که می دانید می توانید به جای اسم جداول از اندیس ان استفاده کنید

نتیجه که با این تفاوت بدست اوردم
برای 13000 رکورد بدون نسبت دادن جداول 20 ثانیه و با نسبت دادن ان 2-3 ثانیه که با روش اول یکی بود
حالا اگر جواب داد مختارید از هر روش که خواستید استفاده کنید
چون نتیجه هر دو یکی است
من خودم به شخصه روشی که تا الان از ان استفاده می کردید را ترجیح می دم :D

امیدوارم کمکتون کنه
:oops:

setarehman
چهارشنبه 09 دی 1383, 07:31 صبح
فکر میکنم اگه کد رو این جور بنویسید بهتره و چه از یه table استفاده کنید و چه چند تا نیازی نیست اسم جدول رو بنویسید

Report.Database.Tables(1).SetDataSource dataset, 3
این کد به فرض اینه که شما یه command داشته باشید حالا اگه مثلا دو تا داشتید این خط رو یه بار دیگه تکرار میکنید و فقط به جای Tables(1 مینویسی table(2
در مورد روش سوم نحوه اتصال کریستال 10یه عنوان دیگه هم داره که به نام repository هست که با اسم سرور و یوزر و پسورد ویندوز به بانک وصل میشه و گزارش رو میسازه اما خوب این روش خیلی کاربردی نیست چون اون وقت مجبورید گزارش رو هر جایی که بردید همون یوزر و پسورد رو در ویندوز ایجاد کنید

reham
چهارشنبه 09 دی 1383, 18:07 عصر
من تو دیتاست یک جدول بیشتر ندارم اونم باید با اندیس نسبت بدم؟
جدال عزیز من دقیقا همین کارا رو میکنم
Dim cry As New CrystalReport1
cry.SetDataSource(dataset1.Tables(0))


و ریپورتم 20 ثانیه طول میکشه؟
اینکه گفتم
بعدشم data source مربوط به ریپورت رو برابر dataset قرار دادم و با crystal report viewer نمایش میدم
همین کاری هست که شما گفتید.

BEGIN
پنج شنبه 10 دی 1383, 08:26 صبح
دوست عزیزم setarehman از توضیحی که لطف کردید خیلی ممنونم :thnx: اگردقت کنید من هم گفته بودم

همانطور که می دانید می توانید به جای اسم جداول از اندیس ان استفاده کنید
در ضمن میدانید که اندیس جداول از 0 شروع می شود

reham عزیز نمی دونم چرا برای من جواب می ده :گیج:
راستی شما روش اول هم امتحان کردید شاید از اون طریق موفق شوید :cry:

reham
پنج شنبه 10 دی 1383, 14:57 عصر
ممنونم از راهنمایی همتون. :thnx:

rezanew
پنج شنبه 10 دی 1383, 20:38 عصر
سلام
تو اون روش دوم که از command استفادهد کردید چطوری می شه از طریق کد guery اون را تغییر داد؟

setarehman
جمعه 11 دی 1383, 08:44 صبح
خوب هر شرطی رو که خواستید دوباره عوض کنید منتها شما باید یه connection ایجاد کنید و recordset که به بانک وصل بشید و دوباره یه query جدید بنویسید

rezanew
چهارشنبه 16 دی 1383, 08:37 صبح
ممنون. این روشی که گفتید از طریق کد چگونه می شه استفاده کرد می شه مثال بزنید

setarehman
چهارشنبه 16 دی 1383, 11:06 صبح
با فرض اینکه شما کانکشن بانک رو تعریف کردید ادامه کد به صورت زیر هست
حالا جمله select رو هر جور که میخواید بنویسید

Dim rs As ADODB.Recordset
Dim Report As New CrRep

"rs.open,"SELECT Tbl.c, Tbl.n FROM Tbl where Tbl.c>0 order by Tbl.n
Report.Database.Tables(1).SetDataSource rs, 3

tayebeh
یک شنبه 09 مهر 1385, 11:08 صبح
با سلام
من هم در گزارشاتم مشکل پائین بودن سرعت گزارشگیری رو داشتم برای رفع این مشکل ، از stored procedure استفاده کردم و الان سرعت گزارشاتم خیلی بالاست . به شما هم پیشنهاد می کنم اگر بانکتون اس کیو ال سرور هست همین کارو بکنید.

Maryam_y_m
یک شنبه 09 مهر 1385, 13:29 عصر
حدود 15 تا 20 ثانیه برای گزارش 1000 تایی طول میکشه

این سرعتی که شما دارید تقریبا معمولیه و کند نیست. در ضمن indexگذاری شما روی table خیلی مهم است

programmermp
سه شنبه 11 مهر 1385, 21:51 عصر
با سلام
من هم در گزارشاتم مشکل پائین بودن سرعت گزارشگیری رو داشتم برای رفع این مشکل ، از stored procedure استفاده کردم و الان سرعت گزارشاتم خیلی بالاست . به شما هم پیشنهاد می کنم اگر بانکتون اس کیو ال سرور هست همین کارو بکنید.

با سلام

می شه کد stored procedure مربوطه و همچنین کد فراخوانی اون در برنامه رو بگذارید

من هم همین مشکل رو دارم

با تشکر

tayebeh
یک شنبه 16 مهر 1385, 07:35 صبح
باسلام
من توضیحات لازم رو در یک فایل ورد بصورت زیب شده گذاشتم امیدوارم بتونید استفاده کنید. حقیقتش زیاد بلد نیستم با این ویراستار کار کنم و چون فارسی-انگلیسیش بهم می خورد ترجیح دادم که ضمیمه اش کنم.
در ضمن یه نکته هم بگم اونم اینه که 15-20 ثانیه برای یه گزارشی با 1000 رکورد بالاست . من گزارشهایی دارم که تقریبا 3000 رکورد دارند و تقریبا 2-3ثانیه طول می کشه تا نمایش داده بشوند.
امیدوارم که بدردتون بخوره.
بای

programmermp
شنبه 07 بهمن 1385, 20:27 عصر
باسلام
من توضیحات لازم رو در یک فایل ورد بصورت زیب شده گذاشتم امیدوارم بتونید استفاده کنید. حقیقتش زیاد بلد نیستم با این ویراستار کار کنم و چون فارسی-انگلیسیش بهم می خورد ترجیح دادم که ضمیمه اش کنم.
در ضمن یه نکته هم بگم اونم اینه که 15-20 ثانیه برای یه گزارشی با 1000 رکورد بالاست . من گزارشهایی دارم که تقریبا 3000 رکورد دارند و تقریبا 2-3ثانیه طول می کشه تا نمایش داده بشوند.
امیدوارم که بدردتون بخوره.
بای


سلام

من یک مشکل دارم اون هم اینه که نمی دونم کجا باید این stored procedure رو بنویسم

منظورم توی sql server هست کجاش باید نوشت

آینار-آینار
سه شنبه 11 اردیبهشت 1386, 10:14 صبح
سلام
من قبلا از دیتا ست استفاده می کردم برای گرفت گزارش اما چون اولین باری که گزارش می گیریم سرعت پایین بود از stored procedure استفاده کردم اما بازم اولین باری که گزارش می گیرم سرعت پایینه

ممنون می شم راهنمایی کنید

sm
سه شنبه 11 اردیبهشت 1386, 10:43 صبح
در کل این که میگین سرعت لود اولین بار زیاده و بقیه کمه میخواستم بپرسم شما هربار مقادیر رو به گزارش رد میکنید و Report Source رو هم ست میکنید یا اینکه نه، وقتی Refresh رو میزنید زود میاره؟
درباره سرعت پایین هم مطمئنا برمیگرده به کوئریتون... اونو بازبینی کنید. البته بعضی از مواقع هم بدلیل اینکه جداول زیادی در کوئری استفاده میشه طبیعتا سرعت کم میشه.

موفق باشید

آینار-آینار
سه شنبه 11 اردیبهشت 1386, 13:45 عصر
سلام
ببینید دو تا گزارش متفاوت اگر خواسته باشم بگیرم ترتیب گرفتنشون در سرعت موثره فرض کنید g1 و g2 دو تا گزارش مختلف باشن با کوئری های متفاوت اگر اول g1 را بگیرم و بعد g2 را ، g1 کنده و g2 سریع اما اگر ترتیب را عکس کنم g1 سریع و g2 کند میشه در کل فقط اولین گزارش برنامه کنده
من هر بار مقادیر را رد می کنم