PDA

View Full Version : ثبت تمامی فعالیتهای کاربر در یک جدول



mmha_85
یک شنبه 13 اسفند 1385, 12:47 عصر
سلام خدمت دوستان
چطوری میشه اضافه کردن یک رکورد توسط کاربر رو فهمید؟
من یک جدول دارم که تمامی فعالیت های کاربر باید در اون ثبت بشه. مثلا وقتی که وارد برنامه میشه، کاربر وارد شده، ساعت ورود و تاریخ ورود رو در اون جدول ثبت می کنم. حالا می خوام وقتی رکوردی رو اضافه کرد و یا حذف کرد، اون رو هم ثبت کنم. چطوری میشه این کار رو انجام داد؟

ممنون

mpmsoft
یک شنبه 13 اسفند 1385, 12:57 عصر
شما می تونی یک ایونت از روی آبجکتت بسازی
Dim rs WithEvent As ADODC.RecordSet
و سپس وارد ایونتهای مربوطه شده

مثلا ایونتی داره زمانی که رکوردی حذف می شه
زمانی که رکوردی اضافه می شه
زمانی که رکوردی آپدیت می شه

mmha_85
یک شنبه 13 اسفند 1385, 15:31 عصر
شما می تونی یک ایونت از روی آبجکتت بسازی
Dim rs WithEvent As ADODC.RecordSet
و سپس وارد ایونتهای مربوطه شده

مثلا ایونتی داره زمانی که رکوردی حذف می شه
زمانی که رکوردی اضافه می شه
زمانی که رکوردی آپدیت می شه

من تا به حال این کار رو نکردم. میشه لطفا یه نمونه کوچیک بذارین؟

moustafa
یک شنبه 13 اسفند 1385, 15:44 عصر
شما یه جدول بساز با فیلدهای :
زمان ورود ،زمان خروج ،زمان حذف ،زمان اضافه کردن ،زمان ویرایش و........
در رویداد مربوط به هرکدوم این الگوریتم رو اضافه کن
1- یه رکورد جدید در جدول بالا ایجاد کنه
2- بسته به نوع عمل مقدار فیلد مربوطه رو مساوی تابع :
now()

mmha_85
یک شنبه 13 اسفند 1385, 15:47 عصر
شما یه جدول بساز با فیلدهای :
زمان ورود ،زمان خروج ،زمان حذف ،زمان اضافه کردن ،زمان ویرایش و........
در رویداد مربوط به هرکدوم این الگوریتم رو اضافه کن
1- یه رکورد جدید در جدول بالا ایجاد کنه
2- بسته به نوع عمل مقدار فیلد مربوطه رو مساوی تابع :
now()

من هم دقیقا همین کار رو انجام دادم و زمان های ورود به فرم و خروج از برنامه و ... رو در همین جدول ثبت می کنم. مشکلم اینجاست که نمی دونم چگونه میشه وقتی کاربر یک رکورد اضافه می کنه و یا حذف می کنه، اون ساعت رو بردارم.
در حقیقت من با کدوم ایونت می تونم این کار رو انجام بدم؟

moustafa
یک شنبه 13 اسفند 1385, 15:57 عصر
شما ساعت رو بر نمیداری برای هر عمل یه رکورد جدید اضافه میشه و زمان در ان درج میشه
اما اگه منظورت اخرین زمان و بصورت تک رکوردیه با یه آپدیت کوئری زمان روبه =() now.
اپدیت کن

mmha_85
یک شنبه 13 اسفند 1385, 16:02 عصر
دوست عزیز ظاهرا من نتونستم هنوز مشکل رو درست شرح بدم. مشکل اینجاس که من از کجا بفهمم که کاربرم یک رکورد اضافه کرد و یا اینکه یک رکورد حذف کرد؟ مشکل اینجاس، بقیه چیزها حل شده.

moustafa
یک شنبه 13 اسفند 1385, 16:37 عصر
مگه شما در فرمت دکمه حذف ،ویرایش ،اضافه ،ذخیره و ....... نذاشتی ؟!!!!!
پس کاربر چطوری کارها فوق رو انجام میدهده ؟ مستقیما از روی جدول ؟
شما باید شیفت رو قفل کنی وکاربر فقط از طریق فرم رو اطلاعات مانور بده بقیه کارها هم که ساده
منظورم حذف ،اضافه و غیره خود اکسس دکمه های ویزارد برای هر مورد داره وشما الگوریتم گفته شده رو هم بهش اضافه کن

