ورود

View Full Version : مشکل با ستون از نوع Calculated



pezhvakco
سه شنبه 16 آذر 1389, 20:45 عصر
دو تا جدول در پایگاه داده Sql است .در یکی داده هایی وجود داره . با استفاده از کد دستورات Sql تعدادی خاص از ردیف های جدول اول را در جدول دوم که خالی است کپی می کنم .


در برنامه، ADODataSet2 که به جدول دوم وصل است همه ستونهای جدول اضافه شده و یک ستون از نوع Calculated به نام Mande هم اضافه کردم .در رویداد OnCalcFields مربوط به ADODataSet2 کد دستور زیر را برای محاسبه همین ستون نوشتم :

procedure ADODataSet2CalcFields(DataSet: TDataSet);
begin
Mande_Radif:=Mande_Radif + (ADODataSet2.FieldByName('bestankar').AsCurrency - ADODataSet2.FieldByName('bedehkar').AsCurrency);
ADODataSet2.FieldByName('Mande').AsCurrency:=Calcu _Mande_Sn;
end;متغییر Mande_Radif پیش از اضافه شدن ردیف ها از جدول اول به دوم برابر صفر می شود .
این روش برای محاسبه مانده ردیف ها کار می کنه .
در ادامه یک DBGridEh1 هم برای نمایش داده های ADODataSet2 روی فرم است .

در برنامه بعد از کپی شدن داده ها بین جدول ها ستون Mande ردیف مقدرا گذاری می شود توسط برنامه
حالا مشکل =>
اگر کاربر بر روی ردیف های DBGridEh1 پایین رود، زمانی که چند ردیف ابتدایی از دید خارج شود و کاربر دوباره به ردیف های بالا برگردد مقدار ستون مانده همان ردیف ها تغییر کرده و همان کار محاسبه ستون Mande که در رویداد OnCalcFields نوشته شده بوده انجام می شود با این تفاوت که چون مقدار متغییر Mande_Radif دیگر صفر نیست، مقدار ستون داده ای اشتباه دارد . اگر این کار (بالا و پایین رفتن ردیف ها در جدول) چند بار انجام شود، ستون مانده باز هم تغییر می کند .

پرسش =>
1) اینکه روش من برای محاسبه ستون مانده درست است یا نه .
2) چگونه این مشکل محاسبه دوباره و چند باره ستون مانده رو درست کنم .

پیشاپیش سپاس از همه ...

نمونه ساختار جدول اولیه =>

pezhvakco
دوشنبه 29 آذر 1389, 08:54 صبح
اگر در یک فرم برنامه دو تا DBGridEh داشته باشم و هر دوی این ها به این ADODataSet2 که دارای ستون مانده ( ستون Calculated ) است وصل باشند و اگر DBGridEh1 دارای 15 ردیف برای نمایش و DBGridEh2 دارای 5 ردیف برای نمایش باشد و با این شرایط اون قضیه حرکت بین ردیف های این DBGridEh ها را امتحان کنم تا زمانی که 15 ردیف ابتدایی DBGridEh1 از دید خارج نشود مشکلی در محاسبه ستون مانده ( از نوع Calculated ) پیش نمی آید ولی اگر به ردیف 16 از DBGridEh1 بروم ( یعنی یک ردیف از ابتدای DBGridEh1 دیده نشود ) و به بالا برگردم برنامه ستون مانده را دوباره محاسبه کرده ( چون در این محاسبه مقدار متغییر Mande_Radif مقدار صفر ندارد و مقدار اون برابر با مقدار آخرین ردیف جدول است، مقدار ستون مانده در ردیف اول نادرست می شود ) .

موضوعی که من دیدم این بود که اگر بر روی ردیف های DBGridEh2 که 5 ردیف از جدول را نمایش میده بالا و پایین بروم، اگر هم ردیف های از دید خارج بشن باز هم تغییری در ستون مانده بوجود نمی یاد تا زمانی که این جابه جایی در DBGridEh1 هم تاثیر داشته باشه یعنی ردیف های اون هم از دید خارج بشه .

در پایان : فکر کنم این ستون مانده که از نوع Calculated است بر مبنای ردیف هایی که در دید کاربر است کار می کنه .

پرسش : این روش کار من در بدست آوردن ستون مانده را چگونه مدیریت کنم که این دوباره کاری بوجود نیاد ؟