PDA

View Full Version : نمایش مجموع یک فیلد در آخرین رکورد



Batman
شنبه 26 خرداد 1386, 21:02 عصر
چجوری میتونم مجموع یه فیلد رو در dbgrid به عنوان آخرین رکورد نشون بدم
مثلا مجموع خریدهای یه روز رو بعد از اخرین رکورد نشون بدم

saeid_sazegar
شنبه 26 خرداد 1386, 21:19 عصر
من در یک برنامه فروشگاه قبلا این کارو با استفاده از Query انجام داده بودم به این صورت که با یک query مجموع را بعد از وارد کردن هر رکورد حساب کرده و در یک DBEdit نشون میدادم

SYNDROME
شنبه 26 خرداد 1386, 22:35 عصر
با سلام

من در یک برنامه فروشگاه قبلا این کارو با استفاده از Query انجام داده بودم به این صورت که با یک query مجموع را بعد از وارد کردن هر رکورد حساب کرده و در یک DBEdit نشون میدادم
البته روشی که آقا سعید شما گفتید نیز درست است به شرطی که مجموع را بخواهید در یک Edit نمایش دهید.

چجوری میتونم مجموع یه فیلد رو در dbgrid به عنوان آخرین رکورد نشون بدم
مثلا مجموع خریدهای یه روز رو بعد از اخرین رکورد نشون بدم
متوانی از Union استفاده کنی به این صورت که اول رکوردها را نمایش دهی و سپی مجموع را با Select دوم حساب کنی.
به طور مثال من اول لیست مبالغ را از Tbl_Price لیست کرده و سپس جمع فیلد Price را با Select محاسبه می کنم


Select Price
From Tbl_Price
Union
Select Sum(Price)
From Tbl_Price

merced
یک شنبه 27 خرداد 1386, 00:04 صبح
چه کاریه ... یه Statusbar بذار ته DBGrid تو پانل های اون نشون بده .. مگه همه فیلدها عددی اند ؟

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

تازه .. اگه دویست سیصد رکورد داشته باشی .. کاربر باید تا ته بره تا جمعشون رو ببینه

Batman
یک شنبه 27 خرداد 1386, 08:22 صبح
مشکلم حل شد
اما زمانی که چند تا فیلد داشته باشم و بخوام مجموع یکی رو حساب کنم error میده
the number of columns in the two selected tables or queris of a union query do not match

Kamyar.Kimiyabeigi
یک شنبه 27 خرداد 1386, 10:08 صبح
مشکلم حل شد
اما زمانی که چند تا فیلد داشته باشم و بخوام مجموع یکی رو حساب کنم error میده
the number of columns in the two selected tables or queris of a union query do not match

تعداد فیلدهایی که در Union استفاده میکنی باید با هم برابر باشه به پست 5# در لینک زیر توجه کن
موفق باشی