mmha_85
یک شنبه 13 اسفند 1385, 16:49 عصر
مگه شما در فرمت دکمه حذف ،ویرایش ،اضافه ،ذخیره و ....... نذاشتی ؟!!!!!
پس کاربر چطوری کارها فوق رو انجام میدهده ؟ مستقیما از روی جدول ؟
شما باید شیفت رو قفل کنی وکاربر فقط از طریق فرم رو اطلاعات مانور بده بقیه کارها هم که ساده
منظورم حذف ،اضافه و غیره خود اکسس دکمه های ویزارد برای هر مورد داره وشما الگوریتم گفته شده رو هم بهش اضافه کن

من دکمه شیفت رو بستم. منظورتون رو از مستقیم روی جدول کار کردن نمی فهمم. من هم مثل بقیه، جداولم رو پشت فرم قرار می دم و کاربرم با فرمها کار می کنه.
روی فرم های برنامه هم دکمه حذف ،ویرایش ،اضافه ،ذخیره و ....... ندارم. حالا میشه بگین چطوری میشه بفهمم کاربرم یک رکورد اضافه کرده و یا یک رکورد حذف کرده؟:گریه:

samaneh_h
یک شنبه 13 اسفند 1385, 17:02 عصر
تو کافیه یه فیلد به جدولت اضافه کنیم به نام مثلا edit_time بعد دیفالت ولیوی اون رو بذاری برابر ()now=
خوب هر تغییری این زمان رو توی اون رکورد خاص تغییر می‌ده

moustafa
یک شنبه 13 اسفند 1385, 17:05 عصر
گفتم که در فرمت با استفاده از ویزارد دکمه های مربوط به حذف ،اضافه و...... رو بذار و الگوریتم مربوطه رو بهش اضافه کن
اگه نتونستی برنامه ات رو اپلود کن

mmha_85
یک شنبه 13 اسفند 1385, 17:31 عصر
تو کافیه یه فیلد به جدولت اضافه کنیم به نام مثلا edit_time بعد دیفالت ولیوی اون رو بذاری برابر ()now=
خوب هر تغییری این زمان رو توی اون رکورد خاص تغییر می‌ده

ببین، من یه جدول دارم که فیلدهاش ایناس: فرم، عمل انجام شده، کاربر، زمان، تاریخ
حالا وقتی کاربر من فرم "شماره 1" رو باز میکنه، من توی این جدولم، کاربری که این فرم رو باز کرده، تاریخ و زمان باز شدن فرم رو ثبت می کنم. (در فیلد فرم می نویسم: فرم شماره 1، در فیلد عمل انجام شده می نویسم: باز کردن فرم)
برای انجام این کار (کاری که بالا شرحش دادم)، من روی ایونت on open کد مورد نظرم رو می نویسم.
دقیقا وقتی کاربرم فرم رو می بنده، من همون کارهای بالا رو انجام می دم و فیلد عمل انجام شده رو با "بستن فرم" پر میکنم. این کد رو هم روی ایونت on close می نویسم.
حالا من دارم دنبال جایی می گردم که وقتی کاربرم رکوردی رو اضافه کرد و یا حذف کرد، اون جدول مذکور رو پر کنم. ولی هرچی می گردم جایی پیدا نکردم که اون کد رو اونجا بنویسم.
برای اینکه یه خورده از بحث جدولی دور بشیم، اینطوری مثال می زنم. فرض کنید می خوایم وقتی کاربرمون یک رکورد اضافه کرد بهش پیغام بدیم که یک رکورد اضافه شد. این کد رو کجا بنویسم؟

moustafa
یک شنبه 13 اسفند 1385, 22:25 عصر
after insert
on delete
after update
همگی این رویدادها در فرم هستند

ma_reyhan
پنج شنبه 24 اسفند 1385, 02:30 صبح
با تشکر از دوستان در خصوص این مبحث اگر امکان دارد یک نمونه فایل نیز پیوست گردد تا موضوع قابل فهم تر باشد

ma_reyhan
یک شنبه 27 اسفند 1385, 02:33 صبح
یک نمونه فایل می گزارم فکر کنم مشکل دوستان تا حدودی حل بشه

moustafa
دوشنبه 13 فروردین 1386, 15:14 عصر
اینم یه نمونه

Private Sub Form_AfterInsert()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("table1")
rs.AddNew
rs!tim = Now()
rs!action = "insert"
rs.Update
rs.Close

Set rs = Nothing

End Sub

Private Sub Form_AfterUpdate()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("table1")
rs.AddNew
rs!tim = Now()
rs!action = "update"
rs.Update
rs.Close

Set rs = Nothing

End Sub

Private Sub Form_Delete(Cancel As Integer)
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("table1")
rs.AddNew
rs!tim = Now()
rs!action = "delete"
rs.Update
rs.Close

