PDA

View Full Version : تابع is null و جمع چند فیلد



ehsan_ei
چهارشنبه 25 فروردین 1389, 00:59 صبح
سلام دوستان:
من میخوام تو پروژه ام یه دکمه بذارم که چندتا از فیلدای جدولم رو چک کنه و اگه خالی نبود یه امتیازی به اون رکورد بده و آخرش امتیاز اون رکورد رو جمع کنه و به صورت یک ستون در dbgrid نشون بده.
مثلا برای فیلدpiktaj اگر برای یک رکورد خاص خالی نبود 3 امتیاز در نظر بگیره و برای فیلد simkeshi از همون رکورد اگهnullنبود امتیاز 10 بده و در آخر اینها رو باهم جمع و تویdbgrid نشون بده. به نظر شما چیکار باید بکنم؟؟ نمیدونم از تابع is null چه طوری برای این کار استفاده کنم؟؟؟نتیجه جمع حتما باید یه فیلد جدول باشه تا بتونم توdbgrid نمایشش بدم؟؟ لطفا راهنماییم کنین!!:قلب:

vcldeveloper
چهارشنبه 25 فروردین 1389, 02:19 صبح
نتیجه جمع حتما باید یه فیلد جدول باشه تا بتونم توdbgrid نمایشش بدم؟نتیجه جمع شما باید یک عدد باشه، بعدش باید یک فیلد Calculated داشته باشید که مقدار این عدد رو در رویداد OnCalcFields مربوط به جدولتون اختصاص بدید.

مثلا اگر شما یک فیلد Calculated از نوع Integer با نام Points به دیتاست اضافه کرده باشید، برای اون رویداد می نویسید:


var
Piktaj, Simkeshi : Variant;
MyPoints : Integer;
begin
MyPoints := 0;
Piktaj := DataSet.FieldByName('Piktaj').Value;
Simkeshi := DataSet.FieldByName('Simkeshi').Value;
if not VarIsNull(Piktaj) then
MyPoints := 3
else if not VarIsNull(Simkeshi) then
MyPoints := 10;
DataSet.FieldByName('Points').AsInteger := MyPoints;
end;

ehsan_ei
چهارشنبه 25 فروردین 1389, 17:41 عصر
سلام آقای کشاورز:
من متوجه نشدم.فیلد calculated رو باید توی جدول دیتا بیسم تعریف کنم؟؟رویداد OnCalcFields چیه وکجاست؟؟dataset کدوم جدول؟dbgrid؟ میشه بیشتر توضیح بدین؟ آخه من تازه کارم!! خیلی ممنون:قلب:

vcldeveloper
چهارشنبه 25 فروردین 1389, 18:06 عصر
فیلد calculated رو باید توی جدول دیتا بیسم تعریف کنم؟
فیلد Calculated رو باید در دلفی در داخل دیتاستی که به جدول شما متصل هست، ایجاد کنید، مثلا اگر دیتاست شما AdoTabelهست، روی آن دابل کلیک کنید، تا پنجره فیلدهای آن باز بشه، و بعد روی فضای خالی آن پنجره راست کلیک کنید، و گزینه New Field را انتخاب کنید، و نام و مشخصات فیلد جدید را تعیین کنید. نوع آن را هم Calculated انتخاب کنید.

رویداد OnCalcFields هم مربوط به همان دیتاست شما ست. آن را انتخاب کنید، در لیست Events آن گزینه ایی برای OnCalcFields می بینید.

ehsan_ei
جمعه 27 فروردین 1389, 01:26 صبح
ممنون از توضیحات کاملتون. من کد رو توی اون رویداد نوشتم. دیتا ست من adoQuery هست. وقتی روش دابل کلیک می کنم توی لیست فیلدهاش هیچی نیست. یه فیلد توش new کردم اما و قتی از برنامه اجرا میگیرم ارور میده:



adoQuery1:filde'piktaj' not found


فکر میکنم به خاطر خالی بودن لیست فیلدهای دیتا ستم هست. روش راست کلیک کردم و add all fild رو زدم اما این ارور رو میداد:



adoQuery1: missing SQL property


لطفا بازم راهنماییم کنین.:خجالت: ممنون:قلب:

vcldeveloper
جمعه 27 فروردین 1389, 02:07 صبح
فکر میکنم به خاطر خالی بودن لیست فیلدهای دیتا ستم هست. روش راست کلیک کردم و add all fild رو زدم اما این ارور رو میداد
به خاطر اینه که دارید از AdoQuery استفاده می کنید، و خصوصیت SQL آن را در زمان طراحی خالی گذاشتید. اگر قراره کوئری شما ثابت باشه، یا کوئری شما فقط پارامترهای بخش WHERE آن تغییر کنه، در اون صورت کوئری را در زمان طراحی در داخل خصوصیت SQL بنویسید. برای تغییر بخش های مربوط به WHERE هم از پارامتر در SQL استفاده کنید.

اگر کوئری شما کلا هر چند وقت یک بار در داخل برنامه تغییر میکنه، پس این روشی که در این تاپیک بهش اشاره کردم، به درد شما نمیخوره.