PDA

View Full Version : ضرب دو ستون dbgrid و حاصل آن در ستون دیگر



ghazal20
چهارشنبه 14 اردیبهشت 1384, 15:54 عصر
من یک dbgrid دارم که سه تا از ستونهای آن 'فی' و تعداد و جمع کل به ریال است.
میخواهم وقتی که موقع وارد کردن اطلاعات به سطر بعدی می روم ضرب دو ستون فی و تعداد در ستون جمع کل ... قرار بگیرد . اماخطای زیر را می دهد.

m-khorsandi
چهارشنبه 14 اردیبهشت 1384, 16:32 عصر
درود
لطفا بگید که از چه دستوری و از کدوم Event برای محاسبه و ذخیره محاسبات استفاده میکنید.

ghazal20
چهارشنبه 14 اردیبهشت 1384, 19:22 عصر
از رویداد onNewRecord در adotable استفاده می کنم . و از دستور ضرب عادی

m-khorsandi
چهارشنبه 14 اردیبهشت 1384, 21:30 عصر
تا حالا چک کردی ببینی فیلدهایی که تو محاسبه ازشون استفاده میکنی چه مقادیری دارند؟ یکبار این کار رو بکن و
و این Event رو هم امتحان کن:

BeforePost



procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);
begin
ADOTable1.FieldByName('sum').AsInteger := ADOTable1.FieldByName('Price').AsInteger * ADOTable1.FieldByName('amount').AsInteger
end;

hr110
پنج شنبه 15 اردیبهشت 1384, 06:17 صبح
شما بجای استفاده از asInteger از Value برای گرفتن مقادیر فیلدها استفاده میکنید.

ghazal20
پنج شنبه 15 اردیبهشت 1384, 11:08 صبح
سلام
من ایندفعه از asinteger به جای value استفاده کردم اما خطای زیر را می دهد

Touska
پنج شنبه 15 اردیبهشت 1384, 12:11 عصر
شما هنوز از FieldByName استفاده می کنید. :flower:

m-khorsandi
پنج شنبه 15 اردیبهشت 1384, 13:43 عصر
دوست عزیز ،
اون چند خطی که وقتی اجرا میشه Error میده رو بنویسید.

ghazal20
پنج شنبه 15 اردیبهشت 1384, 20:33 عصر
این کدیه که می نویسم

ghazal20
پنج شنبه 15 اردیبهشت 1384, 20:36 عصر
البته این رو هم بگم که نوع فیلد فی ازنوع bigint فیلد تعداد smallint و فیلد جمع کل به ریال bigint است.

m-khorsandi
پنج شنبه 15 اردیبهشت 1384, 23:56 عصر
نه، این مربوط به نوع فیلدهای شما نیست.

parhizkar2000
جمعه 16 اردیبهشت 1384, 00:36 صبح
فکر کنم اگه شما از فیلدهای محاسباتی استفاده کنید مشکلتون حل بشه .
ضمنا نیازی به نگهداری جمع کل نیست . چون هر وقت که بخواهید میتونید اون رو از ضرب دو عدد فی و تعداد بدست بیارید . با اینکار تعداد فیلدهای بانکتون کمتر میشه

ghazal20
جمعه 16 اردیبهشت 1384, 10:52 صبح
[quote="parhizkar2000"]فکر کنم اگه شما از فیلدهای محاسباتی استفاده کنید مشکلتون حل بشه .
منظور شما از فیلدهای محاسباتی چیست؟

vcldeveloper
شنبه 17 اردیبهشت 1384, 03:29 صبح
منظور شما از فیلدهای محاسباتی چیست؟
فیلد محاسباتی(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(DataSet: TDataSet);
begin
DataSet.FieldValues['جمع کل به ریال'] :=
DataSet.FieldValues['فی'] * DataSet.FieldValues['تعداد'];
end;

masoode
شنبه 17 اردیبهشت 1384, 08:54 صبح
با sql هم آیا می شه؟

parhizkar2000
یک شنبه 18 اردیبهشت 1384, 21:56 عصر
با sql هم آیا می شه؟
در مورد Sql اگه منظورتون Query بله میشه .همون روشی که آقای کشاورز دقیقا توضیح دادند

Mahdi-563
یک شنبه 08 خرداد 1384, 00:44 صبح
اسم فیلدات رو انگلیسی یا فینگلیش کن مشکلت حل می شه

بای