unit Unit3;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, DB, ADODB, DBCtrls;type
TEditPasswordForm = class(TForm)
Label1: TLabel;
Edit_oldPass: TEdit;
Label2: TLabel;
Edit_newPass: TEdit;
Label3: TLabel;
Edit_againPass: TEdit;
BitBtn_passOk: TBitBtn;
BitBtn_cancel: TBitBtn;
Label4: TLabel;
DBComboBox_User: TDBComboBox;
procedure BitBtn_cancelClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtn_passOkClick(Sender: TObject);
procedure Edit_oldPassKeyPress(Sender: TObject; var Key: Char);
procedure Edit_newPassKeyPress(Sender: TObject; var Key: Char);
procedure Edit_againPassKeyPress(Sender: TObject; var Key: Char);
procedure DBComboBox_UserChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
EditPasswordForm: TEditPasswordForm;
//User_Password:string;
mm:string;implementation{$R *.dfm}
uses unit1,unit2,Cuser_in,unit4;procedure TEditPasswordForm.FormCreate(Sender: TObject);
begin
Edit_oldPass.Clear;
Edit_newPass.Clear;
Edit_againPass.Clear;
DBComboBox_User.SetFocus;
DBComboBox_User.DataField:='User_Name';
DBCombobox_User.ItemIndex:=0;
// while not DataModule2.ADODataSet1.Eof do
// begin
// DataModule2.ADODataSet1.First;
DBCombobox_User.Items.Add(DataModule2.ADODataSet1.FieldByName('User_Name').asstring);
// DataModule2.ADODataSet1.Next;
// DataModule2.ADODataSet1.Close;
//end;
end;procedure TEditPasswordForm.DBComboBox_UserChange(Sender: TObject);
begin
DataModule2.ADODataSet1.Close;
DataModule2.ADODataSet1.SQL.Clear;
DataModule2.ADODataSet1.SQL.Add('select *from user_test where User_Name=''+DBCombobox_User.text+''');
DataModule2.ADODataSet1.open;
DataModule2.ADODataSet1.Locate('User_Name',DBCombobox_User.text,[]);
mm:=DataModule2.ADODataSet1.FieldByname('User_Password').asstring ;//where User_Name:=DBCombobox_User.text;
// mm:=DataModule2.ADODataSet1.Lookup('User_Name',DBCombobox_User.text,'User_Password').asstring;
DataModule2.ADODataSet1.Close;
end;procedure TEditPasswordForm.BitBtn_passOkClick(Sender: TObject);
begin
if Trim(Edit_oldPass.text)<>mm then
Application.MessageBox('输入旧密码错误!','提示窗口',mb_Ok+mb_IconStop)
else
begin
if Trim(Edit_newPass.text)<>Trim(Edit_againPass.text) then
begin
Application.MessageBox('您两次输入的密码不一致,请重新输入!','提示窗口',mb_Ok+mb_IconStop);
Edit_oldPass.Clear;
Edit_newPass.Clear;
Edit_againPass.Clear;
Edit_oldPass.SetFocus;
end
else
begin
if ((DBComboBox_User.Text<>'')and(Edit_oldPass.Text<>'')) then
with DataModule2.ADODataSet1 do
begin
Open;
Edit;
FieldByName('User_Password').asstring:=Trim(Edit_newPass.text);
Post;
Close;
Application.MessageBox('密码修改成功!','提示窗口',mb_Ok+mb_IconInformation)
end ;
end;
end;
end;procedure TEditPasswordForm.BitBtn_cancelClick(Sender: TObject);
begin
DataModule2.ADODataSet1.Close;
// DBComboBox_User.Clear;
// Edit_oldPass.Clear;
// Edit_newPass.Clear;
// Edit_againPass.Clear;
EditPasswordForm.Close;
MainForm.Enabled:=True;
end;end.
运行时出现错误“违反了PRIMARY KEY约束‘PK_name’。不能在对象‘use_test’中插入重复键。”
麻烦大家了,继续帮助,谢谢了!
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, DB, ADODB, DBCtrls;type
TEditPasswordForm = class(TForm)
Label1: TLabel;
Edit_oldPass: TEdit;
Label2: TLabel;
Edit_newPass: TEdit;
Label3: TLabel;
Edit_againPass: TEdit;
BitBtn_passOk: TBitBtn;
BitBtn_cancel: TBitBtn;
Label4: TLabel;
DBComboBox_User: TDBComboBox;
procedure BitBtn_cancelClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtn_passOkClick(Sender: TObject);
procedure Edit_oldPassKeyPress(Sender: TObject; var Key: Char);
procedure Edit_newPassKeyPress(Sender: TObject; var Key: Char);
procedure Edit_againPassKeyPress(Sender: TObject; var Key: Char);
procedure DBComboBox_UserChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
EditPasswordForm: TEditPasswordForm;
//User_Password:string;
mm:string;implementation{$R *.dfm}
uses unit1,unit2,Cuser_in,unit4;procedure TEditPasswordForm.FormCreate(Sender: TObject);
begin
Edit_oldPass.Clear;
Edit_newPass.Clear;
Edit_againPass.Clear;
DBComboBox_User.SetFocus;
DBComboBox_User.DataField:='User_Name';
DBCombobox_User.ItemIndex:=0;
// while not DataModule2.ADODataSet1.Eof do
// begin
// DataModule2.ADODataSet1.First;
DBCombobox_User.Items.Add(DataModule2.ADODataSet1.FieldByName('User_Name').asstring);
// DataModule2.ADODataSet1.Next;
// DataModule2.ADODataSet1.Close;
//end;
end;procedure TEditPasswordForm.DBComboBox_UserChange(Sender: TObject);
begin
DataModule2.ADODataSet1.Close;
DataModule2.ADODataSet1.SQL.Clear;
DataModule2.ADODataSet1.SQL.Add('select *from user_test where User_Name=''+DBCombobox_User.text+''');
DataModule2.ADODataSet1.open;
DataModule2.ADODataSet1.Locate('User_Name',DBCombobox_User.text,[]);
mm:=DataModule2.ADODataSet1.FieldByname('User_Password').asstring ;//where User_Name:=DBCombobox_User.text;
// mm:=DataModule2.ADODataSet1.Lookup('User_Name',DBCombobox_User.text,'User_Password').asstring;
DataModule2.ADODataSet1.Close;
end;procedure TEditPasswordForm.BitBtn_passOkClick(Sender: TObject);
begin
if Trim(Edit_oldPass.text)<>mm then
Application.MessageBox('输入旧密码错误!','提示窗口',mb_Ok+mb_IconStop)
else
begin
if Trim(Edit_newPass.text)<>Trim(Edit_againPass.text) then
begin
Application.MessageBox('您两次输入的密码不一致,请重新输入!','提示窗口',mb_Ok+mb_IconStop);
Edit_oldPass.Clear;
Edit_newPass.Clear;
Edit_againPass.Clear;
Edit_oldPass.SetFocus;
end
else
begin
if ((DBComboBox_User.Text<>'')and(Edit_oldPass.Text<>'')) then
with DataModule2.ADODataSet1 do
begin
Open;
Edit;
FieldByName('User_Password').asstring:=Trim(Edit_newPass.text);
Post;
Close;
Application.MessageBox('密码修改成功!','提示窗口',mb_Ok+mb_IconInformation)
end ;
end;
end;
end;procedure TEditPasswordForm.BitBtn_cancelClick(Sender: TObject);
begin
DataModule2.ADODataSet1.Close;
// DBComboBox_User.Clear;
// Edit_oldPass.Clear;
// Edit_newPass.Clear;
// Edit_againPass.Clear;
EditPasswordForm.Close;
MainForm.Enabled:=True;
end;end.
运行时出现错误“违反了PRIMARY KEY约束‘PK_name’。不能在对象‘use_test’中插入重复键。”
麻烦大家了,继续帮助,谢谢了!
错误提示很明显了"运行时出现错误“违反了PRIMARY KEY约束‘PK_name’。不能在对象‘use_test’中插入重复键。”
可我真的不知道怎么改了,麻烦指教,谢谢了
如果是,主鍵值就不能相同,也不能為空。
我懷疑是設置了主鍵,字段類型是int,但是沒有設置自增
if ((DBComboBox_User.Text <>'')and(Edit_oldPass.Text <>'')) then
with DataModule2.ADODataSet1 do
begin
Open;
Edit;
FieldByName('User_Password').asstring:=Trim(Edit_newPass.text);
Post;
Close;
Application.MessageBox('密码修改成功!','提示窗口',mb_Ok+mb_IconInformation)
end ;
end;
改成如下:
if ((DBComboBox_User.Text <>'')and(Edit_oldPass.Text <>'')) then
with DataModule2.ADODataSet1 do
begin
Close;
CommandText := ' select * from use_test where User_Name='''+DBCombobox_User.text+'''';
Open;
Edit;
FieldByName('User_Password').asstring:=Trim(Edit_newPass.text);
Post;
Close;
Application.MessageBox('密码修改成功!','提示窗口',mb_Ok+mb_IconInformation)
end ;
Close;
CommandText := ' select * from user_test'; //重新刷新
Open;
end;
然后你再重新刷新一下.楼主也别感慨了....
错误的一行在 mm:=DataModule2.ADODataSet1.FieldByname('User_Password').asstring ;//where User_Name:=DBCombobox_User.text;
不过还是很感谢,你的代码比我的完善!
with DataModule2.ADOQuery1 do
begin
Close;
SQL.text := ' update use_test set user_password=''+trim(Edit_newPass.text)+'' where User_Name='''+DBCombobox_User.text+'''';
Execsql;
Close;
end ;
with DataModule2.ADODataSet1 do
begin
close;
Open;
end;
Application.MessageBox('密码修改成功!','提示窗口',mb_Ok+mb_IconInformation) end;看看这样执行如何,然后设断把SQL执行看看是什么错误,再检查 一下你表中的数据.
begin
DataModule2.ADODataSet1.Close;
DataModule2.ADODataSet1.CommandText:='select * from user_test where User_Name='''+DBCombobox_User.text+'''';
DataModule2.ADODataSet1.open;
// DataModule2.ADODataSet1.Locate('User_Name',DBCombobox_User.text,[]);
mm:=DataModule2.ADODataSet1.FieldByname('User_Password').asstring;// where User_Name:=DBCombobox_User.text;
// mm:=DataModule2.ADODataSet1.Lookup('User_Name',DBCombobox_User.text,'User_Password').asstring;
DataModule2.ADODataSet1.Close;
end;我现在 改成这样了,可是DBComboBox_User下拉时能看到items,可是鼠标一点击别的控件如edit,DBComboBox_User的items就没有了,这是怎么回事啊?