لینک مربوط به Union (http://www.barnamenevis.org/forum/showthread.php?t=66856)

Batman
یک شنبه 27 خرداد 1386, 12:58 عصر
آقا کامیار من از دستور زیر استفاده می کنم اما عددی رو که برمیگردونه مجموع اون فیلد نیست یه عدد دیگس
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT id,s from 456 union select id,s from 456');
ADOQuery1.Open;
فقط دو تا فیلد دارم که هر دو number هستند

Saeid59_m
یک شنبه 27 خرداد 1386, 13:13 عصر
به دوستان پیشنهاد می کنم
توی پروژه ها به هیچ وجه این کار رو نکنند
چون حتی برای کاربر هم خوشایند نیست

البته جسارت نشه ! یه پیشنهاد بود .

Kamyar.Kimiyabeigi
یک شنبه 27 خرداد 1386, 13:37 عصر
آقا کامیار من از دستور زیر استفاده می کنم اما عددی رو که برمیگردونه مجموع اون فیلد نیست یه عدد دیگس
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT id,s from 456 union select id,s from 456');
ADOQuery1.Open;
فقط دو تا فیلد دارم که هر دو number هستند

این یک مثال ساده همراه با جمع یک فیلد


SELECT OrderID, EmployeeID FROM dbo.Orders
UNION ALL
SELECT ' ', SUM(ShipVia) FROM dbo.Orders


اما این کدی که شما نوشتین باعث میشه که یک بار ID , S از جدول 456 انتخاب بشه و بعد مجددا" همین اطلاعات دوباره در انتهای اطلاعات قبلی بیاد یعنی اطلاعات دوبار تکرار میشه

jafari1
یک شنبه 27 خرداد 1386, 21:35 عصر
در DbGridEh این امکان وجود دارد احتیاجی هم نیست به آخرین رکورد بروید تا آن را ببینید

SYNDROME
یک شنبه 27 خرداد 1386, 21:50 عصر
با سلام

در DbGridEh این امکان وجود دارد احتیاجی هم نیست به آخرین رکورد بروید تا آن را ببینید
دست شما درد نکند که اشاره کردید ولی بحث ما بر سر DBGrid معمولی خود دلفی است.

object
دوشنبه 28 خرداد 1386, 02:24 صبح
dbgrid یه کامپوننت خیلی خیلی بدویه
همچین کارهایی رو همینجوری نمیشه باهاش انجام داد
یا باید توش دست ببری یا باید از یه کامپوننت دیگه استفاده کنی

SYNDROME
دوشنبه 28 خرداد 1386, 06:10 صبح
با سلام

dbgrid یه کامپوننت خیلی خیلی بدویه
همچین کارهایی رو همینجوری نمیشه باهاش انجام داد
یا باید توش دست ببری یا باید از یه کامپوننت دیگه استفاده کنی
ولی اگر کل پستهای این تایک را بخوانی می بینی که بنده و کامیار شاره کردیم که با یک Union ساده می شود این کار را انجام داد.

Batman
دوشنبه 28 خرداد 1386, 06:51 صبح
حالا این dbgrideh کجا هست

Valadi
دوشنبه 28 خرداد 1386, 17:36 عصر
سرچ کن مطالبی دستگیرت میشه چون قبلا یکی از عزیزان یک راهی برای این موضوع پیدا کرده بود و در سایت هست
موفق و موید باشی

saeid_sazegar
سه شنبه 29 خرداد 1386, 23:03 عصر
بابا چرا سختش میکنید

ADOQuery1.SQL.clear;
;ADOQuery1.SQL.Add('select sum(price) as [sumprice] from 456
ADOQuery1.Open;

بعدش sumprice وصل کن به یه DBEdit و بزارش زیر DBGrid
هر زمان هم که خواستی یه رکورد دیگه ثبت کنی بعد از ثبت رکورد بنویس:


ADOQuery1.Active:=false;
ADOQuery1.Active:=true;

به همین سادگی:لبخندساده:

merced
چهارشنبه 30 خرداد 1386, 05:06 صبح
بابا چرا سختش میکنید



ایول .. خوشم اومد

SYNDROME
چهارشنبه 30 خرداد 1386, 14:59 عصر
با سلام

بابا چرا سختش میکنید

ADOQuery1.SQL.clear;
;ADOQuery1.SQL.Add('select sum(price) as [sumprice] from 456
ADOQuery1.Open;

بعدش sumprice وصل کن به یه DBEdit و بزارش زیر DBGrid
هر زمان هم که خواستی یه رکورد دیگه ثبت کنی بعد از ثبت رکورد بنویس:


ADOQuery1.Active:=false;
ADOQuery1.Active:=true;


به همین سادگی:لبخندساده:

زمانی که تعداد ستونها نا مشخص یا زیاد باشد آن وقت بدجوری دوچار مشکل می شوی.

saeid_sazegar
چهارشنبه 30 خرداد 1386, 20:08 عصر
برعکس نه تنها دچار مشکل نمیشی بلکه دستور SELECT خیلی خیلی سریع عمل میکنه

میلیاردی رکورد و در عرض چند ثانیه میاره

در واقع این روش کارآمدیه و مطمئنه چون داری مجموع رو میسپاریم دست دستورات SQL و از دغدغه اشتباه در فرمول نویسی برای فیلدها راحت میشیم

SYNDROME
چهارشنبه 30 خرداد 1386, 21:01 عصر
با سلام

برعکس نه تنها دچار مشکل نمیشی بلکه دستور SELECT خیلی خیلی سریع عمل میکنه
میلیاردی رکورد و در عرض چند ثانیه میاره
در واقع این روش کارآمدیه و مطمئنه چون داری مجموع رو میسپاریم دست دستورات SQL و از دغدغه اشتباه در فرمول نویسی برای فیلدها راحت میشیم
منظور بنده select نبود نمایش نتایج در DBEdit بود .
تعداد DBEdit نامشخص است.
حتی اگر DBEdit ها را Create کنی نمی توانی تعداد زیادی از آن را در صفحه قر ار دهی.
منظورم این بود.