PDA

View Full Version : تغییر رمز عبور در دلفی



camelia_f
جمعه 13 اردیبهشت 1387, 16:19 عصر
سلام مرسی که وقت میذارید و پیغاممو میخونید
برای پروژه ام یه برنامه با دلفی دارم که هنگام ورود از کاربر شماره کاربری و رمز عبور میخواد من میخوام تو setting برنامم بتونم با دادن شماره کاربری و رمز عبور فعلی و رمز جدید , رمز فعلی رو عوض کنم.
مقادیر شماره کاربری ها و رمز ها در sql ذخیره شده اند.
به طور کلی میدونم که باید چی کار کنم باید شماره کاربری و رمز عبور رو با sql چک کنم اگه یکی بود رمز عوض شه اما باید ادرس اون رکورد رو داشته باشم که رمز جدید جایگزینش بشه.. اما نمیدونم چه کدی باید بنویسم!!! :ناراحت:
فقط چون نزدیک دفاع هستم اگه زودتر جواب بدبن ممنون میشم :چشمک:

babak_delphi
جمعه 13 اردیبهشت 1387, 17:04 عصر
اولاً وقتی با دستور SQL گزارشی از اون UserName گرفتی ، اشاره گر روی همون رکورد قرار میگیره
ثانیا موقع Update کردن با استفاده از Where می تونید این کا را انجام بدین



Select _UName , _Pass From UsersTBL Where _UName = Your_UserName and _Pass Your_Password


مشابه همین رو در دستور Update هم میتوانید بکار ببرید
یعنی رکوردی را Update کنید که مقدار UserName آن برابر مقدار مورد نظر شما باشد
موفق باشید.

camelia_f
جمعه 13 اردیبهشت 1387, 17:52 عصر
مرسی اقا بابک
یعنی اینجوری بنویسم کدشو؟

Dm.QUser.Close;
Dm.QUser.SQL.Text:='update sysuser set pass=E_NewPass.Edit where user_name=E_Karbari.Text and pass=E_Pass.Text' ;
Dm.QUser.Open;

من اینو نوشتم اما کار نمیکنه!!!

Amir_Safideh
جمعه 13 اردیبهشت 1387, 17:57 عصر
دوست عزیز شما دارید عمل update انجام میدید پس دیگه نباید از Open استفاده کنید چون کوئری شما مقداری برنمی گردونه . شما کدتون رو به اینصورت اصلاح کنید :

DM.QUser.Close;
DM.QUser.SQL.Text:='update sysuser set pass:=E_NewPass.Edit where user_name=E_Karbari and pass=E_Pass' ;
DM.QUser.SQL;

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