Set rs = Nothing

End Sub

اگر unbondکار می کنید کدهای بالا را به کلید مربوطه اضافه کنید

moustafa
دوشنبه 20 فروردین 1386, 20:23 عصر
دوستان اگه از سطح دسترسی اکسس استفاده شه اون موقع چطوری نام کاربر وارد اون جدول بشه ؟

mmha_85
دوشنبه 20 فروردین 1386, 20:42 عصر
دوستان اگه از سطح دسترسی اکسس استفاده شه اون موقع چطوری نام کاربر وارد اون جدول بشه ؟

مقدار بازگشتی توسط CurrentUser همان کاربر در سطح اکسس است. می توان با استفاده از دستور:
()me.user= currnetuser
فیلد user که در جدول مورد نظر پیش بینی شده رو مقدار دهی کرد.

moustafa
دوشنبه 20 فروردین 1386, 20:56 عصر
مقدار بازگشتی توسط CurrentUser همان کاربر در سطح اکسس است. می توان با استفاده از دستور:
()me.user= currnetuser
فیلد user که در جدول مورد نظر پیش بینی شده رو مقدار دهی کرد.
ممنون
در این مواقع دیگه مجبوریم از سطح دسترسی استفاده کنیم تا کاربران عادی نتونند به ویرایش جدول فوق بپردازند

mmha_85
دوشنبه 20 فروردین 1386, 22:34 عصر
الیته می تونین با قرار دادن حالت start up برنامه در وضعیتی که در عکس آمده، یک فرم رو به عنوان فرم اصلی برنامه در موقع اجرا باز کنید (مانند فرم main در عکس ذکر شده) تا کاربر نتونه به حالت design جداول و فرم ها دسترسی داشته باشه و بنابر این کاربر عادی نمی تونه اون جدول رو ویرایش کنه.
البته راه های دیگر مثل هیدن کردن جدول هم وجود داره و البته طبعا یکی از راه ها هم همونطور که خودتون گفتین استفاده از سطح دسترسی است

moustafa
سه شنبه 21 فروردین 1386, 02:16 صبح
غیر از سطح دسترسی فایل رو mde کنی بعدش هم shifte قفل کنی که نشه به پنجره دیتابیس دسترسی پیدا کرد بازم یه کاربر یه مقدار از اکسس چیزی بلد باشه براحتی جداول رو import link می کنه به یه فایل دیگه و هر مانوری که خواست انجام میده
حتی خود سطح دسترسی هم ثبات نداره چون recovery میشه

mmha_85
سه شنبه 21 فروردین 1386, 12:24 عصر
خوشبختانه کاربرای من اینقدرها هم از اکسس سر در نمیارن...!!!:لبخند:
اما به هر حال حق با شماس. من که فعلا راهی به ذهنم نمی رسه. مگر اینکه دوستانی که در این زمینه تجربه دارن راهنمایی کنن.

mohammadgij
سه شنبه 21 فروردین 1386, 17:29 عصر
ببین من فکر می کنم هیچ راهی در اکسس معمولی وجود نداره که نشه جداول رو لینک کرد. مگر اینکه شما لینک جداول رو در ابتدای لود شدن MainForm برنامتون برقرار کنید و در هنگام بستن برنامه تمام لینک ها رو پاک کنید که این عملیات زمان بره و بهتره به نظر من از اکسس پروجکت و SQL استفاده کنید

j.farazani
سه شنبه 28 فروردین 1386, 21:14 عصر
سلام به همه دوستان
آیا میشه از یک mdb به صورت multi userاستفاده کرد. اگه میدونید کمکم کنید خدا خیرتون بده!!!!!!!!!

davood-ahmadi
سه شنبه 28 فروردین 1386, 23:34 عصر
بله من خودم تا 6 کاربر را دیدم که جواب می دهد.

j.farazani
چهارشنبه 29 فروردین 1386, 23:32 عصر
بله من خودم تا 6 کاربر را دیدم که جواب می دهد.
داوود جان دست درد نکنه اما ظاهرا باید تنظیماتی رو انجام داد شما میدونی چه تنظیماتی لازمه :متفکر:

davood-ahmadi
جمعه 31 فروردین 1386, 13:38 عصر
تنظیمات خاصی لازم نیست. شما فقط باید برنامه خود را در یک فولدر به اشتراک گذاشته و حق دسترسی کاربران را خود ویندوز بدهید تا کاربران بتوانند از آن استفاده کنند.

j.farazani
جمعه 31 فروردین 1386, 20:00 عصر
دستت درد نکنه خیلی عالی بود حل شد :تشویق: :تشویق: :تشویق: