View Full Version : حرفه ای: وقتي دكمه del در برنامه زده ميشه تو ديتا بيس ركورد حذف نشه
dosetddaram
سه شنبه 31 شهریور 1388, 08:35 صبح
با سلام به همه دوستان
من يك برنامه دارم كه ديتا بيسش تو sql2000 هستش ميخوام وقتي دكمه del در برنامه زده ميشه تو ديتا بيس ركورد حذف نشه يا لااقل تو يه تيبل ديگه اي هم ذخيره بشه واگه بشه براي يك يوزر خاص اين محدوديت باشه. توضيح اينكه
1سورس برنامه رو ندارم و فقط مجبورم با tabel ها كار كنم
2 تمامي permission ها رو روي user,tabel ها اعمال كردم اما هيچ اثري نداشت
3 قسمت stored procedure خالي است
ممنون از راهنمايي تون
amir_alaki
سه شنبه 31 شهریور 1388, 10:46 صبح
باسلام
اگه SP های اونو ندارین بهترین راه به نظرم اینه که یک تریگر برای عمل Del بر روی جدول مربوطه تعریف کنین ، که مثلا اون سطری که Del میشه رو در یه جدول دیگه Insert کنه.
در مورد کاربر ها هم به نظرم چون سورس برنامه رو ندارین این کار شدنی نیست ، چون باید کاربران در رشته ارتباطی بانک اطلاعاتی شما از داخل برنامه تنظیم شوند.
Asad.Safari
سه شنبه 31 شهریور 1388, 12:04 عصر
فقط با تریگر امکان پذیر می باشد...
در گوگل بزنید : Database Trigger
DataMaster
سه شنبه 31 شهریور 1388, 19:40 عصر
محدوديت ها هم اينقدر ريز نيستند كه بخواهيد اين چيزا رو اعمال كنيد
شما مي تونيد به يه كاربر SQL محدوديت در اعمال عمليات درح و حذف و ويرايش و select در مورد جداول اعمال كنيد
dosetddaram
چهارشنبه 01 مهر 1388, 07:11 صبح
با تشكر از data master عزيز
من فقط دادن محدوديت ها رو از روي sql كه با تيك زدن آنها روي تيبل ها يا يوزرها(كه denny كردن del هيچ اثري در برنامه نداشت و باز هم del ميكرد) ميتوان اعمال كرد را بلدم و با دستورات sql بلد نيستم كه به يك يوزر خاص فقط محدوديت del رو بدم كه طبق گفته دوستان در تريگر بنويسم:ناراحت:
Asad.Safari
چهارشنبه 01 مهر 1388, 09:39 صبح
دوست عزیز که همشهری ما هم هستی ... اگر بهش پرمیشن ندی در داخل برنامنت حتما با مشکل مواجه خواهی شد ...
شما چرا نمیخای از تریگر استفاده کنی ؟
موفق باشید
dosetddaram
چهارشنبه 01 مهر 1388, 11:23 صبح
همشهري و دوست عزيزم Sir asad
شما درست ميفرماييد مسئله اين است كه من براي اولين بار كه ميخواهم تريگر بنويسم نياز به راهنمايي شما و ساير دوستان براي ديدن دستورات مشابه دارم كه بتوانم مشكلم را حل كنم خيلي ضروري است لطفا بيشتر راهنمايي نماييد
dosetddaram
دوشنبه 06 مهر 1388, 07:13 صبح
من هنوزم منتظرم كه دوستان يك استارت به من بزنن تا ادامه بدم چون هنوز جوابو پيدا نكردم
خيلي حياتي
محمد سلیم آبادی
دوشنبه 06 مهر 1388, 10:18 صبح
من هنوزم منتظرم كه دوستان يك استارت به من بزنن تا ادامه بدم چون هنوز جوابو پيدا نكردم
خيلي حياتي
سلام،
شما تنها می خواهین مانع از حذف سطری توسط کاربران شوید؟ یا اینکه کلا می خواهین هیچ کاربری نتواند حذف، ویرایش یا درج کند؟ یعنی داده ها فقط Read-Only شوند.
اگر اینگونه باشد کافی است که در ساختار جدولتان یک Check Constraint اضافه کنین با محتوای زیر:
Alter Table T1
Add Constraint CK_ReadOnly
Check ( 1 =2 )
ASKaffash
دوشنبه 06 مهر 1388, 12:01 عصر
سلام
یک تریگر از نوع Instead of روی آن جدول برای Event مربوط به Delete ایجاد کنید بعدا داده های در یافتی را از درون تریگر به جدول دیگری انتقال دهید با اینکار هیچ رکوردی حذف نمی شود
به صفحه 54 لینک نگاه کنید:
http://barnamenevis.org/forum/showthread.php?t=106494
محمد سلیم آبادی
دوشنبه 06 مهر 1388, 17:16 عصر
کد خیلی ساده است:
Create Trigger Trg
On Your_table
Instead of Delete
AS
Raiserror ('You Cannot Delete!',16,1)
البته روشی که من در پست قبلیم قرار دادم باید تنها مانع از ویرایش و درج سطری در جدول شود ولی در مورد حذف نباید تاثیری داشته باشد به جاش می توانین از کد بالا استفاده کنین.
dosetddaram
دوشنبه 06 مهر 1388, 18:46 عصر
با سلام و تشكر از نظر شما اما كد فوق اثري در delet نداشت
Create Trigger Trg
On Your_table
Instead of Delete
AS
Raiserror ('You Cannot Delete!',16,1)
و بدون هيچ عيب و نقصي delet انجام شد
توضيح اينكه يك فايل access هم در كنار فايل exe در كلاينت وجود دارد كه نميدانم آن هم تاثيري در delete از سطر هاي تيبل sql دارد يا نه؟؟
محمد سلیم آبادی
دوشنبه 06 مهر 1388, 19:13 عصر
کد مربوط به Trigger ای که گذاشتم را روی سیستم خودم اجرا کردم و مانع از حذف سطری از جدول شد.
نمی دانم چرا در برنامه شما جواب نمی دهد.
dosetddaram
سه شنبه 07 مهر 1388, 07:36 صبح
دوست خوبم
بعد از بررسي ديدم كه تو برنامه سطرهاي حذفي ديده نميشه(يعني حذف ميشه) بعد از زدن delو اجراي
تريگر شما باعث شد كه سطر از تيبل حذف نشه اما تعدادي از اطلاعات فيلدها ي آن سطر را خالي ميكنه كه باعث ميشه حذف شده به نظر بياد و مستقيما از تيبل حذف كردني تريگر شما به درستي كار ميكنه
ASKaffash
سه شنبه 07 مهر 1388, 08:28 صبح
با سلام و تشكر از نظر شما اما كد فوق اثري در delet نداشت
Create Trigger Trg
On Your_table
Instead of Delete
AS
Raiserror ('You Cannot Delete!',16,1)
و بدون هيچ عيب و نقصي delet انجام شد
توضيح اينكه يك فايل access هم در كنار فايل exe در كلاينت وجود دارد كه نميدانم آن هم تاثيري در delete از سطر هاي تيبل sql دارد يا نه؟؟
سلام
به نظر شما برنامه با چه زبانی پیاده سازی شده؟
dosetddaram
سه شنبه 07 مهر 1388, 08:57 صبح
برنامه در visual Basic هست
ASKaffash
سه شنبه 07 مهر 1388, 14:02 عصر
سلام
با توضیحات باید VB.Net باشد چون با Vb6 وقتی در Ado دستور Delete صادرشود سریع تریگر Fire میشود ولی در Vb.net اگر از DataSet استفاده کرده باشد پس از دستور Update درون SQLDataAdapter تریگر Fire میشود بنابراین برای Vb6 روش تریگری مناسب است ولی برای دومی ؟!
dosetddaram
چهارشنبه 08 مهر 1388, 07:11 صبح
سلام
با توضیحات باید VB.Net باشد چون با Vb6 وقتی در Ado دستور Delete صادرشود سریع تریگر Fire میشود ولی در Vb.net اگر از DataSet استفاده کرده باشد پس از دستور Update درون SQLDataAdapter تریگر Fire میشود بنابراین برای Vb6 روش تریگری مناسب است ولی برای دومی ؟!
با سلام و تشكر از نظر شما
يعني ديگه من نميتونم كاري بكنم؟ با تريگري كه Msalim عزيز گفتند كار تا 50 درصد حل شد اما براي اينكه هيچ فيلدي از سطر حذف نشه و كل سطر سالم بمونه كاري نميتونم بكنم؟؟:ناراحت:
ASKaffash
چهارشنبه 08 مهر 1388, 08:19 صبح
سلام
براساس پست 14 گفتید بعضی فیلدها خالی میشوند (یعنی برای نرم افزار حذف منطقی)
خوب یک کوچولو جدول مورد نظر با حذف منطقی را قرار دهید شاید بتوان تریگر را اصلاح کرد
dosetddaram
یک شنبه 12 مهر 1388, 12:14 عصر
با سلام به همه دوستان
وتشكر از راهنمايي تون
وقتي دكمه del زده ميشه با كد زير در تريگر، سطر حذف شده و به تيبل 2 نيز انتقال مييابد
Create Trigger Trg
On [tabel1]1
Instead of Delete
AS
insert into tabel2 select* from deleted
و مشكل حذف شدن ركورد با زدن دكمه del به پايان ميرسد
اما يك مسئله كوچولوي ديگه پيش مياد و آن اينكه وقتي سطري از مبدا به مقصد ميرود همه فيلدها بجز يك فيلد درست منتقل ميشوند آيا آن فيلد به جاي ديگه اي ارتباط دارد؟ در صورتي كه هيچ relation وجود ندارد
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.