میشه درباره این موضوعش یکم بیشتد توضیح بدید و بگید که چگونه باید اونو تا بانک پیاده سازی کردنقل قول:
Printable View
میشه درباره این موضوعش یکم بیشتد توضیح بدید و بگید که چگونه باید اونو تا بانک پیاده سازی کردنقل قول:
سلام
نوع timestamp در SQLServer یک عدد 64 بیتی است (معادل long و ulong در دات نت)
این فیلد را شما نمیتوانید و نباید تغییر و ویرایش دهید!
مقدار این فیلد خودکار توسط SQLServer پرخواهد شد.
این مقدار یک عدد یکتا و منحصر به فرد است که با هر ویرایش سطر تغییر خواهد کرد.
نتیجتاً در برنامه های شبکه ای گسترده و بزرگ با ترافیک زیاد و با حساب عدم تغییر primarykey ...
کلاینتها میتوانند در صورت نیاز و قبل از اعمال دیگر و یا در داخل خود دستورات T-SQL مقدار این فیلد را با آخرین مقداری که خودشان داشتند چک کنند و به این نتیجه قطعی برسند که آیا از اخرین دفعه تغییر و ویرایش شده یا خیر؟
=====
ولی چیزی که من پیشنهاد کردم، ساده تر بود!
یعنی یک چیز تو مایه های یک timestamp برای کل هر جدول!
چطور میشه timestamp ا چک کرد کجا قرار گرفته؟
اگر هم پیدا کردم به فرض مثال شماره id من 20 است باید چطور ID رو با timestamp مقایسه کنم؟
اگه میشه یه مثال بزنید
سلام
متاسفانه من متوجه مفهوم سوالات شما نشدم!
نتیجتاً سعی میکنم یکم دیگر توضیح بدهم...
فیلد timestamp یک نوع فیلد عددی است، مثل smallint و int و البته بیشتر bigint.
این فیلد از جهاتی هم شبیه autonumber ها است، به این معنی که شما نمیتوانید آن را در insert و update مقداردهی یا تغییر دهید.
این فیلد با هر تغییر سطر، مقدار جدید و متمایزی و غیر تکراری میگیرد.
فقط و فقط به عنوان یک مثال ساده برای متوجه شدن مطلب به نمونه زیر دقت کنید:
موفق باشید.کد:UPDATE [tablename]
SET [field1]=@field1, [field2]=@field2, [field3]=@field3, [field4]=@field4, [field5]=@field5
WHERE ([primarykey]=@primarykey) AND ([timestampname] != @timestampold);
سلام
البته شاید بهتر بود مثال زیر را میزدم!
کد:SELECT * FROM [tablename]
WHERE ([primarykey]=@primarykey) AND ([timestampname] != @timestampold);
سلام
بنده هم می خوام وقتی کاربری در حال ویرایش سطری است کاربران دیگر نتوانند ان رکورد را ویرایش کنند؟؟؟
لطفا را هنمایی کنید.
سلام
اگر واقعاً بخواهید انجام دهید کل فرآیند ان را باید خودتان انجام دهید، مثلاً فیلدی عددی در جدول تان اضافه کنید که مشخص کند سطر جاری توسط کاربر خاصی قفل شده است و تا وقتی صفر نشده برنامه شما اجازه دسترسی به آن را به دیگران ندهد.نقل قول:
وقتی کاربری در حال ویرایش سطری است کاربران دیگر نتوانند ان رکورد را ویرایش کنند؟
ولی اگر اصول شبکه را صحیح رعایت کنید نیازی به انجام این موارد نیست...
این کار مشکلات منطقی و پیاده سازی خاص خود را دارد، از جمله کاربر میتواند فرم ویرایش را باز کند و برود با تلفن صحبت کند یا صبحانه بخورد (!!!) آنگاه چه میشود؟ این را در سطح یک شبکه بزرگ گسترش دهید... این کار بازدهی شبکه را بشدت کاهش میدهد.
(((
البته لازم بذکر است که SQLServer خودش مکانیزم های قفل خاصی روی سطرهای دارد که شاید شما اصلاً متوجه آن نشوید و... دوستان که با اصول چند ریسمانی آشنا هستند خیلی خوب متوجه میشوند که کارکرد صحیح دستوری مثل update [table] set [field]=[field]+1 در یک شبکه پرتراکنش ناشی از همین مکانیزم های فوق العاده کوتاه و سریع قفل داخل SQLServer است و...
)))