PDA

View Full Version : قفل کردن فقط یک table در بانک در بین چند table



bahar2008
یک شنبه 28 بهمن 1386, 10:12 صبح
سلام دوستان خوبم

من با sql server 2000 کار می کنم و می خوام که در بانکی که ایجاد کردم و حاوی چند table هست فقط یکی از جدول هایش بعد از یکبار عمل insert قفل بشه و کسی نتونه دوباره در اون جدول اطلاعات وارد کنه .

آیا همچین امکانی وجود داره؟

Elham_gh
یک شنبه 28 بهمن 1386, 12:26 عصر
با trigger برای INSTEAD OF insert.در این trigger کنترل کنید ، اگر تعداد رکوردهای جدول 1 بود ، امکان insert نباشد.

bahar2008
یک شنبه 28 بهمن 1386, 13:55 عصر
می شه بیشتر توضیح بدید درباره trigger?

trigger دستور هست یا یگ گزینه در خود sql ؟من هرچی گشتم در sql گزینه ای به این نام پیدا نکردم

ببخشید که من خیلی مبتدی هستم

MAsp.Net
یک شنبه 28 بهمن 1386, 14:06 عصر
triggerها قطعه کدهایی هستند که به هنگام انجام عملیات روی جداول اجرا می شوند.
شمابه Books Online به قسمت Create Trigger مراجعه کنید.
در هنگام 4 عمل insert,delete,update,select میشه کنترل هایی روی جدول قرارداد که این کار را در trigger انجام میدهند.
شما برای کاری که میخواهید انجام دهید باید هنگام insert چک کنید که چند ردیف در جدولتان هست اگر از 1 بزرگتر بود اجازه ورود اطلاعات را ندهید.

SYNDROME
یک شنبه 28 بهمن 1386, 16:54 عصر
از دستور زیز استفاده کنید ببینید کارتان را راه می اندازد.


Begin Transaction
Select * From TableName With(TabLockx)
Commit Transaction

موفق باشید

Elham_gh
یک شنبه 28 بهمن 1386, 18:13 عصر
از دستور زیز استفاده کنید ببینید کارتان را راه می اندازد.


Begin Transaction
Select * From TableName With(TabLockx)
Commit Transaction

موفق باشید


این یعنی چی؟؟!!!

AminSobati
یک شنبه 28 بهمن 1386, 18:24 عصر
سلام دوستان خوبم

من با sql server 2000 کار می کنم و می خوام که در بانکی که ایجاد کردم و حاوی چند table هست فقط یکی از جدول هایش بعد از یکبار عمل insert قفل بشه و کسی نتونه دوباره در اون جدول اطلاعات وارد کنه .

آیا همچین امکانی وجود داره؟

دوست عزیز، فلسفه این کار شما برای من روشن نیست. اگر هدف اصلیتون رو مطرح کنین، شاید بهتر بشه گفت امکانات Trigger، یا Locking یا حتی Security کدوم میتونن بیشتر و موثر تر کمک کنند

bahar2008
یک شنبه 28 بهمن 1386, 19:47 عصر
من در vb.net یک butoon تعریف کردم که کاربر می تواند با زدن اون دکمه مشخصات خودش رو به بانک بفرسته .
چون می خوام برنامم فقط یک کاربر داشته باشه (یعنی فقط با یک یوزر و پسورد وارد سایت بشه ) حالا می خواهم کاری کنم که فقط همون یک نفری که اطلاعاتش رو داده همیشه بتونه وارد بشه و کابر دیگر حتی اگر اون دکمه رو زد با پیغام شما مجاز به تعریف کاربر نیستید مواجه بشه و اطلاعاتش وارد بانک نشه

من هم متوجه این دستورات نشدم SYNDROME عزیز :متفکر::متفکر::متفکر:
در کجا باید استفاده کنم این دستورات رو؟:متفکر::متفکر::متفکر::متف ر:

SYNDROME
یک شنبه 28 بهمن 1386, 20:38 عصر
این یعنی چی؟؟!!!



من هم متوجه این دستورات نشدم SYNDROME عزیز :متفکر::متفکر::متفکر:
در کجا باید استفاده کنم این دستورات رو؟:متفکر::متفکر::متفکر::متف ر:
شما برای قفل کردن یک table دستور


Begin Transaction
Select * From TableName With(TabLockx)

را مثلا در QueryAnalyzer اجرا کنید.
حالا اگر جدولتان را بخواهید باز کنید باز نمی شود و هیچ گونه عملیاتی روی آن انجام نمی شود تا زمانی که دستور


