View Full Version : سوال: نوشتن دستور where در کریستال
mohammad_2039
پنج شنبه 18 فروردین 1390, 21:52 عصر
با سلام
میخوام یه فرمول بنویسم تو کریستال که فیلد قیمت رو مقادیرش رو جمع کنه مثلا از جایی که number برابر 11200 باشه.
با تشکر
mohammad_2039
جمعه 19 فروردین 1390, 17:27 عصر
بابا یعنی تو کریستال با این عظمت نمیشه یه دستور به این سادگی نوشت ؟ من که باورم نمیشه؟ گیج شدم اینجوری :گیج:
sarbaz_esf
شنبه 20 فروردین 1390, 11:22 صبح
دوست عزیز دیتا تایپ(data type ) فیلد قیمت از چه نوعیه؟
mohammad_2039
شنبه 20 فروردین 1390, 12:33 عصر
دوست عزیز دیتا تایپ(data type ) فیلد قیمت از چه نوعیه؟
با سلام و تشکر
قیمت از نوع عدد (bigint) , و number از نوع رشته (nvarChar)
sarbaz_esf
شنبه 20 فروردین 1390, 12:54 عصر
دوست عزیز
داخل خود کریستال سمت راست یه گزینه هست به نام running total field روی ان کلیک راست کن و بعد گزینه new را بزن توی صفحه ای که باز میشه از قسمت available tables and fielde نام فیلد قیمت را انتخاب کن از جدل مورد نظر و بعد دکمه < را بزن تا فیلد در تکست باکس field to summarize اضافه بشه و بعد در تست باکس type of summaryگزینه sum را انتخاب کن
موفق باشی
mohammad_2039
شنبه 20 فروردین 1390, 14:37 عصر
دوست عزیز
داخل خود کریستال سمت راست یه گزینه هست به نام running total field روی ان کلیک راست کن و بعد گزینه new را بزن توی صفحه ای که باز میشه از قسمت available tables and fielde نام فیلد قیمت را انتخاب کن از جدل مورد نظر و بعد دکمه < را بزن تا فیلد در تکست باکس field to summarize اضافه بشه و بعد در تست باکس type of summaryگزینه sum را انتخاب کن
موفق باشی
دوست عزیز مثل اینکه سوال بنده رو متوجه نشدید ؟؟ لطفا دوباره اونو بخونید ، پس شرط چی میشه من که نمیخوام یه فیلد رو از اول تا آخرین رکورد جمع کنم که از RuningTotal استفاده کنم ؟!! میخوام رکورد هایی که number در اونها برابر مثلا 11200 هست رو فقط جمع کنم.
ببینید من میخوام معادل این جمله در sql رو در کریستال بنویسم.
select sum(geimat) where number="11200"
sarbaz_esf
شنبه 20 فروردین 1390, 14:53 عصر
دوست عزیز
خوب این دستور را باید داخل لود فرمی بنویسید که کریستا ریپوت درون اون قرار داره
از کد زیر در دستور لود فرم ات بنویس
con = new SqlConnection("Data Source=Localhost;Initial Catalog=نام بانک اطلاعتید ;Integrated Security=True");
dap = new SqlDataAdapter("select * from نام جدول where number="11200"", con);
dst = new DataSet();
con.Open();
dap.Fill(dst, "نام جدول");
con.Close();
CrystalReportn set = new CrystalReportn();
set.SetDataSource(dst);
this.crystalReportViewer1.ReportSource = set;
mohammad_2039
شنبه 20 فروردین 1390, 15:28 عصر
تو که منو کشتی سرباز :عصبانی++:. میدونم چی میگی، منظورم این نیست.ببین من تیبلم رو با همه اطلاعات فرستادم به کریستال و نمایش دادم حالا میخوام زیر گزارش چندتا جمع هم نمایش بدم که هر کدوم یه فرمول شبیه اونچه بالا گفتم داره. یعنی چند تا select از اونچه داره نمایش میده. نمیخوام پارامتر به کریستال ارسال کنم تو گزارش های پی در پی قاط میزنه. میخوام فرمول بنویسم براش، حالا میتونی کمکم کنی یا نه ؟
sarbaz_esf
شنبه 20 فروردین 1390, 16:20 عصر
شرمنده
ok
این دستور را یه امتحانی بکن شاید جواب گرفتی من تا همین حد بلدم
if {tabl.number}=11200 then
select sum({tabl.ghemat})
بلدی که باید کجا این دستور را بنویسی؟
mohammad_2039
شنبه 20 فروردین 1390, 19:05 عصر
شرمنده
ok
این دستور را یه امتحانی بکن شاید جواب گرفتی من تا همین حد بلدم
if {tabl.number}=11200 then
select sum({tabl.ghemat})
بلدی که باید کجا این دستور را بنویسی؟
نه اینو قبلا نوشتم جواب نمیده ، میدونی چرا ؟ میره نگاه میکنه میبینه 5 تا number برابر 11200 داریم خوب شرط برقراره بعد میره مثلا 100 تا رکورد فیلد قیمت رو جمع میزنه.
mn_zandy63
یک شنبه 21 فروردین 1390, 00:10 صبح
سلام دوست من،
یه ایده بهت میدم ببین میتونی ازش استفاده کنی یا نه.
یه متغیر سراسری تعریف میکنیم داخل گزارش. بعد توی هر رکورد مقدار فیلدی که میخوای چک کنی رو بررسی میکنی اگه شرایط درست بود مقدار اون متغیر رو تغییر میدی. بعد هرجا که نیازش داشتی نمایشش میدی.
حالا مثال میزنم.
یک فرمول بساز، اسمشو بذار مثلا fSummer. داخلش بنویس:
WhilePrintingRecords;
NumberVar NS;
if({@number}=1200) then
NS := NS + {@value};
اینجا NS اون متغیر سراسری هست که گفتم.
فرض کردم value فیلد مبلغی هست که میخوای جمع بشه.
این فرمول رو بذار داخل Detail و در Format Field در Common تیک Suppress رو بزن که چیزی داخل گزارش نشون نده.
این فرمول برات کار جمع رو انجام میده. یعنی در هر رکورد چک میکنه اگه فیلد number برابر با ۱۲۰۰ بود مقدار فیلد value رو با متغیر ما جمع میکنه.
حالا یک فرمول دیگه اضافه کن به اسم مثلا fShowSum. و داخلش بنویس:
WhilePrintingRecords;
NumberVar NS;
این فرمون رو هرجا بذاری مقدار مورد نظرت رو نمایش میده.
مثلا بذارش داخل Footer.
اگه مثلا بخوای مقدار هر صفحه جداگونه حساب بشه. میتونی یه فرمول دیگه اضافه کنی مثلا به اسم fSumReset و داخل بنویسی:
WhilePrintingRecords;
NumberVar NS := 0;
این فرمول رو بذار داخل PageHeader و در Format Field در Common تیک Suppress رو بزن. به این ترتیب در ابتدای هر صفحه مقدار متغیر جمع ما صفر میشه.
موفق باشی
mn_zandy63
یک شنبه 21 فروردین 1390, 00:17 صبح
این رو بالاخره پیدا کردم. هر چند که دیگه نوشتم توضیحات رو ولی شاید اینجا بهتر توضیح داده باشم. بحث مشابهی هست.
http://barnamenevis.org/showthread.php?t=209671
موفق باشی
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.