PDA

View Full Version : تعیین رکورد آخر؟



lorzadehj
شنبه 12 فروردین 1391, 08:40 صبح
با سلام خدمت همه اساتید
بانکی دارم که شامل چند فیلد و مقدار زیادی رکورد هست اما سوال بنده
چگونه 8 رکوردآخرهر کسی را به صورت لیست تعیین کنم
تاکید می کنم 8 رکورد آخر هر نفر (شماره مشترک)به صورت لیست
با تشکر فراوان

Abbas Amiri
شنبه 12 فروردین 1391, 15:26 عصر
از طریق کوئری نمیدانم ولی با ایجاد جدول میشود.
ضمن اینکه نام اشیا و فیلدها را انگلیسی کنید تا مشکلی جهت دستورات سیکیوال پیش نیاید. نام جدول وفیلدها را مانند کد زیر تغییر دهید(جدول Hozour)، (فیلدها MemberID,sDate,Present)
لیست موردنیاز شما درجدول tblTop8 تشکیل خواهدشد.


Sub MakeTableTop8()
On Error Resume Next
Dim rs As Recordset, strSQL As String
Set rs = CurrentDb.OpenRecordset("SELECT MemberID FROM Hozour GROUP BY MemberID;")
rs.MoveLast
rs.MoveFirst
If DCount("*", "MSysObjects", "Name='tblTop8' AND Type=1") = 0 Then
DoCmd.CopyObject , "tblTop8", acTable, "Hozour"
End If
CurrentDb.Execute "DELETE * FROM tblTop8"
While Not rs.EOF
strSQL = "INSERT INTO tblTop8 SELECT TOP 8 MemberID, sDate, Present FROM Hozour WHERE MemberID = " & rs(0) & " ORDER BY sDate Desc;"
CurrentDb.Execute strSQL
rs.MoveNext
Wend
Set rs = Nothing
End Sub

lorzadehj
شنبه 12 فروردین 1391, 18:24 عصر
با سلام جناب امیری
آقا دستتون درد نکنه اما یک خواهش دارم
امکان داره که فایل ضمیمه رو تکمیل کنید
خیلی ازتون متشکرم

Abbas Amiri
شنبه 12 فروردین 1391, 18:53 عصر
این هم نمونه

lorzadehj
شنبه 12 فروردین 1391, 19:02 عصر
باسلام مجدد
جناب امیری خیلی ممنون اما یک مشکلی هست دیگه up date نمیشه
یعنی اگر رکوردی اضافه کنم جزو 8 رکورد آخر نمی آید

Abbas Amiri
شنبه 12 فروردین 1391, 19:04 عصر
اگر شما بگویی چه استفاده ای ازاین موضوع میکنید راهنمایی کنم

lorzadehj
شنبه 12 فروردین 1391, 19:12 عصر
می خواهم در صد حضور افراد انجمنی را بگیرم اما برایم 8 جلسه آخر اهمیت دارد
لذا این جلسات اگر مداوم ثبت شود باید برنامه آن را up date کند
با تشکر

Abbas Amiri
شنبه 12 فروردین 1391, 19:21 عصر
اگر این آمار توسط گزارش ارائه می شود قبل از دستور بازکردن گزارش (یا فرم) تابع فوق صدا زده شود واگر درفرم اصلی برنامه هست پیشنهادم استفاده از تایمر فرم است . مقدار Timer Interval فرم را 10000 قراردهید(برای ]پدیت هر 10 ثانیه یکبار) وکد زیر درروال On timer فرم قراردهید


Private Sub Form_Timer()
If blnNew Then
MakeTableTop8
Me.Refresh
End If
blnNew = False
End Sub


البته بدلیل اینکه این عملیات سیستم را مشغول میکند بهتر است چک شود آیا رکورد جدیدی اضافه شده ویا نه وسپس عملیات انجام شود برای اینکار یک متغیر عمومی ازنوع بولین تعریف کنید ودرزمانی که رکورد اضافه میکنید آنرا true کنید ودرروال تایمر فرم پس از چک کردن دردستور شرطی آنرا False کنید

lorzadehj
یک شنبه 13 فروردین 1391, 12:30 عصر
سلام جناب امیری
یک کمی با اون کدی که نوشته بودید کار کردم و خدارو شکر حل شد
مشکل در آخر کد بود
با تشکر فراوان

lorzadehj
جمعه 01 اردیبهشت 1391, 17:32 عصر
با سلام مجدد
در این مورد اگر می شد یک کوئری درست کرد خیلی توپ می شد
با اجازه آقای امیری از اساتید کسی هست که در این مورد کمکم کنه؟
با تشکر

lorzadehj
یک شنبه 23 مهر 1391, 06:25 صبح
باسلام
کسی هست که کمکم کنه ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
کد آقای امیری خیلی خوبه ولی با زیاد شدن رکورد ها کند شده و برنامه رو با مشکل مواجه کرده