محاسبه بیشترین مقدار رکوردها در جداول اکسس
سلام به سافت پلاس و یکی دیگر از آموزش های کار با نرم افزار اکسس خوش آمدید . امروز می خواهیم ببینیم که چطور می توانیم بیشترین مقادیر موجود در یک رکورد از اکسس را بدست بیاوریم .
وقتی که صحبت از بیشترین مقادیر می کنیم منظورمان این است که می خواهیم هم بیشترین مقداری که در داخل یک رکورد ( یا همان سطر های جدول ) و هم بیشترین مقداری که در داخل یک فیلد ( یا همان ستون جدول ) وجود دارد را پیدا کنیم .
اگر دوست دارید که بدانید اصلا چرا ما نیاز به این کار داریم ؟
و اگر می خواهید ببینید که محاسبه بیشترین مقادیر یک رکورد با محاسبه بیشترین مقادیر در یک سطر چقدر فرق می کند ؟
و اینکه برای محاسبه بیشترین مقادیر یک رکورد از چه روشی استفاده می کنیم و برای محاسبه همان مقدار در یک فیلد از چه روشی؛ پس از شما می خواهم که تا انتهای این مطلب من را همراهی کنید .
من علیرضا شهرآئینی هستم و تلاش می کنم که هر آن چیزی که در این زمینه به آن نیاز دارید را به ساده ترین شکل ممکن به شما آموزش بدهم .
خوشحال خواهم شد اگر بعد از مطالعه این مطلب نظر خودتان را در باره آن برای من و بقیه دوستانی که این مطلب را می خوانند در قسمت دیدگاهها درج کنید .
محاسبه بیشترین مقادیر در فیلدهای جداول اکسس
کار خودمان را از ساده ترین حالت ها شروع می کنیم . می خواهیم ببینیم که چطور می شود بیشترین مقدار موجود در داخل رکوردها یا همان ستون های یک جدول را بدست بیاوریم .
خُب این کار خیلی ساده است و شاید خیلی از شما هم به راحتی بتوانید این کار را انجام بدهید . اما اجازه بدهید نحوه انجام این کار را برای کسانی که آشنایی با نحوه انجام این کار ندارند توضیح بدهم .
برای شروع کار به تصویر زیر نگاه کنید .
این تصویر مربوط به یک جدول در اکسس است . حالا فرض کنید که می خواهیم ببینیم که بیشترین مقدار فروش برای هر کالا چقدر بوده و مربوط به کدام استان است .
خُب برای این کار می توانیم به سراغ کوئری ها برویم . برای این کار من ار کوئری زیر استفاده کرده ام .
با چند تا تنظیم خیلی ساده که در تصویر بالا هم می بینید می توانید این کوئری را ایجاد کنید . خروجی کوئری بالا چیزی مثل تصویر زیر است .
خروجی کوئری بالا درست است اما این کار از اساس یک ایراد بزرگ دارد و آن هم این است که خود جدول ما از پایه و اساس ایراد دارد می پرسید چرا ؟
چون همچین جدولی اصلا ساده ترین سطح نرمال سازی اطلاعات را هم رعایت نکرده است . می پرسید نرمال سازی چیست ؟
برای پاسخ به این سوال باید حتما مقاله نرمال سازی جداول در اکسس را مطالعه کنید .
محاسبه بیشترین مقادیر در رکورد های یک جدول
همین اول بگویم که منظور از رکورد در یک جدول همان ردیف های موجود در داخل یک جدول اکسس است .حالا بیایید باز هم یک مثال را بررسی کنیم .
به تصویر زیر نگاه کنید .
می خواهیم ببینیم که بیشترین مقدار فروش در هر کدام از استانها مربوط به کدام کالا و به چه تعداد است .
شاید تصور کنید برای این کار باز هم می توانید به سراغ تابع MAX بروید و خیلی راحت با استفاده از آن این کار را انجام بدهید .
اما راه حل این کار چیز دیگری است . درست است که برای حل این مساله باید از کوئری استفاده کنیم اما نحوه طراحی این کوئری کمی متفاوت از یک کوئری ساده است .
تفاوت از این جهت که برای طراحی این کوئری ما احتیاج به یک تابعی داریم که در مجموعه توابع داخلی اکسس نیست . پس در قدم اول باید با هم یک تابع ایجاد کنیم .
برای این کار باید چند تا مرحله خیلی ساده را انجام بدهیم .
اول دکمه های ALT+F11 را فشار دهید تا وارد محیط کد نویسی اکسس شوید .
در این محیط به منوی Insert رفته و گزینه module را انتخاب کنید .
حالا کدهای زیر را کپی و آنها را در داخل ماژول خودتان وارد کنید .
Option Compare Database
Option Explicit
Public Function maxvalue(ByVal Mytbl As String, _
ByVal findvalue As Variant, _
ByVal findField As String, _
ByVal returnvakue As Integer) As Variant
Dim dbs As DAO.Database
Dim criteria As String
Dim value As Variant
Dim column As String
Dim fd As Field
maxvalue = Null
If IsNull(SearchValue) Then
Exit Function
End If
criteria = "[" & findField & "]="
If VarType(SearchValue) = vbString Then
criteria = criteria & "'" & findvalue& "'"
ElseIf VarType(SearchValue) = vbDate Then
criteria = criteria & Format$(SearchValue, "\#mm\/dd\/yyyy\#")
Else
criteria = criteria & SearchValue
End If
value = Null
Set dbs = CurrentDb
With dbs.OpenRecordset("select * from [" & Mytbl & "] where " & criteria & ";")
If Not (.BOF And .EOF) Then
.MoveFirst
For Each fd In .Fields
If UCase(fd.Name) <>_
UCase(findField) And (fd.Attributes And dbAutoIncrField) = False Then
If IsNull(value) Then
value = fd.value
column = fd.Name
Else
If value < fd.value Then
value = fd.value
column = fd.Name
End If
End If
End If
Next
End If
End With
If returnvakue = 1 Then
maxvalue = value
Else
maxvalue = column
End If
End Function
با استفاده از این کدها ما یک تابع جدید را در اکسس تعریف کرده ایم . حالا می توانیم از این تابع در داخل کوئری خودمان استفاده کنید .
مراحل بعد از این را می توانید در ویدئوی زیر مشاهده کنید .
امیدوارم که این مطلب هم برایتان مفید و کاربردی بوده باشد . اگر نظر و یا سوالی در مورد این مطلب دارید می توانید در قسمت دید گاهها درج کنید .
در ضمن اگر علاقمند به مباحث برنامه نویسی وی بی ای در اکسل و یا اکسس هستید می توانید به پیج اینستاگرام سافت پلاس هم سری بزنید .
مطالب زیر را حتما مطالعه کنید
مفهوم join در SQL و دیتابیس اکسس +ویدئو
ساخت برچسب در اکسس💥چطور آنها را ایجاد و مدیریت کنیم ؟
ریبون ها در اکسس💥از مخفی کردن تا مدیریت کردن آنها
چطوری متن ها و تصاویر را بصورت متحرک در اکسس نمایش بدهیم ؟
فرمت دهی نوشته ها در اکسس | کاربرد + مثالها
۵ ویژگی در فرم های اکسس که کمتر از آنها خبر داشتید .
4 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
باسلام و تشکر از این آموزش کاربردی ، اگه ممکنه این روش رو برا min و avg هم آموزش بدید ، ممنون
سلام حتما توی بروزرسانی های بعدی این مورد رو هم لحاظ خواهم کرد
باسلام و وقت بخیر
کد نوشته شده دارای ایراد میباشد
داخل فانکشن findvaluse جهت ورود مقادیر تعریف شده ولی داخل تابع دو جا searchvaluse استفاده شده ، ممنون میشم مجدد چک بفرمایید ،باتشکر
بزودی نمونه فایل قرار می گیرد می توانید از آن استفاده کنید .