📄 userunit.pas
字号:
unit userUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ToolWin, ComCtrls, DB, ADODB;
type
TuserForm = class(TForm)
CoolBar1: TCoolBar;
sb1: TSpeedButton;
sb2: TSpeedButton;
sb3: TSpeedButton;
sb4: TSpeedButton;
sb5: TSpeedButton;
sb6: TSpeedButton;
sb7: TSpeedButton;
Label8: TLabel;
listview1: TListView;
GroupBox1: TGroupBox;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
Edit4: TEdit;
CheckBox1: TCheckBox;
Label6: TLabel;
Edit6: TEdit;
ADOQuery1: TADOQuery;
procedure sb7Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure listview1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure sb1Click(Sender: TObject);
procedure sb4Click(Sender: TObject);
procedure Edit4Exit(Sender: TObject);
procedure Edit1Exit(Sender: TObject);
procedure Edit2Exit(Sender: TObject);
procedure Edit6Exit(Sender: TObject);
procedure Edit3Exit(Sender: TObject);
procedure sb2Click(Sender: TObject);
procedure sb5Click(Sender: TObject);
procedure sb3Click(Sender: TObject);
private
{ Private declarations }
addormodify:integer;
public
{ Public declarations }
end;
var
userForm: TuserForm;
implementation
uses
mainunit;
{$R *.dfm}
procedure TuserForm.sb7Click(Sender: TObject);
begin
close;
end;
procedure TuserForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=cafree;
end;
procedure TuserForm.FormShow(Sender: TObject);
var
listitem:Tlistitem;
begin
listview1.SetFocus;
//把用户信息从数据库读取到listview中
ADOQuery1.Sql.Clear;
ADOQuery1.SQL.Add('select userid,name,acount,password,state from users');
ADOQuery1.open;
listview1.Items.Clear();
while (not ADOQuery1.Eof ) do
begin
listitem:=listview1.Items.Add();
listitem.Caption:=Trim(ADOQuery1.FieldByName('userid').AsString);
if Trim(ADOQuery1.FieldByName('name').AsString)='' then
listitem.SubItems.Add(' ')
else
listitem.SubItems.Add(Trim(ADOQuery1.FieldByName('name').AsString));
if Trim(ADOQuery1.FieldByName('acount').AsString)='' then
listitem.SubItems.Add(' ')
else
listitem.SubItems.Add(Trim(ADOQuery1.FieldByName('acount').AsString));
if Trim(ADOQuery1.FieldByName('password').AsString)='' then
listitem.SubItems.Add(' ')
else
listitem.SubItems.Add(Trim(ADOQuery1.FieldByName('password').AsString));
if Trim(ADOQuery1.FieldByName('state').AsString)='' then
listitem.SubItems.Add(' ')
else
listitem.SubItems.Add(Trim(ADOQuery1.FieldByName('state').AsString));
ADOQuery1.Next();
end;
end;
procedure TuserForm.listview1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
if Selected=true then //把在listview中选择的项目读到编辑框中;
begin
edit1.Text:=trim(listview1.Selected.Caption);
edit2.Text:=trim(listview1.Selected.SubItems.Strings[0]);
edit6.Text:=trim(listview1.Selected.SubItems.Strings[1]);
edit3.Text:=trim(listview1.Selected.SubItems.Strings[2]);
edit4.Text:=trim(listview1.Selected.SubItems.Strings[2]);
if trim(Item.SubItems.Strings[3])='0' then
checkbox1.Checked:=true
else
checkbox1.Checked:=false;
//开放“新增”,“修改”,“删除”按钮
sb1.Enabled:=true;
sb2.Enabled:=true;
sb3.Enabled:=true;
end;
end;
procedure TuserForm.sb1Click(Sender: TObject);
begin
addormodify:=1;//“新增”按钮按下
//初始化输入控件
edit1.Text:='';
edit2.Text:='';
edit3.Text:='';
edit4.Text:='';
edit6.Text:='';
checkbox1.Checked:=false;
//关闭“新增”,“修改”,“删除”按钮;
sb1.Enabled:=false;
sb2.Enabled:=false;
sb3.Enabled:=false;
//打开”保存“,”取消“ ------------------
sb4.Enabled:=true;
sb5.Enabled:=true;
end;
procedure TuserForm.sb4Click(Sender: TObject);
var
ListItem:TListItem;
state:string;
begin
//界面控制
sb4.Enabled:=false; //保存按钮按下去后,应设置它不用用,防止用户连续多次点击
sb5.Enabled:=false;
//新增数据的保存;-----------------------------------------------------------
if addormodify=1 then
begin
if checkbox1.Checked=true then
state:='0'
else
state:='1';
//首先把数据保存到数据库users表中
try //try ...except为异常处理
ADOQuery1.Sql.Clear;
ADOQuery1.SQL.Add('insert into users (userid,name,acount,password,state)'+
'values('''+trim(edit1.Text)+''','''+trim(edit2.Text)+''','''+trim(edit6.Text)+''','''+trim(edit3.Text)+''','+
' '''+state+''') ');
ADOQuery1.ExecSQL;
except
application.MessageBox('更新数据库失败,请检查后再试!','错误',MB_OK+MB_ICONSTOP);
//恢复”保存“和”取消“按钮原来的状态
sb4.Enabled:=true; //重新应设置可用,使得用户在修好数据后能再次保存
sb5.Enabled:=true;
exit;
end;
//新增的数据还要添加到listview中供用户浏览---------------------------------------
listitem:=listview1.Items.Add();
listitem.Caption:=trim(edit1.Text);
listitem.SubItems.Add(trim(edit2.Text));
listitem.SubItems.Add(trim(edit6.Text));
listitem.SubItems.Add(trim(edit3.Text));
listitem.SubItems.Add(state);
end;
//修改数据的保存;---------------------------------------------
if addormodify=2 then
begin
if checkbox1.Checked=true then
state:='0'
else
state:='1';
//首先把数据保存到数据库users表中
try //try ...except为异常处理
ADOQuery1.Sql.Clear;
ADOQuery1.SQL.Add('update users set name='''+trim(edit2.Text)+''','+
'acount='''+trim(edit6.Text)+''',password='''+trim(edit3.Text)+''',state='''+state+''' '+
'where userid='''+trim(edit1.Text)+''' ');
ADOQuery1.ExecSQL;
except
application.MessageBox('更新数据库失败,请检查后再试!','错误',MB_OK+MB_ICONSTOP);
//恢复”保存“和”取消“按钮原来的状态
sb4.Enabled:=true; //重新应设置可用,使得用户在修好数据后能再次保存
sb5.Enabled:=true;
exit;
end;
//修改的数据还要添加到listview中供用户浏览---------------------------------------
listview1.Selected.Caption:=trim(edit1.Text);
listview1.Selected.SubItems.Strings[0]:=trim(edit2.Text);
listview1.Selected.SubItems.Strings[1]:=trim(edit6.Text);
listview1.Selected.SubItems.Strings[2]:=trim(edit3.Text);
listview1.Selected.SubItems.Strings[3]:=state;
end;
//恢复按钮原来的状态
sb1.Enabled:=true;
sb2.Enabled:=true;
sb3.Enabled:=true;
end;
procedure TuserForm.Edit4Exit(Sender: TObject);
begin
if trim(edit3.Text)<>trim(edit4.Text) then //判断用户前后两次输入的密码是否相同;
begin
application.MessageBox('您两次输入的密码不一致,请检查后再试!','错误',MB_OK+MB_ICONSTOP);
edit4.SetFocus; //输入焦点(光标)定位到edit4的编辑框中,等待再次输入正确的密码;
end;
end;
procedure TuserForm.Edit1Exit(Sender: TObject);
begin
if trim(edit1.Text)='' then
begin
application.MessageBox('用户编号不能为空!','错误',MB_OK+MB_ICONSTOP);
edit1.SetFocus; //输入焦点(光标)定位到编辑框中,等待再次输入
end;
end;
procedure TuserForm.Edit2Exit(Sender: TObject);
begin
if trim(edit2.Text)='' then
begin
application.MessageBox('用户姓名不能为空!','错误',MB_OK+MB_ICONSTOP);
edit2.SetFocus; //输入焦点(光标)定位到编辑框中,等待再次输入
end;
end;
procedure TuserForm.Edit6Exit(Sender: TObject);
var
acountLength:integer;
begin
acountLength:=length(trim(edit6.Text));
if not (acountLength>=3) and (acountLength<=15) then
begin
application.MessageBox('用户帐号的长度必须介于3~15个之间!','错误',MB_OK+MB_ICONSTOP);
edit6.SetFocus; //输入焦点(光标)定位到编辑框中,等待再次输入
end;
end;
procedure TuserForm.Edit3Exit(Sender: TObject);
var
passwordLength:integer;
begin
passwordLength:=length(trim(edit3.Text));
if not (passwordLength>=3)and (passwordLength<=8) then
begin
application.MessageBox('用户密码的长度必须介于3~8个之间!','错误',MB_OK+MB_ICONSTOP);
edit3.SetFocus; //输入焦点(光标)定位到编辑框中,等待再次输入
end;
end;
procedure TuserForm.sb2Click(Sender: TObject);
begin
addormodify:=2;//“修改”按钮按下
//不需要初始化输入控件
{edit1.Text:='';
edit2.Text:='';
edit3.Text:='';
edit4.Text:='';
edit6.Text:='';
checkbox1.Checked:=false;}
//关闭“新增”,“修改”,“删除”按钮;
sb1.Enabled:=false;
sb2.Enabled:=false;
sb3.Enabled:=false;
//打开”保存“,”取消“ ------------------
sb4.Enabled:=true;
sb5.Enabled:=true;
end;
procedure TuserForm.sb5Click(Sender: TObject);
begin
//恢复“新增”,“修改”,“删除””保存“,”取消“按钮原来的状态;
sb1.Enabled:=true;
sb2.Enabled:=true;
sb3.Enabled:=true;
sb4.Enabled:=false;
sb5.Enabled:=false;
end;
procedure TuserForm.sb3Click(Sender: TObject);
begin
//UI control
sb3.Enabled:=false;
if listview1.Selected=nil then //判断用户是否选中记录,没有选中记录而执行下面的删除操作是没有意义的;
begin
application.MessageBox('请首先选择要删除的用户记录!','错误',MB_Ok+MB_ICONSTOP);
exit;
end;
if application.messagebox('要删除这些记录吗?','删除记录',MB_OKCANCEL+MB_ICONWARNING)=IDOK then
begin
//为了使得users表与u-a表中的数据保持一致
//要删除users表中的记录必须先删除与之关联的u-a表中对应的记录
//判断是否存在该情况
ADOQuery1.sql.Clear;
ADOQuery1.SQL.add('select count(userid) from users where userid='''+trim(listview1.Selected.Caption)+'''');
ADOQuery1.open;
if ADOQuery1.Fields[0].AsInteger>0 then
begin
application.MessageBox('该用户已分配了权限,要先删除该用户对应的权限才能删除该该用户的信息!','错误',MB_Ok+MB_ICONSTOP);
exit;
end;
try
//不存在以上提到的情况,可以删除,更新数据库
ADOQuery1.sql.Clear;
ADOQuery1.SQL.add(' delete from users where userid='''+trim(listview1.Selected.Caption)+''' ');
ADOQuery1.ExecSQL;
except
application.MessageBox('更新数据库失败,请检查后再试!','错误',MB_OK+MB_ICONSTOP);
exit;
end;
//成功删除数据库的记录后,还要删除listview上相应的数据,以使一致
listview1.Selected.Delete;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -