PDA

View Full Version : افزایش یکی از فیلدهای آخرین رکورد



asefy2008
پنج شنبه 08 مرداد 1388, 10:56 صبح
من یه table دارم که دو تا فیلد داره یکی برای تاریخ روزانه و دیگری برای درآمد روزانه(هر دو از نوع استرینگ هستن) ، می خوام هر فاکتور که صادر میشه مبلغ کلش با توجه به این که روز تغییر کرده یا نه در جدول قرار بگیره.
اگر روز تغییر کرده باشه که مشکلی نیست ولی اگر تغییر نکرده باشه می خوام به مقدار قبلی اضافه بشه(این کار رو چه طور انجام بدم بهتره؟)
اگر راه بهتری هم هست خوشحال میشم بدونم.
قبل از پاسخ لطفا به این (http://barnamenevis.org/forum/showthread.php?t=170457&page=2) هم یه نگاه بندازید.

mina.net
پنج شنبه 08 مرداد 1388, 11:58 صبح
دوست عزیز این کار شما صحیح نیست. اولا مبلغ رو چرا به صورت استرینگ ذخیره می کنید ؟
خوب راحترین کار اینه که هر وقت درامدی حاصل شد تاریخ روز و مبلغ رو وارد کنی . یعنی اگه در یک تاریخ مشخص 5 بار درامدی حاصل شد 5 سطر هم insert بشه. وقتی هم خواستی گزارش تهیه کنی از دستور sum و group by برای دیدن جمع درامد هر روز استفاده کن.


select sum(daramad) , tarikh from tablename group by tarikh

asefy2008
پنج شنبه 08 مرداد 1388, 13:28 عصر
مبلغ رو از چه نوع بگیرم بهتره ؟
در table اصلیم برای هر تاریخ ممکنه چند بار در آمد حاصل شده باشه .ولی می خوام اون ها رو به ازای روز ، ماه و سال جدا کنم و نمودار بکشم.حالا این کار درسته یا نه؟(اگر نه شما چی پیشنهاد می کنید.)
با تشکر

mina.net
پنج شنبه 08 مرداد 1388, 14:06 عصر
شما باید هر درآمد رو به صورت جدا ثبت کنید و برای اینکه بتونید درامد هر روز رو یک جا داشته باشید باید از دستور select مناسب استفاده کنید مثل همین که بالا گذاشتم.
مبلغ رو از نوع عددی بگیر مثل (real,numberic , curenccy) تا موقع جمع بستن به مشکل نخوری.
می تونی برای هر بازه زمانی هم درامد رو حساب کنی.

asefy2008
پنج شنبه 08 مرداد 1388, 23:43 عصر
ممنون من با ویزارد کار می کنم چه طور می تونم این کار رو انجام بدم ؟(البته خودم تا یه جاهایی پیش رفتم ولی کویریش کار نمی کنه.) اگر مراحل رو توضیح بدید ممنون میشم.

asefy2008
جمعه 09 مرداد 1388, 12:25 عصر
اینم دستوراتی که به کار می برم

SELECT SUM(all_Report.[قیمت کل]) AS قیمت
FROM all_Report CROSS JOIN
Result_day
WHERE (all_Report.تاریخ = all_Report.تاریخ)

mina.net
جمعه 09 مرداد 1388, 13:44 عصر
هدفت از join کردن چیه شما که فقط مقادیر یک فیلد رو از یک جدول select می کنی. join چه معنی داره.
در ضمن در قسمت where


WHERE (all_Report.تاریخ = all_Report.تاریخ)

خوب معلومه که مقدار یک فیلد از یک جدول با خودش همیشه برابر است. مثل اینکه بنویسیم where 0=0

به نظر کدی که گذاشتی کاملا بی معنی هست. لطفا خواسته خودتون رو به صورت واضح بفرمایید تا بهتون کمک بشه.

asefy2008
جمعه 09 مرداد 1388, 15:34 عصر
من بااین کد میام تمام مقادیر ستون قیمت کل که از نوع int است رو با هم جمع می کنم و در یه table دیگه قرار میدم.(در ستون قیمت قرار میدم)
البته می تونم جمع مقادیر رو تو table دیگه قرار ندم.
در ضمن در مورد این خط:


WHERE (all_Report.تاریخ = all_Report.تاریخ)

'@' رو یادم رفت قرار بدم.
مشکلم این هست که کویریش کار نمی کنه .

asefy2008
جمعه 09 مرداد 1388, 18:21 عصر
من دو تا table دارم می خوام تمام مقادیر یک ستون رو جمع بزنم و به ستون table دیگه بفرستم( براساس یک استرینگ که از کاربر می گیره تمام رکورد هایی که تو اون string باهم یکسان هستند ستون مربوط به قیمتشون باهم جمع میشه و برای ستون مورد نظر از table دوم فرستاده میشه.)

محمدامین شریفی
جمعه 09 مرداد 1388, 22:43 عصر
شما باید هر درآمد رو به صورت جدا ثبت کنید و برای اینکه بتونید درامد هر روز رو یک جا داشته باشید باید از دستور select مناسب استفاده کنید مثل همین که بالا گذاشتم.
مبلغ رو از نوع عددی بگیر مثل (real,numberic , curenccy) تا موقع جمع بستن به مشکل نخوری.
می تونی برای هر بازه زمانی هم درامد رو حساب کنی.
سلام،دوست مان کاملا درست می گوید.
یک جدول به اسم salarytbl درست کن و برای مثال فیلد های
ID/employeeID/salary/date و فیلد های مورد نیاز دیگر را قرار بده.
یک جدول دیگر به اسم employeetbl درست کن و اطلاعات کارمندان را در آن قرار بده.
و یک رابطه یک به بینهایت، بین ID کارمندان با employeeID در salarytbl قرار بده.
هنگام گزارش گیری هم می توانی با یک view، براحتی grid خودت را پر کنی.

پیروز باشید.

asefy2008
شنبه 10 مرداد 1388, 11:56 صبح
ممنون ، من منظور شما و دستمون رو متوجه شدم ولی من الان در انتهای نوشتن برنامم هستم و اگر بخوام این کار رو بکنم باید برنامم رو دوباره بنویسم و یه چیز دیگه این که من این برنامه رو برای جایی که نمی نویسم و الان تنها به فکر تموم کردنشم .(به هدفم که بالا بردن سطح برنامه نویسیم بود رسیدم و اگر قرار باشه یک باره دیگه این برنامه رو بنویسم هرگز این طور نمی نویسم.)

محمدامین شریفی
شنبه 10 مرداد 1388, 17:11 عصر
ممنون ، من منظور شما و دستمون رو متوجه شدم ولی من الان در انتهای نوشتن برنامم هستم و اگر بخوام این کار رو بکنم باید برنامم رو دوباره بنویسم و یه چیز دیگه این که من این برنامه رو برای جایی که نمی نویسم و الان تنها به فکر تموم کردنشم .(به هدفم که بالا بردن سطح برنامه نویسیم بود رسیدم و اگر قرار باشه یک باره دیگه این برنامه رو بنویسم هرگز این طور نمی نویسم.)
شخصا،اول پایگاه داده ام را طراحی می کنم،سپس منطق برنامه ام و در آخر هم به طراحی می پردازم.اگر می خواهید دانشتان را بالا ببرید،مراحل اشتباه را برگردید.پایگاه داده را از دوباره بنویسی بهتره.

asefy2008
شنبه 10 مرداد 1388, 17:52 عصر
من هم اول پایگاه رو طراحی کردم ولی به خاطر کم تجربگی (بهتر بگم بی تجربگی) اون رو بد طراحی کردم و حتی در اواسط برنامه چندین بار مجبور شدم دوباره از اول شروع کنم.در هر صورت مشکلم حل شد و قبل از select باید یه insert into قرار می دادم.
ممنون از شما امین جان و سایر دوستان که وقت گذاشتن