ورود

View Full Version : در مورد فیلدهای calculated



حمیدرضاصادقیان
یک شنبه 22 مهر 1386, 14:12 عصر
سلام.میخواستم ببینم آیا امکانش هست مقدار یک calculated field در زمان Edit یا در insert تغییر کنه ؟راستش مشکلی که دارم اینه که یک فیلد bool دارم و یک فیلد price .اگر مقدار فیلد بول برابر 0 بود price بدهکار میشه اگر فیلد بول با 1 برابر بود Price بستانکار میشه.حالا مشکل اینجاست که یک گرید قرار دادم که دو ستون بدهکار و بستانکار داره.راه حلی که به ذهن خودم رسید این بود که از یک فیلد calculate استفاده کنم و مقدار اونو با توجه به ستون بدهکار یا بستاکار در جدول قرار بدم.آیا راه خوبی است؟ و یا راه دیگه ای هم وجود داره.
با تشکر

حمیدرضاصادقیان
یک شنبه 22 مهر 1386, 16:00 عصر
سلام.من این مشکل رو به شکل زیر حل کردم. به این صورت که برای بدهکار و بستانکار فیلد calculate ایجاد کردم. و براساس فیلدبول مقدار price را جایگزین میکنم.و در وقت اضافه یک dbedit قرار دادم و به فیلد price متصل کردم. حالا مشکل اینه وقتی میخوام این dbedit رو درون گرید قرار بدم کدش رو نمیخونه.
اینم کدش هست.



procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (gdfocused in state) then
Begin
If (column.Field.FieldName='bed') then
Begin
dbedit1.Left:=rect.left+dbgrid1.Left+10;
dbedit1.Top:=rect.Top+dbgrid1.Top+2;
dbedit1.Width:=rect.Left-rect.Right;
dbedit1.Height:=rect.Top-rect.Bottom;

dbedit1.Visible:=True;
End
Else
If (column.Field.FieldName='bes') then
Begin
dbedit1.Left:=rect.left+dbgrid1.Left+20;
dbedit1.Top:=rect.Top+dbgrid1.Top+2;
dbedit1.Width:=rect.Left-rect.Right;
dbedit1.Height:=rect.Top-rect.Bottom;

dbedit1.Visible:=True;
End;


End;
end;


من به جای اینکه مقادیر این ستونها رو با فیلد خود Edit چک کنم نامش رو چک میکنم. اگر فیلد هر دو کامپوننت یکی باشد و این کنترل براساس نام فیلد باشد به راحتی edit را در گرید قرار میدهد ولی در این حالت قرار نمی دهد.
باتشکر.

SYNDROME
یک شنبه 22 مهر 1386, 17:21 عصر
با سلام
ببیند کد زیر کار شما را راه می اندازد.


Select Price as Bed , 0 As Bes
From Tbl_Test
Where Bool = 0
Union
Select 0 as Bed , Price As Bes
From Tbl_Test
Where Bool = 1

موفق باشید

حمیدرضاصادقیان
یک شنبه 22 مهر 1386, 18:45 عصر
دوست عزیز ممنون.ولی الان مشکل من اینه که نمی تونم dbedit رو داخل گرید قرار بدم.

SYNDROME
یک شنبه 22 مهر 1386, 20:18 عصر
با سلام


دوست عزیز ممنون.ولی الان مشکل من اینه که نمی تونم dbedit رو داخل گرید قرار بدم.

اگر بگویی دقیقاً چه کار می خواهی بکنی شاید بهتر بتوانیم کمکتان بکنیم.
موفق باشید

champion
یک شنبه 22 مهر 1386, 21:28 عصر
اگه منظورتون از bed و bes برای ثبت سند هست ، بهتره به جای فیلد Calc اونها رو واقعا از هم جدا کنی چون کار شما به نظرم منطقی نیست

ghabil
دوشنبه 23 مهر 1386, 00:14 صبح
نیازی به فیلد Calculated نیست فیلد رو از نوع boolean تعریف کن ، DisplayValueش رو بزار : بدهکار;بستانکار ، بقیش رو بسپر به دلفی ببین چه میکنه ;)

حمیدرضاصادقیان
دوشنبه 23 مهر 1386, 07:32 صبح
ممنون. این مورد رو تست میکنم.ولی حالا چرا نمیشه این dbedit رو داخل گرید قرار داد؟
چه مشکلی در کدی که گذاشتم هست؟

حمیدرضاصادقیان
دوشنبه 23 مهر 1386, 07:49 صبح
نیازی به فیلد Calculated نیست فیلد رو از نوع boolean تعریف کن ، DisplayValueش رو بزار : بدهکار;بستانکار ، بقیش رو بسپر به دلفی ببین چه میکنه ;)

میشه بگین کدوم فیلد را باید اینکارو روش انجام بدم؟متوجه نشدم

ghabil
سه شنبه 24 مهر 1386, 01:28 صبح
ببین یک فیلد بولین داری دیگه ، قبلدت رو توی دیتاست تعریف کن و DisplayValueش رو بزار : بدهکار;بستانکار.
اگر نمیدونی چطور فیلد رو توی دیتاست تعریف (Persist) کنی روش DBCLick کن تا فرم اضافه کردن فیلد بیاد.