Commit Transaction

را اجرا کنید.
موفق باشید

hesam_hma
یک شنبه 28 بهمن 1386, 23:26 عصر
دوست من چرا اینقدر قضیه رو سختش میکنی توی همون وی بی می تونی بعد از زدن دکمه اضافه شدن کاربر جدید چک کنی که تعداد رکوردهای جدولت بزرگتر از صفر هست یا نه اگه بزرگتر بود با MsgBox پیام مناسب رو چاپ کنه و با Exit Sub از بلاک مربوطه خارج بشه به همین سادگی و نیازی به قفل کردن جدول هم نداری ( تذکر اینکه قفل کردن معمولا برای برنامه هایی که نیاز به همزمانی در دسترسی به داده ها دارن کاربرد داره اونم بسته به شرایط باید ستون ، رکورد ، صفحه ، جدول و یا ... قفل بشه)
بدست آوردن تعداد رکوردهای جدول
Select count(*) from tablename
موفق باشی

Elham_gh
دوشنبه 29 بهمن 1386, 07:41 صبح
شما برای قفل کردن یک table دستور


Begin Transaction
Select * From TableName With(TabLockx)

را مثلا در QueryAnalyzer اجرا کنید.
حالا اگر جدولتان را بخواهید باز کنید باز نمی شود و هیچ گونه عملیاتی روی آن انجام نمی شود تا زمانی که دستور


Commit Transaction

را اجرا کنید.
موفق باشید

خوب، این چه کمکی به مسئله می کند؟

SYNDROME
دوشنبه 29 بهمن 1386, 19:34 عصر
خوب، این چه کمکی به مسئله می کند؟
خوب شما می توانید یک Table را قفل کنید تا کسی نتواند عملیاتی روی آن انجام دهد.
موفق باشید

Step_one
دوشنبه 29 بهمن 1386, 19:43 عصر
خوب شما می توانید یک Table را قفل کنید تا کسی نتواند عملیاتی روی آن انجام دهد.
موفق باشید

این که نمیشه جناب. اولا از کجا این کوئری تشخیص می ده که باید الان لاک بشه یا نشه. بعدش گیریم تشخیص داد، کی باید این کوئری رو اجرا کنه؟ همونی که می خواد insert کنه؟:متفکر:

Behrouz_Rad
دوشنبه 29 بهمن 1386, 20:08 عصر
کاربر Step_one
لطفا با یک آی دی فعالیت کن.

متشکرم.

AminSobati
سه شنبه 30 بهمن 1386, 00:24 صبح
من در vb.net یک butoon تعریف کردم که کاربر می تواند با زدن اون دکمه مشخصات خودش رو به بانک بفرسته .
چون می خوام برنامم فقط یک کاربر داشته باشه (یعنی فقط با یک یوزر و پسورد وارد سایت بشه ) حالا می خواهم کاری کنم که فقط همون یک نفری که اطلاعاتش رو داده همیشه بتونه وارد بشه و کابر دیگر حتی اگر اون دکمه رو زد با پیغام شما مجاز به تعریف کاربر نیستید مواجه بشه و اطلاعاتش وارد بانک نشه

من هم متوجه این دستورات نشدم SYNDROME عزیز :متفکر::متفکر::متفکر:
در کجا باید استفاده کنم این دستورات رو؟:متفکر::متفکر::متفکر::متف ر:
شما این کار رو میتونین به شکل ساده تر در سطح Application کنترل کنین. فرضا وقتی کاربر لاگین میکنه، در یک جدول ثبت کنید که چه کسی الان در حال کار با سیستم هست و در صورتی که لاگین دیگه ای توسط سایر کاربرها انجام بشه، باز هم Application این رو ابتدا باید چک کنه. در SQL Server 2005 (با سرویس پک 2) امکان نوشتن Logon Trigger هست که میشه این کار رو سمت SQL Server کنترل کرد. یعنی به مجرد ورود هر کاربر، Trigger شما اجرا میشه و کنترلهای لازم رو انجام میده

رضا عربلو
سه شنبه 30 بهمن 1386, 17:37 عصر
این کار بایستی در سطح اپلیکیشن انجام بشه. چون یک کاربر حرفه ای می تونه Trigger شما را پیدا کنه و آن را دستکاری کنه تا از محدودیتی که مد نظر شماست با موفقیت رد بشه.

bahar2008
چهارشنبه 01 اسفند 1386, 10:44 صبح
ممنونم از لطف و راهنمایی همه دوستان
مشکل حل شد