نمایش نتایج 1 تا 14 از 14

نام تاپیک: محاسبه مانده در هر ردیف DBGrid

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    مشهد
    سن
    41
    پست
    36

    محاسبه مانده در هر ردیف DBGrid

    سلام
    من می خوام در گرید یک ستون مانده داشته باشم که برای محاسبه آن مقدار قبلی این ستون در ردیف قبل با مقدار یک فیلد در ردیف جاری جمع یا تفریق می شه برای این کار باید چکار کنم؟
    با تشکر

  2. #2
    کاربر تازه وارد آواتار Jozef
    تاریخ عضویت
    دی 1388
    محل زندگی
    تهران - اصفهان
    سن
    39
    پست
    94

    نقل قول: محاسبه مانده در هر ردیف DBGrid

    دستورات خواندن از فیلد قبل رو به صورت یه select جداگونه بازیابی کنین و سپس محاسبات را انجام دهید.

  3. #3
    کاربر تازه وارد
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    مشهد
    سن
    41
    پست
    36

    نقل قول: محاسبه مانده در هر ردیف DBGrid

    فیلد مانده از نوع fkCalculated هست و نمیشه select گرفت

  4. #4
    کاربر دائمی آواتار حسین شهریاری
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    ایران
    پست
    794

    نقل قول: محاسبه مانده در هر ردیف DBGrid

    یه فیلد محاسباتی ایجاد کنیدو...

    Adotable.fieldbyname('Mande').asfloat:=Adotable.fi  eldbyname('Bes').asfloat-Adotable.fieldbyname('Bed').asfloat+Value;
    Value:=Value+Adotable.fieldbyname('Bed').asfloat-Adotable.fieldbyname('Bes').asfloat


    البته قبلا باید مقدار متغیر Value را صفر کرده باشید.

  5. #5
    کاربر دائمی
    تاریخ عضویت
    دی 1387
    محل زندگی
    اهواز
    پست
    924

    Question نقل قول: محاسبه مانده در هر ردیف DBGrid

    [quote=shahriar63;957908]یه فیلد محاسباتی ایجاد کنیدو...

    Adotable.fieldbyname('Mande').asfloat:=Adotable.fi  eldbyname('Bes').asfloat-Adotable.fieldbyname('Bed').asfloat+Value;
    Value:=Value+Adotable.fieldbyname('Bed').asfloat-Adotable.fieldbyname('Bes').asfloat

    میشه در باره این کد توضیح بدهید؟ متشکرم

  6. #6
    کاربر تازه وارد
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    مشهد
    سن
    41
    پست
    36

    نقل قول: محاسبه مانده در هر ردیف DBGrid

    یک فیلد محاسباتی تعریف کن و یک متغیر از نوع همین فیلد
    در رویداد ONCalc دیتاستت دستور محاسبه فیلد بنویس


    DataSet['Mandeh']:=Temp_Mandeh+dataset.FieldByName('Bad').AsFloat-dataset.FieldByName('Bes').AsFloat;
    Temp_Mandeh:=dataset.FieldByName('Mandeh').AsFloat ;


    در دستوری که نوشتم Temp_Mandeh اسم متغیرم که از نوع Float و نوع فیلدم هم از این نوع
    این متغیر در واقع حاوی مقدار فیلد مورد نظرت در رکورد قبلی
    در رویداد BeforeOpen دیتاستت مقدار این متغیر باید صفر بشه
    موفق باشی

  7. #7
    کاربر دائمی
    تاریخ عضویت
    دی 1387
    محل زندگی
    اهواز
    پست
    924

    نقل قول: محاسبه مانده در هر ردیف DBGrid

    نقل قول نوشته شده توسط afsoon_k77 مشاهده تاپیک
    یک فیلد محاسباتی تعریف کن و یک متغیر از نوع همین فیلد
    در رویداد ONCalc دیتاستت دستور محاسبه فیلد بنویس


    DataSet['Mandeh']:=Temp_Mandeh+dataset.FieldByName('Bad').AsFloat-dataset.FieldByName('Bes').AsFloat;
    Temp_Mandeh:=dataset.FieldByName('Mandeh').AsFloat ;


    در دستوری که نوشتم Temp_Mandeh اسم متغیرم که از نوع Float و نوع فیلدم هم از این نوع
    این متغیر در واقع حاوی مقدار فیلد مورد نظرت در رکورد قبلی
    در رویداد BeforeOpen دیتاستت مقدار این متغیر باید صفر بشه

    موفق باشی
    میشه یک نمونه ارائه بدهید. متشکرم

  8. #8
    کاربر تازه وارد
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    مشهد
    سن
    41
    پست
    36

    نقل قول: محاسبه مانده در هر ردیف DBGrid

    این یک نمونه بود دیگه کجاش و نمی فهمی؟

  9. #9
    کاربر دائمی
    تاریخ عضویت
    اسفند 1388
    محل زندگی
    يك جاي خوش آب و هوا و سالم
    پست
    112

    نقل قول: محاسبه مانده در هر ردیف DBGrid

    دوست عزيز خوب دقت كن
    فيلد محاسباتي را ايجاد كن .
    يك متغيير اوليه ايجاد كن و مقدار اوليه مناسب را قبل از باز كرد جدول وارد كن .
    در رويداد oncalc فيلد محاسباتي يك Query بنويس كه شرطي داشته باشد كه مقادير قبلي فيلد مورد نظر را محاسبه كرده و برگرداند .
    سپس :
    متغيير اوليه = متغير اوليه + مقدار محاسبه شده Query
    مقدار فيلد محاسباتي = مقدار متغير اوليه

  10. #10

    نقل قول: محاسبه مانده در هر ردیف DBGrid

    بابت نظرات دوستان ممنون
    اين قطعه كد كاملا جواب مي ده
    ولي يه ايراد اساسي داره
    اونم اينه كه اگه روي گريد كليد pageup يا pageDown رو بزني كلا بهم مي ريزه

    كسي براي اين قضيه راه حلي نداره؟؟؟

  11. #11
    کاربر دائمی آواتار hp1361
    تاریخ عضویت
    دی 1384
    محل زندگی
    تهران
    پست
    750

    نقل قول: محاسبه مانده در هر ردیف DBGrid

    نقل قول نوشته شده توسط hedayat مشاهده تاپیک
    بابت نظرات دوستان ممنون
    اين قطعه كد كاملا جواب مي ده
    ولي يه ايراد اساسي داره
    اونم اينه كه اگه روي گريد كليد pageup يا pageDown رو بزني كلا بهم مي ريزه

    كسي براي اين قضيه راه حلي نداره؟؟؟
    سلام

    پیشنهاد من اینه که محاسبات ر سمت دیتا بیس انجام بدی و نتیجه رو در دیبی گرید نمایش بدی. یعنی اینکه مانده گیری برای هر رکورد و مانده کل مربوط به تمام رکورد های پیشین رو درون دیتا بیس انجام بدی.

    بدین صورت که با استفاده از یک کویری موارد مورد نظرت رو از دیتابیس بخوای:


    SELECT
    [RegDate],
    Bes,Bed,Bes-Bed AS Mande,
    SUM(Bes-Bed) OVER (ORDER BY [RegDate] ROWS UNBOUNDED PRECEDING) As MandeKol
    FROM dbo.TblMain
    WHERE RegDate>='2016-09-03' AND RegDate<='2016-09-05'
    ORDER BY [RegDate];


    2016-09-03_10-21-13.jpg

    البته اسم ستونها رو بخاطر خوانایی بیشتر برای شما اینطوری نامگذاری کردم و معمولا اسامی با معنی نزدیک انگلیسی ارجح ترند. تاریخ رو هم قاعدتا شما بصورت پارامتر ارسال خواهید کرد

    پ.ن : لازم به یادآوری ست که این کویری روی SQL SERVER 2012 به بالا کار خواهد کرد.

    پ.ن 2: اگر از Firebird 3 استفاده کنید، کد SQL به شکل زیر قابل استفاده خواهد بود


    select
    regdate,
    bed,
    bes,
    bes-bed AS Mande,
    sum(bes-bed) over(order by regdate) as mondekol
    from new_table
    order By RegDate



    موفق باشیم
    آخرین ویرایش به وسیله hp1361 : شنبه 13 شهریور 1395 در 11:46 صبح

  12. #12

    نقل قول: محاسبه مانده در هر ردیف DBGrid

    برای نسخه های پایین تر اس کیو ال (تا 2000 تست کردم) هم می تونید از این راه استفاده کنید:



    select *, 0 Mande
    into #T
    from TBL
    order by RegDate


    decalre @Mande decimal
    set @Mande = 0


    update #T
    set @Mande = Mande = @Mande + Bes - Bed


    select *
    from #T


    drop table #T


    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

  13. #13

    نقل قول: محاسبه مانده در هر ردیف DBGrid

    ***سلام خسته نباشین ***
    میخوام ستونهای یک فیلد رو با یک ادیت ضرب کنم و حاصل هر ستون رو روبروی همون ستون در فیلد دیگر قرار دهد
    لطفا راهنمایی کنید
    *** با تشکر فراوان ***

  14. #14
    کاربر جدید
    تاریخ عضویت
    اردیبهشت 1390
    محل زندگی
    اصفهان، نائين
    پست
    10

    نقل قول: محاسبه مانده در هر ردیف DBGrid

    نقل قول نوشته شده توسط hedayat مشاهده تاپیک
    بابت نظرات دوستان ممنون
    اين قطعه كد كاملا جواب مي ده
    ولي يه ايراد اساسي داره
    اونم اينه كه اگه روي گريد كليد pageup يا pageDown رو بزني كلا بهم مي ريزه

    كسي براي اين قضيه راه حلي نداره؟؟؟
    باسلام
    فیلدهای محاسباتی در هر پیمایش دوباره محاسبه میشوند برای حل این مشکل فیلد محاسباتی باید بصورت فیلد محاسباتی داخلی (InternalCalcField)تعریف بشه و کد بالا داخل شرط زیر قرار بگیره تا در هنگام پیمایش رکوردها عملیات محاسبه دوباره انجام نشه.

    if DataSet1.State = dsInternalCalc then begin

    end;

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •