PDA

View Full Version : کمک فوری:چگونگی رفع خطای key violation



reza_moridi
جمعه 04 اردیبهشت 1383, 09:15 صبح
باسلام
من یک جدول دارم که دارای یک کلیدمیباشدهنگامی که یک کلیدتکراری می خواهدذخیره شودپیغام key violation داده می شودوهرکاری می کنک که آنراکنترل کنم نمی شودلطفا مرادقیقا راهنمایی کنید.البته درسایت این موضوع قیدشده ولی جوابی که به آن داده شده بودرانتوانستم پیاده کنم. باتشکرفراوان

مهدی کرامتی
جمعه 04 اردیبهشت 1383, 09:28 صبح
لطفا یک نمونه برنامه اینجا ضمیمه کنید (بهمراه جدول و فایل ایندکس آن) تا بررسی شود.

DelphiMan
جمعه 04 اردیبهشت 1383, 19:20 عصر
با سلام
دوست عزیز اول اینکه شما باید بگین که نوع دیتا بیستون چی هست ....
که البته من حدس میزنم Paradox باشه :wink:
اگر حدسم درست باشه برای رفع این مشکل فقط کافیه که شما اول Table یک Field جدید بسازید و نوعش رو هم Auotincrement بزارید...
و گزینه Key آن را هم انتخاب کنید...

حالا دیگه باید مشکل حل بشه ...

موفق باشید

سار
جمعه 04 اردیبهشت 1383, 23:24 عصر
اگر اشتباه نکنم شما دارید سعی میکنید مقدار کلید اصلی رو عوض کنید.
که این کار امکان پذیر نیست.

Hidarneh
شنبه 05 اردیبهشت 1383, 01:08 صبح
جناب سار می شه توضیح بدید ؟ چه ربطی داره که بخواد مقدار فیلد کلید رو تغییر بده و پیغام key violation رو ببینه؟ و اما جواب : دو راه ( یا سه راه ) داری:
1: قبل از post با دستور locate چک کنی .
2: توی روال onposterror از جدول , خطاها رو خودت چک کنی .
3: فیلدت رو از حالت کلید در بیاری .
که این آخری آبکیه . ولی خب یه راه حل دیگه 8-)

reza_moridi
شنبه 05 اردیبهشت 1383, 07:02 صبح
باتشکرازدوستان
لطف کنیددستورات رابرایم بنویسید

moradi_am
شنبه 05 اردیبهشت 1383, 08:47 صبح
مثلا اگر نام فیلد name باشد و مقداری که میخواهید ذخیره کنید 'ali' باشد قبل از post از این دستور استفاده کنید :

if Table1.locate('name','ali',[]) then
begin
showmessage('this name alredy exist');
Exit;
end;
...... ذخیره اطلاعات

najafi_1
شنبه 05 اردیبهشت 1383, 12:17 عصر
اگر بخواهیم table را باز کنیم و پیام key violation بدهد معنی اش چیست؟

سار
شنبه 05 اردیبهشت 1383, 14:24 عصر
جناب سار می شه توضیح بدید ؟ چه ربطی داره که بخواد مقدار فیلد کلید رو تغییر بده و پیغام key violation رو ببینه؟ و اما جواب : دو راه ( یا سه راه ) داری:
1: قبل از post با دستور locate چک کنی .
2: توی روال onposterror از جدول , خطاها رو خودت چک کنی .
3: فیلدت رو از حالت کلید در بیاری .
که این آخری آبکیه . ولی خب یه راه حل دیگه 8-)

فیلدی که در هنگام ساخت جدول کلید اصلی معرفی بشود در طول عمر جدول مقدارش ثابت است و غیر قابل تغییر.
برای همین هم هست که تو جوابها مورد سوم به نظر درست تر میرسه البته من تابه حال برام پیش نیومده که مجبور بشم مقدار کلید اصلی رو عوض کنم چرا که این کا اصولا درست نیست.
بهتر اون قسمت از کد که Error میده رو برامون بنویسی تا بهتر بشه گفت و البته به همراه ساختار جدولت.

Hidarneh
شنبه 05 اردیبهشت 1383, 16:40 عصر
جناب سار این عمل هیچ خطایی را بر نمی انگیزد . مگر آنکه مقدار جدید از قبل موجود باشد ( می توانید به راحتی این موضوع را چک کنید . یه جدول دو فیلدی و یه form wizard ) فقط در یک حالت است که نمی توانید مقدار فیلد را تغییر دهید و آنهم زمانی است که از نوع auto increment باشد که آنهم خطای key violation را برنمی انگیزد.

سار
شنبه 05 اردیبهشت 1383, 23:28 عصر
جناب سار این عمل هیچ خطایی را بر نمی انگیزد . مگر آنکه مقدار جدید از قبل موجود باشد ( می توانید به راحتی این موضوع را چک کنید . یه جدول دو فیلدی و یه form wizard ) فقط در یک حالت است که نمی توانید مقدار فیلد را تغییر دهید و آنهم زمانی است که از نوع auto increment باشد که آنهم خطای key violation را برنمی انگیزد.

من هم منظورم همین بود اگر درست نرسوندم ببخشید.
فیلدهای که کلید اصلی هستن بعد از مقدارشون نمیشه تکراری باشه و شما کاملا درست میگید.

najafi_1
یک شنبه 06 اردیبهشت 1383, 09:25 صبح
اگر بخواهیم table را باز کنیم و پیام key violation بدهد معنی اش چیست؟
دوستان این سوال بی ربطه؟ اگه نیست راهنایی کنید. :shock: متشکرم.

(امید)
یک شنبه 06 اردیبهشت 1383, 11:29 صبح
سلام

این تاپیک رو حتما ببینید

http://www.barnamenevis.org/forum/viewtopic.php?t=4144&highlight=e+message
-------
امید