استفاده از فیلد محاسباتی در Query و نمایش آن در Grid
سلام و عرض ادب خدمت دوستان.
در مورد فیلد محاسباتی سوالی داشتم که به صورت مثال مطرح می کنم.
به عنوان نمونه فرض کنید دو جدول (Table1, Table2) وجود دارند که یک Query به صورت زیر از اونها گرفته شده:
var
Query: TADOQuery;
begin
Query:= TADOQuery.Create(nil);
Query.Connection:= ADOConnection;
with Query do
begin
Close;
SQL.Clear;
SQL.Text:= 'SELECT Table1.Field1 , Table1.Field2, Table2.Field1 ' +
'FROM Table1, Table2 WHERE Table1.ID=Table2.ID';
Open;
end;
end;
برای نمایش در گرید، ما علاوه بر سه فیلد بالا، یک فیلد برای شمارش سطر و یک فیلد محاسباتی دیگه (وابسته به Table1.Field1 و Table2.Field1 ) هم خواهیم داشت.
لطفا راهنمایی کنید کدهای تعریف فیلد محاسباتی رو به چه صورت باید نوشت و نحوه نمایش این 5 فیلد در گرید به چه صورت میشه؟
نقل قول: استفاده از فیلد محاسباتی در Query و نمایش آن در Grid
سلام.
نحوه جوین کردنتون خیلی قدیمیه، اصلاحش کنید بهتره.
فیلد محاسباتی بر مبنای فیلدهای دیگه رو در همون سلکت باید بیارید.
برای شماره سطر هم می تونید از RecNo یا توابع مشابه استفاده کنید.
نقل قول: استفاده از فیلد محاسباتی در Query و نمایش آن در Grid
ممنون از جواب
نقل قول:
نوشته شده توسط
یوسف زالی
سلام.
نحوه جوین کردنتون خیلی قدیمیه، اصلاحش کنید بهتره.
حق با شماست. فقط برای اینکه به ساده ترین شکل مفهوم رو برسونم به این شکل نوشتم. می خواستم نشون بدم CalcField مربوط به محاسبات مرتبط با دو تا جدول هست.
نقل قول:
نوشته شده توسط
یوسف زالی
برای شماره سطر هم می تونید از RecNo یا توابع مشابه استفاده کنید.
این رو هم صرفا جهت توضیح بیشتر مساله بیان کرده بودم:گیج:
نقل قول:
نوشته شده توسط
یوسف زالی
فیلد محاسباتی بر مبنای فیلدهای دیگه رو در همون سلکت باید بیارید.
دقیقا Syntax همین فیلد در SELECT مورد سوال منه.
نقل قول: استفاده از فیلد محاسباتی در Query و نمایش آن در Grid
حب این بیشتر برمی گرده به اس کیو ال، نه دلفی،
می تونید از روشهایی مثل این استفاده کنید:
select T1.*, T2.*, (T1.F1 + T2.F1) * T1.F2 as J1, T1.F1 -17 as J2, T1.F1 - T2.F2 +5 as J3..
from T1 join T2 on ..
بهتره اگر نام های فیلد هاتون شبیه به هم هست، برای هر کدومش یک الیاس استفاده کنید.
مثلا select T1.F1 as TF1
نقل قول: استفاده از فیلد محاسباتی در Query و نمایش آن در Grid
ممنون از راهنمایی.
اما اگه محاسبات به نحوی باشند که در کامند SQL نتونیم اون رو قرار بدیم چی؟:متفکر:
مثلا محاسبه ثانیه های بین دو زمان، یا به طور کلی محاسباتی که نیازمند یه سری توابع خود دلفی هست.
نقل قول: استفاده از فیلد محاسباتی در Query و نمایش آن در Grid
اس کیو ال برای ثانیه ها هم تابع داره، ولی اگر به هر دلیلی نشد، کافیه یک فیلد محاسباتی در خود دیتاست اد کنید.
روی دیتاست دوبار کلیک کنید و فیلد های جاری رو اد کنید و سپس راست کلیک کرده یک فیلد محاسباتی اضافه کنید.
در رویداد OnCalc دیتاست، برای این فیلد مقدار تغیین کنید.
نقل قول: استفاده از فیلد محاسباتی در Query و نمایش آن در Grid
با توضیحات آقا یوسف من متوجه مشکل خودم که نتونستم به درستی بیانش کنم شدم.
اما روند رو برای دوستانی که ممکنه بعدا همین سوالات رو داشته باشند توضیح میدم.
یک جدول شامل فیلدهای مختلف موجود هست. به دلیلی برای این جدول نیازمند ایجاد یک فیلد محاسباتی داریم. از طرفی به هر دلیل از Table استفاده نمی کنیم و هدف استفاده از فیلد محاسباتی در Query هست. برای این کار
1. روی Query دابل کلیک می کنیم و تمامی فیلدها رو با کلیک راست اضافه می کنیم.
2. دوباره کلیک راست می کنیم و New Field رو برای ایجاد فیلد محاسباتی انتخاب میکنیم. فیلد مورد نظر رو ایجاد می کنیم.
3. در Query و خصوصیت SQL، عبارت SELECT * FROM Query رو می نویسیم.
4. در رویداد OnCalc کدهای لازم برای مقداردهی فیلدهای محاسباتی می نویسیم.
مثلا برای اضافه کردن ستون شماره ردیف این کد:
with ADOQuery do
begin
FieldByName('RowNo').AsInteger:= RecNo;
if FieldByName('RowNo').AsInteger <0 then
FieldByName('RowNo').AsInteger:= FieldByName('RowNo').AsInteger*(-1);
end;
یا برای محاسبه فیلد مانده، این کد:
FieldByName('Remain').AsExtended:=tmpRemain + (Crd- Deb);
و .... رو می نویسیم.