من یک dbgrid دارم که سه تا از ستونهای آن 'فی' و تعداد و جمع کل به ریال است.
میخواهم وقتی که موقع وارد کردن اطلاعات به سطر بعدی می روم ضرب دو ستون فی و تعداد در ستون جمع کل ... قرار بگیرد . اماخطای زیر را می دهد.
من یک dbgrid دارم که سه تا از ستونهای آن 'فی' و تعداد و جمع کل به ریال است.
میخواهم وقتی که موقع وارد کردن اطلاعات به سطر بعدی می روم ضرب دو ستون فی و تعداد در ستون جمع کل ... قرار بگیرد . اماخطای زیر را می دهد.
درود
لطفا بگید که از چه دستوری و از کدوم Event برای محاسبه و ذخیره محاسبات استفاده میکنید.
از رویداد onNewRecord در adotable استفاده می کنم . و از دستور ضرب عادی
تا حالا چک کردی ببینی فیلدهایی که تو محاسبه ازشون استفاده میکنی چه مقادیری دارند؟ یکبار این کار رو بکن و
و این Event رو هم امتحان کن:
BeforePost
procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);
begin
ADOTable1.FieldByName('sum').AsInteger := ADOTable1.FieldByName('Price').AsInteger * ADOTable1.FieldByName('amount').AsInteger
end;
شما بجای استفاده از asInteger از Value برای گرفتن مقادیر فیلدها استفاده میکنید.
... چه بگویم که غم از دل برود چون تو بیایی
سلام
من ایندفعه از asinteger به جای value استفاده کردم اما خطای زیر را می دهد
شما هنوز از FieldByName استفاده می کنید. :flower:
دوست عزیز ،
اون چند خطی که وقتی اجرا میشه Error میده رو بنویسید.
این کدیه که می نویسم
البته این رو هم بگم که نوع فیلد فی ازنوع bigint فیلد تعداد smallint و فیلد جمع کل به ریال bigint است.
فکر کنم اگه شما از فیلدهای محاسباتی استفاده کنید مشکلتون حل بشه .
ضمنا نیازی به نگهداری جمع کل نیست . چون هر وقت که بخواهید میتونید اون رو از ضرب دو عدد فی و تعداد بدست بیارید . با اینکار تعداد فیلدهای بانکتون کمتر میشه
[quote="parhizkar2000"]فکر کنم اگه شما از فیلدهای محاسباتی استفاده کنید مشکلتون حل بشه .
منظور شما از فیلدهای محاسباتی چیست؟
فیلد محاسباتی(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;
با sql هم آیا می شه؟
در مورد Sql اگه منظورتون Query بله میشه .همون روشی که آقای کشاورز دقیقا توضیح دادندبا sql هم آیا می شه؟
اسم فیلدات رو انگلیسی یا فینگلیش کن مشکلت حل می شه
بای