camelia_f
جمعه 13 اردیبهشت 1387, 18:27 عصر
اقا امیر اینجوری که شما هم گفتین نوشتم اما کار نمیکنه..اصلا پسورد عوض نمیشه!!! :(

SYNDROME
جمعه 13 اردیبهشت 1387, 18:53 عصر
ADO را به یک Grid وصل کنید و سپس کد زیر را بنویسید
کد ریر را بنویسید


ADO.SQL.Text := 'Select * From Tbl_User Where UserName='+QuotedStr(Edit_UserName.Text)
ADO.Open;

داخل Edit_UserName نام کاربر را وارد کنید.
آیا نتیجه در Gridنمایش داده می شود(رکوردی پیدا می شود)؟
موفق باشید

camelia_f
جمعه 13 اردیبهشت 1387, 19:32 عصر
ADO را به یک Grid وصل کنید و سپس کد زیر را بنویسید
کد ریر را بنویسید


ADO.SQL.Text := 'Select * From Tbl_User Where UserName='+QuotedStr(Edit_UserName.Text)
ADO.Open;

داخل Edit_UserName نام کاربر را وارد کنید.
آیا نتیجه در Gridنمایش داده می شود(رکوردی پیدا می شود)؟
موفق باشید

سلام کاری که گفتید انجام دادم..بله فیلدهای مربوط به اون رکورد توی grid نشان داده میشن. حالا باید چیکار کنم؟

niloofarabi137
جمعه 13 اردیبهشت 1387, 20:36 عصر
سلام دوست عزیز
عین کدهایی رو که خودم برای پایان نامم نوشتم رو براتون می گذارم مطمئن باشید که هیچ مشکلی نداره .

DataModule9.ADOTable16.Open;
if (DataModule9.ADOTable16.Locate('user',Edit1.Text,[])and DataModule9.ADOTable16.Locate('pass',Edit2.Text,[]))then
begin
Form27.Hide;
Form1.Show;
end
else
MessageDlg('˜áãå ÚÈæÑ íÇ ÑãÒ ˜ÇÑÈÑí ÇÔÊÈÇå ãí ÈÇÔÏ áØÝÇ ÏæÈÇÑå ÓÚí äãÇííÏ ',mtInformation,[mbOK],0);
Edit1.Text:='';
Edit2.Text:='';
end;


دو تا dbedit روی یک فرم بگذارید و یک buttom برای نوشتن کد داخل آن . کدهای بالا رو توی onclick باتوم مربوطه بنویسید . قسمتی که داخل messagedlg هست پیغام فارسی است (کلمه عبور یا رمز کاربری اشتباه می باشد لطفا دوباره سعی نمایید ) این هم پیغام مربوطه است .
تا اینجا شما کلمه عبور و نام کاربری را وارد کردید حالا يک فرم دیگر ایجاد کنید تا نام کاربری و کلمه عبور را چک کند و کدهای زیر را داخل یک باتوم بنویسید:


if (DataModule9.ADOTable16.Locate('pass',Form28.Edit2 .Text,[])and (Form28.Edit3.Text=Form28.Edit4.Text)) then
begin
DataModule9.ADOTable16.Edit;
DataModule9.ADOTable16.FieldByName('user').Text:=F orm28.Edit1.Text;
DataModule9.ADOTable16.FieldByName('pass').Text:=F orm28.Edit3.Text;
DataModule9.ADOTable16.Post;
Form28.Hide;
Form1.Show;
Form28.Edit1.Text:='';
Form28.Edit2.Text:='';
Form28.Edit3.Text:='';
Form28.Edit4.Text:='';
end
else
begin
MessageDlg('˜áãå ÚÈæÑ íÇ ÑãÒ ˜ÇÑÈÑí ÇÔÊÈÇå ãí ÈÇÔÏ áØÝÇ ÏæÈÇÑå ÓÚí äãÇííÏ ',mtInformation,[mbOK],0);
Form28.Edit1.Text:='';
Form28.Edit2.Text:='';
Form28.Edit3.Text:='';
Form28.Edit4.Text:='';
end;

ببخشید چون وقت نداشتم نام فرمها و جداول را تغییر ندادم زحمت اینکار با خود شما .
این هم کد فرمی هست که داخل اون چهار تا dbedit میگذارین که به ترتیب dbedit اولی نام کاربری جدید و دومی نام کاربری قبلی و سومی کلمه عبور جدید و چهارمین dbedit تایید کلمه عبور را از کاربر می خواهد پیغام این کد هم همان پیغام بالایی را بنویسید لطفا . ضمنا جدولی را در sql با دو فیلد user و pass با نوع nvarchar بسازید

SYNDROME
جمعه 13 اردیبهشت 1387, 22:09 عصر
سلام کاری که گفتید انجام دادم..بله فیلدهای مربوط به اون رکورد توی grid نشان داده میشن. حالا باید چیکار کنم؟
حالا با روش زیر می توانید اطلاعات را تغییر دهید.کد زیر را بعد از کدی که در صفحه قبل گفتم بنویسید.


ADO.Edit;
ADO.FieldByName('Pass').Asstring := Edit_Pass.Text
ADO.Post;

من پسورد کاربر را تغییر دادم.
موفق باشید

Amir_Safideh
جمعه 13 اردیبهشت 1387, 22:46 عصر
اقا امیر اینجوری که شما هم گفتین نوشتم اما کار نمیکنه..اصلا پسورد عوض نمیشه!!! :(
ببنید دوست عزیز شما کد زیر رو اجرا کنید . من مقادیر پسورد جدید و پسورد قبلی و نام کاربر رو توی کد قرار دادم که فکر کنم از نامشون متوجه بشید که هر قمست رو با چه چیزی مقدار دهی کنید .

DM.QUser.Close;
DM.QUser.SQL.Text:='update sysuser set pass:= '+NewPass.Text+' where user_name= '+UserName.Text+' and pass= '+LastPass.Text;
DM.QUser.ExecSQL;
همین کوئری اگر مقادیر درست بهش ارسال بشه باید جواب بده وگرنه اشکال از جای دیگه ای هستش نه از کد اس کیو ال .
------------
موفق باشید .

vcldeveloper
شنبه 14 اردیبهشت 1387, 01:31 صبح
همین کوئری اگر مقادیر درست بهش ارسال بشه باید جواب بده وگرنه اشکال از جای دیگه ای هستش نه از کد اس کیو ال .
اشکال از اینه که بجای ExecSQL در خط آخر نوشتید SQL. کاربر هم کد رو Copy\Paste کرده و به این نتیجه رسیده که کار نمیکنه.

camelia_f
شنبه 14 اردیبهشت 1387, 13:20 عصر
یه عالمه مرسی از همگی فکر کنم با همه این توضیحات باید مشکلم حل شه..اگه نشد دوباره مزاحم میشم :)

camelia_f
شنبه 14 اردیبهشت 1387, 16:29 عصر
حالا با روش زیر می توانید اطلاعات را تغییر دهید.کد زیر را بعد از کدی که در صفحه قبل گفتم بنویسید.


ADO.Edit;
ADO.FieldByName('Pass').Asstring := Edit_Pass.Text
ADO.Post;

من پسورد کاربر را تغییر دادم.
موفق باشید

مرسی اما من نمیخوام تو فرمم grid داشته باشم! :(

camelia_f
شنبه 14 اردیبهشت 1387, 16:33 عصر
ببنید دوست عزیز شما کد زیر رو اجرا کنید . من مقادیر پسورد جدید و پسورد قبلی و نام کاربر رو توی کد قرار دادم که فکر کنم از نامشون متوجه بشید که هر قمست رو با چه چیزی مقدار دهی کنید .

DM.QUser.Close;
DM.QUser.SQL.Text:='update sysuser set pass:= '+NewPass.Text+' where user_name= '+UserName.Text+' and pass= '+LastPass.Text;
DM.QUser.ExecSQL;
همین کوئری اگر مقادیر درست بهش ارسال بشه باید جواب بده وگرنه اشکال از جای دیگه ای هستش نه از کد اس کیو ال .
------------
موفق باشید .

این کدی که شما فرمودین نوشتم اما این error رو میده
'parameter object is improperly defined.inconsistent or incomplete information was provided'
]چیکار کنم؟ :"(

camelia_f
شنبه 14 اردیبهشت 1387, 16:35 عصر
حالا با روش زیر می توانید اطلاعات را تغییر دهید.کد زیر را بعد از کدی که در صفحه قبل گفتم بنویسید.


ADO.Edit;
ADO.FieldByName('Pass').Asstring := Edit_Pass.Text
ADO.Post;

من پسورد کاربر را تغییر دادم.
موفق باشید

مرسی اما من نمیخوام تو فرمم grid داشته باشم! :ناراحت:

camelia_f
شنبه 14 اردیبهشت 1387, 17:35 عصر
سلام دوست عزیز
عین کدهایی رو که خودم برای پایان نامم نوشتم رو براتون می گذارم مطمئن باشید که هیچ مشکلی نداره .

DataModule9.ADOTable16.Open;
if (DataModule9.ADOTable16.Locate('user',Edit1.Text,[])and DataModule9.ADOTable16.Locate('pass',Edit2.Text,[]))then
begin
Form27.Hide;
Form1.Show;
end
else
MessageDlg('˜áãå ÚÈæÑ íÇ ÑãÒ ˜ÇÑÈÑí ÇÔÊÈÇå ãí ÈÇÔÏ áØÝÇ ÏæÈÇÑå ÓÚí äãÇííÏ ',mtInformation,[mbOK],0);
Edit1.Text:='';
Edit2.Text:='';
end;


دو تا dbedit روی یک فرم بگذارید و یک buttom برای نوشتن کد داخل آن . کدهای بالا رو توی onclick باتوم مربوطه بنویسید . قسمتی که داخل messagedlg هست پیغام فارسی است (کلمه عبور یا رمز کاربری اشتباه می باشد لطفا دوباره سعی نمایید ) این هم پیغام مربوطه است .
تا اینجا شما کلمه عبور و نام کاربری را وارد کردید حالا يک فرم دیگر ایجاد کنید تا نام کاربری و کلمه عبور را چک کند و کدهای زیر را داخل یک باتوم بنویسید:


if (DataModule9.ADOTable16.Locate('pass',Form28.Edit2 .Text,[])and (Form28.Edit3.Text=Form28.Edit4.Text)) then
begin
DataModule9.ADOTable16.Edit;
DataModule9.ADOTable16.FieldByName('user').Text:=F orm28.Edit1.Text;
DataModule9.ADOTable16.FieldByName('pass').Text:=F orm28.Edit3.Text;
DataModule9.ADOTable16.Post;
Form28.Hide;
Form1.Show;
Form28.Edit1.Text:='';
Form28.Edit2.Text:='';
Form28.Edit3.Text:='';
Form28.Edit4.Text:='';
end
else
begin
MessageDlg('˜áãå ÚÈæÑ íÇ ÑãÒ ˜ÇÑÈÑí ÇÔÊÈÇå ãí ÈÇÔÏ áØÝÇ ÏæÈÇÑå ÓÚí äãÇííÏ ',mtInformation,[mbOK],0);
Form28.Edit1.Text:='';
Form28.Edit2.Text:='';
Form28.Edit3.Text:='';
Form28.Edit4.Text:='';
end;

ببخشید چون وقت نداشتم نام فرمها و جداول را تغییر ندادم زحمت اینکار با خود شما .
این هم کد فرمی هست که داخل اون چهار تا dbedit میگذارین که به ترتیب dbedit اولی نام کاربری جدید و دومی نام کاربری قبلی و سومی کلمه عبور جدید و چهارمین dbedit تایید کلمه عبور را از کاربر می خواهد پیغام این کد هم همان پیغام بالایی را بنویسید لطفا . ضمنا جدولی را در sql با دو فیلد user و pass با نوع nvarchar بسازید





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


if (DM.QUser.Locate('pass',E_Pass.Text,[])and (E_NewPass.Text=E_ReNewPass.Text)) then
begin
DM.QUser.Edit;
DM.QUser.FieldByName('user_name').Text:=E_Karbari. Text;
DM.QUser.FieldByName('pass').Text:=E_NewPass.Text;
DM.QUser.Post;
FSetting.Hide;
FMain.Show;
E_Karbari.Text:='';
E_Pass.Text:='';
E_NewPass.Text:='';
E_ReNewPass.Text:='';
end
else
begin
MessageDlg(' ˜áãå ÚÈæÑ íÇ ÑãÒ ˜ÇÑÈÑí ÇÔÊÈÇ å ãí ÈÇÔÏ áØÝÇ ÏæÈÇÑå ÓÚí äãÇííÏ',mtInformation,[mbOK],0);
E_Karbari.Text:='';
E_Pass.Text:='';
E_NewPass.Text:='';
E_ReNewPass.Text:='';
end;


اما متاسفانه بعد از زدن دکمه ثبت با همچین error ای مواجه شدم

Quser: cannot perform this operation on a closed dataset

اکثر کد هایی که دوستان فرمودین به ظاهر درست و بدون اشکال میاد اما نمیدونم چرا هنگام اجرای هر کدوم با مشکل مواجه میشم!!! :ناراحت:

Amir_Safideh
شنبه 14 اردیبهشت 1387, 19:36 عصر
DM.QUser.Close;
DM.QUser.SQL.Text:='update sysuser set pass:= '+NewPass.Text+' where user_name= '+UserName.Text+' and pass= '+LastPass.Text;
DM.QUser.ExecSQL;

این کدی که شما فرمودین نوشتم اما این error رو میده
'parameter object is improperly defined.inconsistent or incomplete information was provided'
]چیکار کنم؟ :"(
ببینید دوست عزیز این ارور که شما میفرمائید زمانی نمایش داده میشه که شما مقادیر نادرستی رو به کوئری ارسال کرده باشید . در کد بالا فرض رو بر این گرفتم که شما سه تا باکس دارید که در یکی از این باکسها پسورد جدید رو وارد میکنید (که نامش رو در کد بالا گذاشتم NewPass) و در باکس دوم نام کاربری وارد میشه که باید پسوردش عوض بشه (که اسم این باکس رو هم گذاشتم UserName)و باکس سوم که پسورد قبلی رو توش وارد میکنید که نام این باکس رو هم گذاشتم LastPass . خوب به کد بالا دقت کن و این سه تا نام که گفتم رو پیدا کن . حالا شما میدونید که به کوئری شما سه تا مقدار باید پاس بشه . و اگر یکی از این مقادیر پاس نشه یا به درستی پاس نشه اون ارور که فرمودید رو خواهید گرفت . شما هم اگر از باکس (Edit,DBEdit) برای وارد کردن مقادیر استفاده میکنید فقط باید این سه تا اسم که خدمتون عرض کردم رو به نامهای باکسهای خودت تغییر بدی .
------------
موفق باشید .

SYNDROME
شنبه 14 اردیبهشت 1387, 21:35 عصر
مرسی اما من نمیخوام تو فرمم grid داشته باشم! :(
Grid فقط برای تست کردن بود.
می توانید آن را از روی فرمتان هم بردارید.
موفق باشید