# Native Code > برنامه نویسی در Delphi >  ضرب دو ستون dbgrid و حاصل آن در ستون دیگر

## ghazal20

من یک dbgrid دارم که سه تا از ستونهای آن 'فی' و تعداد و جمع کل به ریال است. 
میخواهم وقتی که موقع وارد کردن اطلاعات به سطر بعدی می روم ضرب دو ستون  فی و تعداد  در ستون جمع کل ... قرار بگیرد . اماخطای زیر را می دهد.

----------


## m-khorsandi

درود
لطفا بگید که از چه دستوری و از کدوم Event برای محاسبه و ذخیره محاسبات استفاده میکنید.

----------


## ghazal20

از رویداد onNewRecord در adotable استفاده می کنم . و از دستور ضرب عادی

----------


## m-khorsandi

تا حالا چک کردی ببینی فیلدهایی که تو محاسبه ازشون استفاده میکنی چه مقادیری دارند؟ یکبار این کار رو بکن و
و این Event رو هم امتحان کن:

*BeforePost*


procedure TForm1.ADOTable1BeforePost&#40;DataSet&#58; TDataSet&#41;;
begin
ADOTable1.FieldByName&#40;'sum'&#41;.AsInteger &#58;= ADOTable1.FieldByName&#40;'Price'&#41;.AsInteger * ADOTable1.FieldByName&#40;'amount'&#41;.AsInteger
end;

----------


## hr110

شما بجای استفاده از asInteger از Value برای گرفتن مقادیر فیلدها استفاده میکنید.

----------


## ghazal20

سلام
من ایندفعه از asinteger به جای value  استفاده کردم اما خطای زیر را می دهد

----------


## Touska

شما هنوز از FieldByName استفاده می کنید.  :flower:

----------


## m-khorsandi

دوست عزیز ، 
اون چند خطی که وقتی اجرا میشه Error میده رو بنویسید.

----------


## ghazal20

این کدیه که می نویسم

----------


## ghazal20

البته این رو هم بگم که نوع فیلد   فی ازنوع bigint  فیلد تعداد   smallint   و فیلد   جمع کل به ریال    bigint   است.

----------


## m-khorsandi

نه، این مربوط به نوع فیلدهای شما نیست.

----------


## parhizkar2000

فکر کنم اگه شما از فیلدهای محاسباتی استفاده کنید مشکلتون حل بشه .
ضمنا نیازی به نگهداری  جمع کل نیست . چون هر وقت که بخواهید میتونید اون رو از ضرب دو عدد فی و تعداد بدست بیارید . با اینکار تعداد فیلدهای بانکتون کمتر میشه

----------


## ghazal20

[quote="parhizkar2000"]فکر کنم اگه شما از فیلدهای محاسباتی استفاده کنید مشکلتون حل بشه .
 منظور شما از فیلدهای محاسباتی چیست؟

----------


## vcldeveloper

> منظور شما از فیلدهای محاسباتی چیست؟


فیلد محاسباتی(Calculated Field) فیلدی هست که مقدار آن از پردازش بر روی مقادیر فیلد(یا فیلدها)ی دیگه بدست میاد. چون می توان مقدار این نوع فیلد رو از طریق مقادیر فیلدهای دیگه بدست آورد، نیازی به ذخیره کردن این نوع فیلد در بانک اطلاعاتی نیست.
در برنامه شما، نیازی به ذخیره کردن فیلد 'جمع کل به ریال' در بانک اطلاعاتی نیست. می تونید این فیلد رو در دلفی از نوع محاسباتی تعریف کنید:
بر روی شی DataSet مربوطه (TTable,TQuery,ADOTable,ADOQuery و...) دابل کلیک کنید.
پنجره Field Editor باز می شود. بر روی آن راست کلیک کنید و گزینه Add All Fields را انتخاب کنید تا تمامی فیلدهای جدول یا query مربوطه لیست شوند.
دوباره بر روی پنجره فوق راست کلیک کرده و این بار گزینه New Field را انتخاب کنید.
مشخصات فیلد مورد نظر خود را (در برنامه شما: 'جمع کل به ریال') را در پنجره New Field وارد کرده و Field Type را بر روی Calculated تنظیم کنید. دکمه OK را کلیک کنید.

با انجام مراحل فوق یک فیلد محاسباتی ایجاد می شود. برای محاسبه مقدار فیلد مربوطه از رویداد OnCalcFields استفاده کنید:

procedure TForm1.ADOTable1CalcFields&#40;DataSet&#58; TDataSet&#41;;
begin
  DataSet.FieldValues&#91;'جمع کل به ریال'&#93; &#58;=
         DataSet.FieldValues&#91;'فی'&#93; *  DataSet.FieldValues&#91;'تعداد'&#93;;
end;

----------


## masoode

با sql هم آیا می شه؟

----------


## parhizkar2000

> با sql هم آیا می شه؟


در مورد Sql اگه منظورتون Query بله میشه .همون روشی که آقای کشاورز دقیقا توضیح دادند

----------


## Mahdi-563

اسم فیلدات رو انگلیسی یا فینگلیش کن مشکلت حل می شه

بای

----------

