PDA

View Full Version : سوال: محاسبه جمع در dbgrid تا سطر جاری



mehdi_khepel2004
پنج شنبه 23 مهر 1388, 10:40 صبح
با سلام
من از ehlibgrid استفاده میکنم مثلا الان 100 رکورد رو دارم نمایش میدم حالا میخوام کاربر برنامم روی هرکدوم از سطرها حرکت کرد جمع اون ستون رو تا اونجا نشون بدم و با بالا و پایین کردن سطرها جمع هم کم و زیاد بشه

DlphIran
پنج شنبه 23 مهر 1388, 13:10 عصر
شما ابتدا بايد فيلد شمارنده داشته باشيد كه براي هر سطر يك شماره رديف داشته باشه. با توجه به اينكه جدولت بر اساس اين فيلد مرتب شده باشه با يه adoquery ديگه و دستور sum مربوط به اس كيو ال مي توني جمع فيلد خاصي رو تا فيلد جاري بدست بياري :

with adoquery2 do
begin
sql.clear;
sql.add('select sum(field1) from mytable1');
sql.add('group by a');
sql.add('haveing a<=:i');
parameters.parambyname('i').values:=edit1.text;
execsql;
active:=true;
end;
l
فيلد a همون فيلد شمارنده اس و edit1.text هم محتواي عدد فيلد a هست كه با كليك كاربر روي گريد مقدار فيلد a از ركورد جاري رو درونش ميزاري .

البته اگه اومده باشي و گريد رو بترتيب فيلد خاصي مرتب كرده باشي فكر مي كنم بايد يكمي روي اين قسمت از برنامه كه نوشتم فكر كني احتمالا با تغيير كوچيكي بتوني جواب بدست بياري. حتي اگه از فيلد كليد مثل كد استفاده كرده باشي و بر اساس كد جدولت رو مرتب كرده باشي مي توني بجاي فيلد a از فيلد كليد استفاده كني

محمد حسن
پنج شنبه 23 مهر 1388, 17:22 عصر
می تونی دررویداد cell click بنویسی
procedure TForm1.dbgrd1CellClick(Column: TColumn);
var
i,j:Integer;
temp:Integer;
str:string;
begin
str:=dbgrd1.SelectedField.Name;
temp:=0;
j:=ADOTable1.RecNo;
ADOTable1.First;
for i:= 1 to j do
begin
inc(temp, ADOTable1.FieldByName(str).AsInteger);
ADOTable1.Next;
end;
Form1.Caption:=IntToStr(temp);
end;

merced
پنج شنبه 23 مهر 1388, 18:52 عصر
چرا اينجوري ؟؟‌

يه فيلد بذار به عنوان جمع تا اون ركورد (مثل فيلد مانده در حسابداري)
اگه از SQL Server استفاده مي كني اين تاپيك رو بخون
http://www.barnamenevis.org/forum/showthread.php?t=21194&highlight=debtor

ولي راهخ ساده هم استفاده از جدول موقت هست..

-- كاربر ديدن رو از كليك كردن بيشتر دوست داره و همين طور كاغذ رو از مونيتور بيشتر
-- اين كار چاپ اطلاعات رو برات راحت مي كنه