ورود

View Full Version : چرا همیشه سطر اول ویرایش میشه.........؟یکی راهنمایی کنه؟



tik_tak
دوشنبه 29 بهمن 1386, 22:31 عصر
سلام
یه نگاه به این کد بندازید:


if ((DataModule2.ADOTable1.Locate('user',edit1.text,[]))=true) and
((DataModule2.ADOTable1.Locate('pass',edit2.text,[]))=true) then
begin
dataModule2.ADOTable1.edit;
if edit2.Text<>'' then
DataModule2.ADOTable1.FieldByName('pass').Value:=e dit2.Text;
if edit3.Text<>'' then
DataModule2.ADOTable1.FieldByName('f_name').Value: =edit3.Text;
if edit4.Text<>'' then
DataModule2.ADOTable1.FieldByName('l_name').Value: =edit4.Text;

DataModule2.ADOTable1.Post;
end;


ادیتهای برنامه اینجورین


edit1.text----->user
edit2.text----->pass
edit3.text----->f_name
edit4.text----->l_name


به غیر از یوزر یا همون نام کاربری بقیه فیلدها قابل ویرایشن...به شرطی که خالیشون نذاری

ولی نمیدونم چرا همیشه هر چی که وارد میکنم سطر اول و ویرایش میکنه ؟؟؟؟

Mahmood_M
دوشنبه 29 بهمن 1386, 23:30 عصر
سلام ...
شرط شما اشتباه هست ...
فرض کنید ، رکورد اول پسوردش 123 هست و یوزرش " mn " و رکورد دوم هم پسوردش 123 ولی یوزرش " nm " هست ، فرض کنید کاربر یوزر " nm " و پسورد 123 رو وارد کرده ، حالا با کد شما وقتی اولین Locate اجرا میشه برنامه میره به رکورد دوم چون یوزرش همون nm هست ، ولی دوباره وقتی برای پسورد Locate رو اجرا میکنید ، دوباره برنامه به رکورد اول میاد ! ( چون پسورد رکورد اول هم 123 هست )

باید شرط رو به صورت زیر تغییر بدید :

if (DM.ADOTable.Locate('user', edit1.text, []) = True) and
(DM.ADOTable.FieldByName('pass').Value := edit2.Text) then
begin
...
end;

اینطوری اگه شرط اول درست باشه ، پسورد همون رکوردی که بانک روش فوکوس کرده بررسی میشه و نیازی به جستجوی دوباره پسورد نیست ( چون پسورد باید مربوط به همون یوزر وارد شده باشه ! )

موفق باشید ...

tik_tak
سه شنبه 30 بهمن 1386, 00:33 صبح
سلام
درسته کاملاً حق با شما بود....ممنونم