PDA

View Full Version : جمع یک ستون از دیتابیس و نمایش در لیبل



Fery666
جمعه 20 خرداد 1401, 09:33 صبح
سلام وقتتون بخیر خسته نباشید .

من یه جدول دارم که میخوام ستون های مبلغ رو جمع کنم .

برای نمایش خروجی کار باید چکار کنم که در یک لیبل نمایش بده .

کد اتصال به جدول منم اینه :



con.Open()
DS = New DataSet
DV = New DataView
strsql = "Select SUM(Mablagh) AS Jam_Mablagh From tblDaryaft"
DA = New OleDbDataAdapter(strsql, con)
DS.Clear()
DA.Fill(DS, "tblDaryaft")
DV = DS.Tables("tblDaryaft").DefaultView
con.Close()

mazoolagh
شنبه 21 خرداد 1401, 08:00 صبح
USING con AS NEW OLEDBCONNECTION(.....)
con.OPEN()
USING CMND AS NEW OLEDBCOMMAND("Select SUM(Mablagh) AS Jam_Mablagh From tblDaryaft" , con)
label.TEXT= COM.EXECUTESCALAR()
END USING
END USING

mazoolagh
شنبه 21 خرداد 1401, 08:08 صبح
اگر از قبل tblDaryaft رو در یک datatable ریختین، میتونین با استفاده از COMPUTE جمع رو مستقیما محاسبه کنین:

label.TEXT= tblDaryaft_DATATABLE.COMPUTE("SUM(Mablagh)", "")

DataGridview Footer (barnamenevis.org) (https://barnamenevis.org/showthread.php?570121-DataGridview-Footer)

Fery666
چهارشنبه 08 تیر 1401, 22:46 عصر
سلام دوستان .

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




con.Open()
DS = New DataSet
DV = New DataView
strsql = "Select Mablagh From tblJozeeyat Where Nam Like '%" & CB_moshtari.Text & "%'"
DA = New OleDbDataAdapter(strsql, con)
DS.Clear()
DA.Fill(DS, "tblJozeeyat")
DV = DS.Tables("tblJozeeyat").DefaultView
Dim DR As DataRow = DV.Table.NewRow
DR(0) = DV.Table.Compute("SUM(Mablagh)", "")
mand = DR(0).ToString
con.Close()

ROSTAM2
پنج شنبه 09 تیر 1401, 12:20 عصر
سلام.
نمی شه برا اون تابع Compute - دیتا تایپ تعیین کرد آیا؟

mazoolagh
شنبه 11 تیر 1401, 09:39 صبح
سلام.
نمی شه برا اون تابع Compute - دیتا تایپ تعیین کرد آیا؟

سلام و روز خوش
دیتاتایپ compute از نوع object هست و با توجه نوع فیلدی که روش عملیات انجام میشه مشخص میشه - خلاصه این که دیتاتایپ همون فیلد رو میگیره.
حدس میزنم ایشون فیلد مثلا int16 یا byte دارن و نتیجه compute بزرگتر از این هست که بشه با اینها نشون داد.

mazoolagh
شنبه 11 تیر 1401, 09:53 صبح
من با این کد یه ستون از جدول رو جمع می کنم .
ولی وقتی مقدار عدد بالا باشه خطا میده .


سلام دوباره
فکر کنم شما کار رو بیخودی پیچیده اش کردین.
دلیل خاصی داره که وقتی جدول رو پر کردین و همه چیز برای compute آماده است از روش یک دیتاویو میسازین و باز از روی این یک دیتاتیبل میسازین و بجای اینکه روی جدول اصلی compute بزنین روی این انجام میدین؟
اون اضافه کردن row جدید برای چی هست؟

Fery666
دوشنبه 13 تیر 1401, 21:57 عصر
سلام دوباره
فکر کنم شما کار رو بیخودی پیچیده اش کردین.
دلیل خاصی داره که وقتی جدول رو پر کردین و همه چیز برای compute آماده است از روش یک دیتاویو میسازین و باز از روی این یک دیتاتیبل میسازین و بجای اینکه روی جدول اصلی compute بزنین روی این انجام میدین؟
اون اضافه کردن row جدید برای چی هست؟


خب شما بگید زا چه طریقی جمع کنم ؟

mazoolagh
پنج شنبه 16 تیر 1401, 10:20 صبح
کد دقیق رو قبلا براتون در پست های 2 و 3 گذاشتم.

1- اگر نیازی به ریختن مقادیر جدول در دیتاتیبل ندارین و فقط جمع ستون نیاز هست که همین کد پست 2 کافیه.

2- اگر لازم هست که حتما جدول در یک دیتاتیبل باشه (برای کارهای دیگه) و آپدیت دیتا هم نیازه که میتونین با datatadpter جدول رو پر کنین:
DIM strsql = "SELECT ...."
DIM DS AS NEW DATASET
USING con AS NEW OLEDBCONNECTION(.....)
con.OPEN()
DIM DA AS NEW OLEDBDATAADAPTER(strsql , con)
DA.FILL(DS)
END USING
label.TEXT= DS.TABLES(0).COMPUTE("SUM(Mablagh)", "")


3- اگر واقعا به جدول نیاز هست ولی آپدیت دیتا ندارین بهتره از datareader بجای dataadapter استفاده بشه:
DIM DT AS NEW DATATABLE
USING con AS NEW OLEDBCONNECTION(.....)
con.OPEN()
USING CMND AS NEW OLEDBCOMMAND("SELECT ..." , CON)
USING DR AS OLEDBDATAREADER= CMND.EXECUTEREADER()
DT.LOAD(DR)
END USING
END USING
END USING
label.TEXT= DT.COMPUTE("SUM(Mablagh)", "")