ورود

View Full Version : نمایش خطا به هنگام 2 مقدار مشابه کلید اصلی



mm0000
شنبه 06 شهریور 1389, 19:38 عصر
سلام دوستان
میخواستم بدونم ایا راهی هست تا بتونم وقتی هنگام وارد کردن اطلاعات 2 مقدار مشابه وارد کلید اصلی میشه پیغامی نمایش داده بشه؟
در حال حاضر برنامه ارور میده و میپره بیرون میخواستم بدونم راهی هست تا این خطا نیاد و جای اون بتونم مثلا با showmessage اخطار بدم؟

merced
شنبه 06 شهریور 1389, 20:14 عصر
بله
متد Post رو توی بلاک try..except بنویسی



try
adotable1.post;
except
showmessage('Error')
end;

mm0000
شنبه 06 شهریور 1389, 20:24 عصر
مرسی دوست عزیز میشه دقیق تر بگی کد من این هست:

adotable1.Insert;
ADOtable1.FieldValues['UserName']:=edit1.text;
ADOtable1.FieldValues['Password']:=edit2.text;

adotable1.post;
چطوری به این اضافه کنم؟

mm0000
شنبه 06 شهریور 1389, 21:42 عصر
دوستان کارم گیره help me!

nilidelphi
یک شنبه 07 شهریور 1389, 13:00 عصر
Try
adotable1.Insert;
ADOtable1.FieldValues['UserName']:=edit1.text;
ADOtable1.FieldValues['Password']:=edit2.text;
adotable1.post;
except
showmessage('داده ها با موفقیت ذخیره نشدند');
end;


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

Delphi7_love
یک شنبه 07 شهریور 1389, 15:38 عصر
Try
adotable1.Insert;
ADOtable1.FieldValues['UserName']:=edit1.text;
ADOtable1.FieldValues['Password']:=edit2.text;
adotable1.post;
except
showmessage('داده ها با موفقیت ذخیره نشدند');
end;
[/



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

if data.ADOQuery1.Locate('fieldname',edit1.text,[])=true then
begin
showmessage('tekrari');
exit;
end;
-----
-----
-----

در دستور بالا در صورت تکراری بودن ادامه عملیات متوقف می شود

rk1983xx
سه شنبه 23 فروردین 1390, 02:17 صبح
من هم از روش دلفی لاو استفاده میکنم چون ممکنه علت ثبت نشدن مقادیر در نا موفق بودن Post هر چیز دیگه ای باشه

maryammb66
سه شنبه 23 فروردین 1390, 11:06 صبح
سلام می تونید اول اطلاعات جدول رو با اون اطلاعاتی که نمی خواین تکراری شه و فیلتر کنید و بعد اگه رکوردی با اون مشخصات نداشت ، اطلاعات رو اضافه کنی در غیر این صورت پیغامی بهت بده که اطلاعات تکراریه



Adotable1.Filter := 'code='''+ edit1.Text +''' +'''';
Adotable1.Filtered :=true;
if Adotable1.RecordCount=0 then
begin
adotable1.Insert;
ADOtable1.FieldValues['UserName']:=edit1.text;
ADOtable1.FieldValues['Password']:=edit2.text;
adotable1.post
end
else
showmessage('tekrari');

vcldeveloper
سه شنبه 23 فروردین 1390, 13:13 عصر
بررسی تکراری نبودن فیلد کلید به Integrity بانک اطلاعاتی تون مربوط میشه، و باید این کار رو در سطح بانک انجام بدید، نه در سطح برنامه. برای این کار هم باید اون کلید رو بصورت Unique تعریف کنید. اون دوستانی که میگن اول کوئری بگیر، بعدش اضافه کن، توجه نمی کنند که اون راهکارشان علاوه بر سربار بالا، فقط به درد برنامه های تک کاربره میخوره، چون در یک برنامه چند کاربره، ممکنه در فاصله اجرای کوئری شما تا ثبت کلید جدید، کاربر دیگه ایی رکوردی با همون کلید ثبت کنه.


در حال حاضر برنامه ارور میده و میپره بیرون
"میپره بیرون" یعنی چی؟ از برنامه خارج میشه؟ خطاهای بانک اطلاعاتی چیزی نیستند که بخوان موجب خروج اجباری از برنامه بشند. به چه بانکی وصل میشید؟ با چی وصل میشید؟ از چه نسخه ایی از دلفی استفاده می کنید؟

a_mosavian
چهارشنبه 24 فروردین 1390, 00:38 صبح
سلام دوستان
میخواستم بدونم ایا راهی هست تا بتونم وقتی هنگام وارد کردن اطلاعات 2 مقدار مشابه وارد کلید اصلی میشه پیغامی نمایش داده بشه؟
لطفا این جمله را بیشتر توضیح دهید.

bootshow
چهارشنبه 24 فروردین 1390, 19:34 عصر
adotable1.Insert;
ADOtable1.FieldValues['UserName']:=edit1.text;
ADOtable1.FieldValues['Password']:=edit2.text;
adotable1.post;
except
on E : Exception do
begin
if pos('duplicate',E.Message)>0 then
showmessage('نام کاربری در بانک موجود است.')
else
showmessage('داده ها با موفقیت ذخیره نشدند');
end;
end;
چنین کدی باید بنویسی.فقط باید رشته duplicate را عوض کنی.