📄 unit1.pas
字号:
begin
MessageDlg('请选择要删除的选目!',mtinformation,[mbok],0);
Exit;
end;
if (ADOQuery5.RecordCount > 0) and (Treeview1.Selected <> Nil) then//判断数据记录是否为空,并且在通讯目录中选择的项目不为空
begin
if MessageDlg('确定要删除此条记录吗?',mtconfirmation,[mbyes,mbno],0) = mryes then
begin
With ADOQuery1 do //删除数据
begin
Close;
SQL.Clear;
SQL.Add('Delete From msn where 姓名=:a');//a为参数
Parameters.ParamByName('a').Value := TreeView1.Selected.Text;//将a参数的值设置为当前所选择的项目名称
ExecSQL;
TreeView1.Items.Delete(Treeview1.Selected);//删除所选择的项目
end;
end;
With ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * From msn');//重新选择 msn 数据表
Open;
end;
end;
treeview1.Items.BeginUpdate;
treeview1.Items.Clear;
main.OnShow(self);
treeview1.Items.GetFirstNode.Expand(true);
TreeView1.Refresh;//刷新通讯目录中的项目
treeview1.Items.EndUpdate;
end;
procedure TMain.FormShow(Sender: TObject);
begin
imagepath:=ExtractFilePath(application.ExeName);
with ADOQuery4 do
begin
Close;
SQL.Clear;
SQL.Add('Select distinct 类型 From msn'); //在表中选择不重复的类型
Open;
end;
While Not ADOQuery4.Eof do
begin
Combobox2.Items.Add(Main.ADOQuery4.Fields[0].value);//将不重复的数据加入到Combobox2(类型)中
ADOQuery4.Next;
end;
TreeViewReFresh;//调用过程TreeViewReFresh动态创建节点,将类型相同的数据加入到子节点中
TreeView1.AutoExpand := True;//当显示时将所有的子节点展开显示。
BeComeEnable(false);//调用过程BeComeEnable,当窗体显示时,将文本组件设置为不可用状态
end;
procedure TMain.TreeviewReFresh;//用于动态创建节点
begin
Node1 := Treeview1.Items.Add(nil,'通讯目录');
ADOQuery3.Close;
ADOQuery3.SQL.Text:='Select Distinct 类型 From msn';//从数据库中读取不重复的类型
ADOQuery3.Open;
if ADOQuery3.RecordCount>0 then
begin
while not ADOQuery3.Eof do
begin
Node2:=TreeView1.Items.AddChild(Node1,ADOQuery3.Fields[0].asstring);//将类型名称加入到动态节点中
TreeView1.Items.AddChild(Node2,'');
ADOQuery3.Next;
end;
end;
end;
procedure TMain.ToolButton3Click(Sender: TObject);//修改
begin
if (Treeview1.Selected <> nil) and (Edit1.Text <> '') then
begin
BeComeEnable(True);//调用自定义过程BeComeEnable,使所有文本组件变为可用状态
end;
end;
procedure TMain.ToolButton10Click(Sender: TObject);//保存
begin
With ADOQuery1 Do//修改数据信息,设置字段的值为参数的值
begin
Close;
SQL.Clear;
SQL.Add('Update msn Set 编号=:a,姓名=:b,性别=:c,出生日期=:d,民族=:e,家庭电话=:f,手机号码=:g,QQ号码=:h,E_mail=:i,备注=:j,类型=:k,照片=:L');
SQL.Add('where 姓名='+quotedstr(Treeview1.Selected.Text));//注意!在用Update修改数据时,一定要在语句后面加上“Where”条件,否则将会修改所有的数据
Parameters.ParamByName('a').Value := Trim(Edit1.Text);//将Edit1(编号)中的内容赋值给参数a
Parameters.ParamByName('b').Value := Trim(Edit2.text);//将Edit2(姓名)中的内容赋值给参数b,以次类推
Parameters.ParamByName('c').Value := Combobox1.text;
Parameters.ParamByName('d').Value := DatetoStr(DatetimePicker1.Date);
Parameters.ParamByName('e').Value := Trim(Edit3.text);
Parameters.ParamByName('f').Value := Trim(Edit4.text);
Parameters.ParamByName('g').Value := Trim(Edit5.text);
Parameters.ParamByName('h').Value := Trim(Edit6.text);
Parameters.ParamByName('i').Value := Trim(Edit7.text);
Parameters.ParamByName('k').Value := Combobox2.Text;
Parameters.ParamByName('j').Value := Memo1.Lines.Text;
Parameters.ParamByName('L').Value := Trim(Edit9.Text);
ExecSQL;//执行修改操作,提示修改成功信息
MessageDlg('修改成功!',mtwarning,[mbyes],0);
end;
with Main.ADOQuery1 do
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * from msn'); //使ADOQuery1重新选择 msn 数据表
ADOQuery1.Open;
with ADOQuery3 do
begin
ADOQuery3.Close;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add('Select * From msn');//使ADOQuery3重新选择 msn 数据表
ADOQuery3.Open;
TreeView1.Items.Clear;//清空TreeView组件中的所有项目
TreeView1.Refresh;//刷新TreeView组件中的内容
TreeviewReFresh; //调用TreeViewReFresh过程,重新加载项目内容
end;
BeComeEnable(False);//调用自定义过程BeComeFalse,使所有文本组件变为不可用状态
end;
treeview1.Items.BeginUpdate;
treeview1.Items.Clear;
main.OnShow(self);
treeview1.Items.GetFirstNode.Expand(true);
TreeView1.Refresh;//刷新通讯目录中的项目
treeview1.Items.EndUpdate;
end;
procedure TMain.SpeedButton1Click(Sender: TObject);
begin
if (Combobox3.Text = '') and (Edit8.Text = '') then//如果数据字段和查询内容为空,将弹出信息框
begin
MessageDlg('查询出现错误,请重新输入!',mterror,[mbok],0);
Exit;
end;
with ADOQuery1 do //模糊查询
begin
Close;
SQL.Clear;
SQL.Add('Select * From msn where ' + Combobox3.Text + ' like '+Quotedstr('%'+(Edit8.Text)+'%'));
Open;
end;
if ADOQuery1.RecordCount = 0 then
begin
MessageDlg('在数据库中没有此信息!',mtwarning,[mbyes],0);
end;
end;
procedure TMain.Timer1Timer(Sender: TObject);//状态栏中显示当前系统日期时间
begin
StatusBar1.Panels.Items[1].Text := FormatDateTime('yyyy年mm月dd日 hh时nn分ss秒',now());
end;
procedure TMain.ComboBox3KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
Edit8.SetFocus;
end;
end;
procedure TMain.Edit8KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
SpeedButton1Click(sender);
end;
end;
procedure TMain.SpeedButton2Click(Sender: TObject);//打开对话框选择照片
begin
OpenPictureDialog1.InitialDir:='.\图片\';
if (OpenPictureDialog1.Execute) and (OpenPictureDialog1.FileName <> '') then
begin
if (imagepath+'图片\'+ExtractFileName(OpenPictureDialog1.FileName))=OpenPictureDialog1.FileName then
Edit9.Text := '\图片\'+ExtractFileName(OpenPictureDialog1.FileName)
else
Edit9.Text := OpenPictureDialog1.FileName;//将所选择的照片路径加入到Edit9(照片位置)中
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);//将图像1设置为所选择的图像
end
else
MessageDlg('没有选择图片',mtwarning,[mbok],0);
end;
procedure TMain.Image1DblClick(Sender: TObject);
begin
if Edit9.Text='' then
begin
MessageDlg('没有为' + TreeView1.Selected.Text + '指定照片!',mtinformation,[mbok],0);
exit;
end;
Picfrm.ShowModal;
end;
procedure TMain.BeComeEnable(Ena: Boolean);//自定义过程BeComeEnable,判断文本组件的当前状态
begin
Edit1.Enabled := Ena;
Edit2.Enabled := Ena;
Edit3.Enabled := Ena;
Edit4.Enabled := Ena;
Edit5.Enabled := Ena;
Edit6.Enabled := Ena;
Edit7.Enabled := Ena;
Memo1.Enabled := Ena;
Combobox1.Enabled := Ena;
Combobox2.Enabled := Ena;
ToolButton10.Enabled := Ena;
SpeedButton2.Enabled := Ena;
DatetimePicker1.Enabled := Ena;
end;
procedure TMain.ComboBox2KeyPress(Sender: TObject; var Key: Char);
begin
beep;
MessageDlg('不能够输入其他类型',mtError,[mbok],0);
key := #0;
end;
procedure TMain.TreeView1Expanding(Sender: TObject; Node: TTreeNode;//当节点展开时将对应的数据加入到节点中
var AllowExpansion: Boolean);
begin
if Node=Node1 then//如果当前展开的节点是通讯录,则不向后执行则不为通讯录加载数据
exit;
Node.DeleteChildren;//删除所有子节点
ADOQuery3.Close;
ADOQuery3.SQL.Text:='Select distinct 姓名 From msn Where 类型='+QuotedStr(Node.Text);
ADOQuery3.Open;
if ADOQuery3.RecordCount>0 then//如果数据记录不为空,则将重新添加子节点
begin
while not ADOQuery3.Eof do
begin
TreeView1.Items.AddChild(Node,ADOQuery3.Fields[0].asstring);
ADOQuery3.Next;
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -