PDA

View Full Version : پيدا كردن ركورد يكي مانده به آخر و تفريق آن با ركورد آخر



bita_ziba77
چهارشنبه 14 اردیبهشت 1390, 14:59 عصر
با سلام
من مجموعه اي از ماشين ها را دارم كه در يك ليست وجود دارند.
در اين ليست از هر ماشين به تعداد زيادي وجود دارد . مي خواهم اولا به آخرين ركورد هر ماشين برود.
سپس در يك فيلد ركورد آخر مرتبط با كاركرد هر ماشين را نمايش داده و در فيلد ديگر ركورد يكي مانده به آخر همين ماشين را نيز نمايش داده و در نهايت اين دو را ازهم كم نمايد.
در نهايت ليستي از ماشين آلات داشته باشيم كه در واقع كاركرد آن ها حساب شده است.

با تشكر

انگوران
چهارشنبه 14 اردیبهشت 1390, 16:11 عصر
سلام دوست عزيز، شما مي تونين اولاً با استفاده از تابع Dmax بزرگترين عدد رو پيدا كنين بعد مثلاً با متد find به ركورد مورد نظر برين .
در بخش دوم هم مي تونين ابتدا به روش فوق به آخرين ركورد برين و مقدار فيلد مورد نظر رو در يه متغيير بريزين و فيلد مورد نظر رو برابر متغيير قرار بدين و بعد با DoCmd.GoToRecord , , acPrevious به ركورد قبلي برين و مقدار جديد رو در يك متغيير ديگه بريزين و فيلد دوم رو برابر متغيير دوم قرار بدين و ... اگه نمونه هم باشه كه بهتر ميشه نظر داد.

id1385
چهارشنبه 14 اردیبهشت 1390, 21:27 عصر
با سلام
دوست عزیز نمونه ی زیر رو ببین.

روش کار :

Private Sub Form_Load()
LastRd.Caption = LastRecord("name", "c")
BeforLastRd.Caption = BFLastRecord
End Sub

Public Function LastRecord(fld As String, tbl As String) As String
If IsNull(DMax(fld, tbl)) <> True Then
LastRecord = DMax(fld, tbl)
Else
LastRecord = "NAN"
End If
End Function

Public Function BFLastRecord() As String
'Find last Record Id
Dim LstRd, BeforLast As Integer
LstRd = LastRecord("id", "c")
BeforLast = LstRd - 1

'Finding Out Last -1 Name
Dim dbs As Database, rst As Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("SELECT c.*, c.id FROM c " _
& "WHERE (((c.id)=" & BeforLast & "));")

'show result
BFLastRecord = rst.Fields("name").Value
End Function



موفق باشید.

bita_ziba77
پنج شنبه 15 اردیبهشت 1390, 08:18 صبح
با سلام
در نونه اي كه دوست عزيزمان id1385 ضميمه كرده اند فرض كنيد تعداد ماشين 405 3 و تعداد ماشين مزدا 3 نيز 3 عدد باشد و با توجه به تاريخ ، كيلومترهاي كاركرد آنها نيز ثبت شده است.
مثلا:
تاريخ نام ماشين كاركرد
90-02-15 پژو 405 10000
90-02-20 پژو 405 12000
90-02-25 پژو 405 13000
90-02-16 مزدا 3 15000
90-02-22 مزدا 3 17200
90-03-15 مزدا 3 18100

حالا چگونه مي توان در گزارشي فقط در رديف هايي يك بار نام هاي مزدا 3 و پژو 405 بيايد و آخرين تاريخ را نمايش داده و سپس كاركردتاريخ آخر را از تاريخ ماقبل آن كم كرده و نمايش دهد.
مثلا:
تاريخ آخرين دوره نام ماشين كاركرد تا دوره آخر ==> كاركرد دوره ماقبل آخر-كاركرد دوره آخر
90-02-25 پژو 405 1000 ==>12000-13000
90-03-15 مزدا 3 900 ==>17200-18100

id1385
پنج شنبه 15 اردیبهشت 1390, 18:39 عصر
با سلام
کاری که شما میخواهید انجام دهید با یه کم فکر کردن و تمرین انجام شدنیه منتها بهترین کسی که میتئنه این ایده رو انجام بده خود شما هستین، چون خواستتون رو میدونید.
یه نمونه براتون گذاشتم میتونید ازش استفاده کنید منتها اون ایده اصلیتون رو باید روش پیاده کنید.
[با توجه به ذیق وقت من معذورم ببخشید]


موفق باشید

bita_ziba77
جمعه 16 اردیبهشت 1390, 13:45 عصر
با سلام
در نمونه شما گزارشي از كل كاركردها آورده شده است.
من مي خواهم كاركرد ها به صورت تجمعي بوده و فقط اختلاف كاركرد آخرين ركورد با يكي مانده به آخر را نمايش دهد نه كاركرد كل ركورد هاي مرتبط با يك ماشين را
مثلا
طبق تصوير زير داده ها وارد شده است.
شكل 1 جدول اصلي:


شكل 2 : گزارش مورد نياز
به دست اوردن 2 ركورد آخر هر ماشين و اختلاف اين دو عدد و نمايش آخرين تاريخ هر ماشين
69601

با تشكر

id1385
شنبه 17 اردیبهشت 1390, 10:28 صبح
با سلام
این کارو شما میتونید با Sql انجام بدید:



ماشینها رو توی یه جدول قرار بدید
بعد برید به رکورد اول ماشینها
هر رکوردی که پیدا کردین:



از جدول کارکردهاتون کارکردها،تاریخ اونو به ترتیب ascending لیست کنید
بعد از لیست مورد نظر کارکردهاتون رو باهم جمع کنید و توی یک متغیر یا تکست باکس بریزید
تاریخهاتون رو از آخر بشمرید یک و دو (یک آخرین رکورد ماشن) و (دو یکی مانده با آخر)
تاریخ و کارکرد آخرین رکوردتون هرکدام رو مثل روش قبل توی یک متغیر و یا تکست باکس بریزید
حالا آخرین رکورد یک رو منهای رکورد دو بکنید اختلافش بدستتون می یاد

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

فکر کنم همون چیزی شما میخواهید همین شکلی باشه.
یه کم وقت ندارم و ایده شما رو هم ندارم شما خودتون بهتر از همه میتونین اینو بنویسین


موفق باشید.

bita_ziba77
شنبه 17 اردیبهشت 1390, 11:13 صبح
با سلام
اگر امكان دارد يك نمونه قرار دهيد .
خيلي بهش نياز دارم.

با تشكر از دوستان جهت پاسخگويي.

انگوران
یک شنبه 18 اردیبهشت 1390, 08:44 صبح
دوست عزيز شما با تابع dmax و dmin بزرگترين و كوچكترين عدد رو محاسبه كن ( روي يك فرم گزارشگيري مي توني تاريخ جاري و ماقبل اونو فيلتر كني و ... ) و اونا رو از هم كم كن . شما سعي كن انجامش بدي من هم سعي مي كنم امروز يه نمونه براتون بذارم.

انگوران
یک شنبه 18 اردیبهشت 1390, 11:41 صبح
ببين از اين نمونه مي توني ايده بگيري

bita_ziba77
یک شنبه 18 اردیبهشت 1390, 12:25 عصر
با سلام
و تشكر از كمك شما
فقط 2 مورد وجود دارد:
1) در نمونه شما مقدار max و Min كاركرد را نمايش مي دهد ولي من مي خواهم مقدار آخرين كاركرد (Max) و همچنين مقدار يكي مانده به آخر رانمايش دهد مثلا در ماشين 206 مقادير كارمرد آخر (8000 )و مقدار كاركرد ماقبل آخر (6500 )را نمايش دهد.
2) شما در اين نمونه فرمي آورديد كه كاربر بايد 2 تاريخ را وارد كرده و ماشين را نيز اانتخاب نمايد . آيا امكان دارد كه بدون انتخاب كاربر با شرط بالا ، همه ماشين آلات را با 2 كاركرد آخر و اختلاف آين دوكاركرد نمايش دهد.

با تشكر

bita_ziba77
یک شنبه 18 اردیبهشت 1390, 12:48 عصر
با سلام
همچنين فكر مي كنم اگر بشود ليستي از 2 كاركرد آخر هر ماشين آلات را تهيه كرد مي توان با توابع
DMax("karkard","table1","car_name='" & [car_name] & "'") مرتبط با آخرين كاركرد و از كد
DMin("karkard","table1","car_name='" & [car_name] & "'") مرتبط با كاركرد يكي مانده به آخر بتوان ليست نهايي را تهيه كرد.
ولي من متاسفانه نمي توانم ليستي كه شامل چندين ماشين بوده و فقط 2 كاركرد هر ماشين را نمايش دهد را بسازم.
براي يك ماشين مي توان در كوئري از top Value استفاده كرد ولي براي چند ماشين نمي دانم از چه روشي استفاده كرد.

لطفا راهنمايي نماييد.

با تشكر فراوان

انگوران
یک شنبه 18 اردیبهشت 1390, 12:52 عصر
قاعدتاً آخرين كاركرد بزرگترين كاركرد نيز هست . براي نمايش ركوردها نيز مي تونين قسمت ديتيل گزارش رو نشون بدين و ترتيب رو هم صعودي در نظر بگيرين تا دو ركورد آخر زير هر ماشين نشون داده بشه ( بعلاوه مابقي ركوردها) فقط مي مونه پيدا كردن كوچكترين كاركرد كه انشاءالله اونو هم پيدا مي كنيم . در ضمن در فرم گزارش گيري نياز نيست كه حتماً ماشين رو انتخاب كنين و مي تونه اون باكس خالي باشه تا همه ماشينها رو يه جا ببيني.

انگوران
دوشنبه 19 اردیبهشت 1390, 15:46 عصر
ببين با اين فايل كارت راه مي افته