ورود

View Full Version : مطلع شدن از آپدیت شدن یک دیتابیس ؟



mohsen57
جمعه 09 فروردین 1387, 23:51 عصر
من یک برنامه دارم که بطور مستمر رکوردهایی به یک دیتابیس اکسس اضافه میکنه. حالا من یک برنامه دیگه دارم می نویسم که لازمه هر وقت رکوردی به آن دیتابیس اضافه شد من مطلع بشم و به آن رکورد هم دسترسی داشته باشم راهی که خودم پیدا کردم اینه که هر چند ثانیه یکبار دیتا بیس رو چک کنم که به دلایلی این کار زیاد برای من کارامد نیست. شما چه راهی را پیشنهاد میکنید؟

mohsen57
شنبه 10 فروردین 1387, 04:34 صبح
الان دیدم چند روز پیش در تاپیک زیر دقیقا همین سوال پرسیده شده ولی ظاهرا کسی راه حلی پیشنهاد نکرده
http://barnamenevis.org/forum/showthread.php?t=99373

zman123456
شنبه 10 فروردین 1387, 08:54 صبح
1- از تک تک جداول یک چنین چیزی می خواهید یا فقط از بعضی جداول خاص؟
2- دسترسی برای چی نیاز دارید؟Update,delete,insert؟
3- کلیه رکوردها نیاز هست که دیده بشه یا اینکه فقط رکوردهای جدید.مثلا رکوردهای امروز که میشه با یک فیلد تاریخ اونا رو فیلتر کرد؟

Mahdi-563
شنبه 10 فروردین 1387, 14:01 عصر
اگه واسه دلفی می خوای این مناسبه :


DataSet.State in dsInsert;

zman123456
شنبه 10 فروردین 1387, 14:07 عصر
عزیز ایشون می خوان هر وقت insert صورت گرفت مطلع شوند و به خود رکورد هم دسترسی داشته باشن.با این کد اگر کاربر انصراف بزنه یا اگر برنامه از خاصیت BeginTrans استفاده کنه که زیاد به دردش نمی خوره.

mohsen57
شنبه 10 فروردین 1387, 14:29 عصر
ببینید، من 2 تا برنامه دارم
برنامه اولی از قبل کامپایل شده و من نمی تونم دستکاریش کنم این برنامه بعد از اجرا شدن شروع میکنه به Add کردن رکورد در یک جدول خاص.

برنامه دوم که خودم دارم مینویسم باید هر وقت یک رکورد جدید به آن جدول اضافه شد فیلدهای آن را بخونه و بعدش در صورت امکان آن رکورد را حذف کنه.

mohsen57
شنبه 10 فروردین 1387, 14:36 عصر
اگه واسه دلفی می خوای این مناسبه :


DataSet.State in dsInsert;
میشه یخورده بیشتر توضیح بدین. شاید کارم راه بیفته

Mahdi-563
شنبه 10 فروردین 1387, 15:00 عصر
باشه


if (DS_Hazine.DataSet.State in dsInsert) then ....

Mahdi-563
شنبه 10 فروردین 1387, 15:05 عصر
در State متدهای دیگه ای هم هست اگه خواستی بگو

vcldeveloper
شنبه 10 فروردین 1387, 17:36 عصر
if (DS_Hazine.DataSet.State in dsInsert) then ....

در State متدهای دیگه ای هم هست اگه خواستی بگو
خواهشا تا وقتی که سوال رو درست متوجه نشدید، جواب ندید!


من یک برنامه دارم که بطور مستمر رکوردهایی به یک دیتابیس اکسس اضافه میکنه. حالا من یک برنامه دیگه دارم می نویسم که لازمه هر وقت رکوردی به آن دیتابیس اضافه شد من مطلع بشم و به آن رکورد هم دسترسی داشته باشم
اگر هر دو تا برنامه رو خودتون می نویسید و غیر از این دو تا برنامه برنامه دیگه ایی که توسط فرد دیگه ایی نوشته شده باشه داده ها رو تغییر نمیده، می تونید از معماری 3-لایه استفاده کنید. به این ترتیب هر دو تا برنامه بجای اتصال مستقیم به بانک به یک Application Server وصل میشند و شما می تونید توی این Application Server هرگونه کار با دیتابیس رو ردگیری کنید و در صورت نیاز کاربران رو از تغییراتی که بوجود اومده آگاه کنید. در این زمینه تاپیک زیاد زده شده و خیلی بحث کردیم.
در صورتی که شرط بالا وجود نداشته باشه، یعنی می خواید هر Insert ایی که توسط هر برنامه ایی انجام شد رو ردگیری کنید، اون وقت باید امکانات DBMS خودتون رو ببینید. مثلا MS SQL Server در نسخه 2005 امکانی داره که میتونه کلاینت ها رو از فعالیت های روی یک بانک خاص مطلع بکنه، یا بعضی از DBMS ها از Cursor نوع Dynamic پشتیبانی می کنند و به این ترتیب با تغییر در بانک، دیتاست های سمت کلاینت هم آپدیت میشند، ولی فکر نمی کنم Access هیچکدوم از اینها رو پشتیبانی کنه.

mohsen57
شنبه 10 فروردین 1387, 23:35 عصر
با این حساب باید از یک تایمر استفاده کنم هرچند مشکلاتی به دنبال داره.

zman123456
یک شنبه 11 فروردین 1387, 09:37 صبح
چرا از قابلیتهای خود SQL استفاده نمی کنی.
یادمه یکی از دوستان می گفت SQL میتونه به آخرین رکورد Insert شده دسترسی بده.خوب اگه اینتوری هست با یک Trigger از نوع AfterInsert میتونی بگی که اون رکورد رو Delete کنی.

vcldeveloper
دوشنبه 12 فروردین 1387, 02:09 صبح
یادمه یکی از دوستان می گفت SQL میتونه به آخرین رکورد Insert شده دسترسی بده.خوب اگه اینتوری هست با یک Trigger از نوع AfterInsert میتونی بگی که اون رکورد رو Delete کنی.
1- بحث روی Access بود، نه SQL Server. وگرنه برای SQL Server میشد خیلی راحت از سرویس Notification اش استفاده کرد.
2- بحث روی آپدیت بانک بود؛ یعنی Update, Insert, Delete روی جداول یک بانک، نه فقط Insert اون هم فقط روی یک جدول!

babak_delphi
دوشنبه 12 فروردین 1387, 18:57 عصر
چطور میشه از این سرویس استفاده کرد؟
یعنی به کلاینت ها چطور اطلاع میده و مثلا آیا DBGrid آپدیت میشه؟

vcldeveloper
سه شنبه 13 فروردین 1387, 04:06 صبح
چطور میشه از این سرویس استفاده کرد؟باید در بخش SQL Server بپرسید.

یعنی به کلاینت ها چطور اطلاع میده و مثلا آیا DBGrid آپدیت میشه؟به کلاینت ها اطلاع میده. خود کلاینت تصمیم میگیره که چه واکنشی نسبت به پیام ارسال شده داشته باشه. البته کامپوننت های استاندارد دلفی بطور عادی قابلیت کار با این سرویس رو ندارند، ولی SDAC میتونه با این سرویس کار کنه و براش کامپوننت هم توی مجموعه خودش داره.

zman123456
شنبه 17 فروردین 1387, 08:26 صبح
شرمنده یه لحظه اصلا یادم رفت که بحث access هست.