📄 frmmain.pas
字号:
end;
procedure TForm1.TreeView1Editing(Sender: TObject; Node: TTreeNode;
var AllowEdit: Boolean);
begin
if(Node.Level=0)or(Node.Level=2) then
AllowEdit:=False;
end;
procedure TForm1.TreeView1Edited(Sender: TObject; Node: TTreeNode;
var S: String);
var
GroupId:Integer;
begin
GroupId:=(PMyData(Node.Data))^.Id;
with ADOQuery1 do
begin
SQL.Clear;
SQL.Add('UPDATE TXL_GROUP');
SQL.Add('SET GROUP_NAME='''+S+'''');
SQL.Add('WHERE GROUP_ID='+IntToStr(GroupId));
//ADOQuery1.ExecSQL;
showmessage(SQL.Text);
end;
end;
procedure TForm1.AddGroupClick(Sender: TObject);
var
NewNode,RootNode:TTreeNode;
NewNodeName:String;
PtrMyData:PMyData;
NewNodeId:Integer;
begin
{在TXL_GROUP表内添加一条新记录}
with ADOQuery1 do
begin
SQL.Clear;
SQL.Add('INSERT INTO TXL_GROUP(GROUP_NAME)');
SQL.Add('VALUES(''新建组'+IntToStr(i)+''')');
ExecSQL;
{获得新添加记录的GROUP_ID字段值}
SQL.Clear;
SQL.Add('SELECT *');
SQL.Add('FROM TXL_GROUP');
SQL.Add('WHERE GROUP_NAME=''新建组'+IntToStr(i)+'''');
Open;
NewNodeName:=FieldByName('GROUP_NAME').AsString;
NewNodeId:=FieldByName('GROUP_ID').AsInteger;
Close;
i:=i+1;
end;
{在TTreeView控件中添加一个新的组节点}
PtrMyData:=new(PMyData);
PtrMyData.Id:=NewNodeId;
PtrMyData.NodeType:=0;
RootNode:=TreeView1.Items.GetFirstNode;
NewNode:=TreeView1.Items.AddChildObject(RootNode,NewNodeName,PtrMyData);
NewNode.ImageIndex:=1;
NewNode.SelectedIndex:=1;
{将新增组节点设置为选中状态}
NewNode.Selected:=True;
end;
procedure TForm1.DeleteGroupClick(Sender: TObject);
var
GroupId,RecordId:Integer;
begin
if (MessageDlg('确实要删除当前组吗?', mtConfirmation,
[mbYes, mbNo],0))=mrYes then
begin
{读取存储在组节点中的Id号}
GroupId:=(PMyData(TreeView1.Selected.Data))^.Id;
{删除当前组及其相应记录}
with ADOQuery1 do
begin
{删除TXL_GROUP表内相关记录}
SQL.Clear;
SQL.Add('DELETE FROM TXL_GROUP');
SQL.Add('WHERE GROUP_ID='+IntToStr(GroupId));
ExecSQL;
{删除TXL_RECORD表内相关记录}
SQL.Clear;
SQL.Add('SELECT * FROM TXL_MAP');
SQL.Add('WHERE MAP_GROUP_ID='+IntToStr(GroupId));
Open;
while not Eof do
begin
RecordId:=FieldByName('MAP_RECORD_ID').AsInteger;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('DELETE FROM TXL_RECORD');
ADOQuery2.SQL.Add('WHERE RECORD_ID='+IntToStr(RecordId));
ADOQuery2.ExecSQL;
next;
end;
Close;
{删除TXL_MAP表内相关记录}
SQL.Clear;
SQL.Add('DELETE FROM TXL_MAP');
SQL.Add('WHERE MAP_GROUP_ID='+IntToStr(GroupId));
ExecSQL;
end;
{在控件TTreeView上删除组节点及其子节点}
TreeView1.Selected.Delete;
end;
end;
procedure TForm1.BtnAddClick(Sender: TObject);
begin
LastSelNode:=TreeView1.Selected;
txtName.Text:='';
dtpBirthday.DateTime:=now;
txtQQ.Text:='';
txtTel.Text:='';
txtMobile.Text:='13*********';
ActiveControl:=txtName;
ActionCode:=1;//是添加动作
end;
procedure TForm1.BtnPostClick(Sender: TObject);
var
RecordId:Integer;
GroupId:Integer;
begin
{动作编码为1,表示添加操作}
if(ActionCode=1)then
begin
if(CheckValid=False)then
begin
ShowMessage('输入的数据有错误,因此不能进行添加操作!');
ActiveControl:=txtName;
end
else
begin
{将新记录插入到TXL_RECORD表内}
with tblRecord do
begin
Open;
Insert;
FieldValues['RECORD_NAME']:=txtName.Text;
FieldValues['RECORD_BIRTHDAY']:=dtpBirthday.DateTime;
FieldValues['RECORD_TEL']:=txtTel.Text;
FieldValues['RECORD_MOBILE']:=txtMobile.Text;
FieldValues['RECORD_OICQ']:=txtQQ.Text;
Post;
Close;
end;
{获得TXL_RECORD表内RECORD_ID字段的最大值}
with tblRecord do
begin
Open;
Last;
RecordId:=FieldByName('RECORD_ID').AsInteger;
Close;
end;
{将一条新的映射关系插入到TXL_MAP表中}
GroupId:=(PMyData(TreeView1.Selected.Parent.Data))^.Id;
with tblMap do
begin
Open;
Insert;
FieldValues['MAP_RECORD_ID']:=RecordId;
FieldValues['MAP_GROUP_ID']:=GroupId;
Post;
Close;
end;
end;
end
{动作编码为2,表示删除操作}
else if(ActionCode=2)then
begin
{删除TXL_RECORD表中对应记录}
RecordId:=(PMyData(TreeView1.Selected.Data))^.Id;
with tblRecord do
begin
Open;
while not Eof do
begin
if(FieldByName('RECORD_ID').AsInteger=RecordId)then
Delete;
next;
end;
Close;
end;
{删除TXL_MAP表中对应的映射关系}
with tblMap do
begin
Open;
while not Eof do
begin
if(FieldByName('MAP_RECORD_ID').AsInteger=RecordId)then
Delete;
next;
end;
Close;
end;
end
{动作编码为3,表示修改操作}
else if(ActionCode=3)then
begin
if(CheckValid=False)then
begin
ShowMessage('输入的数据有错误,因此不能进行修改操作!');
ActiveControl:=txtName;
end
else
begin
{修改TXL_RECORD表中相应记录}
with tblRecord do
begin
Open;
while not Eof do
begin
if(FieldByName('RECORD_ID').AsInteger=(PMyData(LastSelNode.Data))^.Id)then
begin
Update;
FieldValues['RECORD_NAME']:=txtName.Text;
FieldValues['RECORD_BIRTHDAY']:=dtpBirthday.DateTime;
FieldValues['RECORD_TEL']:=txtTel.Text;
FieldValues['RECORD_MOBILE']:=txtMobile.Text;
FieldValues['RECORD_OICQ']:=txtQQ.Text;
Post;
end;
next;
end;
Close;
end;
end;
end;
ActionCode:=0;
TreeView1.Items.Clear;
LoadDataForTreeView;
end;
function TForm1.CheckValid: Boolean;
begin
result:=True;
end;
procedure TForm1.BtnCancelClick(Sender: TObject);
begin
{动作编码为1,表示撤消添加操作}
if(ActionCode=1)then
begin
ActiveControl:=TreeView1;
TreeView1Change(TreeView1,LastSelNode);
end
{动作编码为2,表示撤消删除操作}
else if(ActionCode=2)then
begin
ActiveControl:=TreeView1;
TreeView1Change(TreeView1,LastSelNode);
end
{动作编码为3,表示撤消修改操作}
else if(ActionCode=3)then
begin
ActiveControl:=TreeView1;
TreeView1Change(TreeView1,LastSelNode);
end;
ActionCode:=0;
end;
procedure TForm1.BtnDeleteClick(Sender: TObject);
begin
LastSelNode:=TreeView1.Selected;
txtName.Text:='';
dtpBirthday.DateTime:=now;
txtQQ.Text:='';
txtTel.Text:='';
txtMobile.Text:='13*********';
ActionCode:=2;//是删除动作
end;
procedure TForm1.BtnUpdateClick(Sender: TObject);
begin
LastSelNode:=TreeView1.Selected;
ActiveControl:=txtName;
txtName.SelectAll;
ActionCode:=3;//是修改动作
end;
procedure TForm1.LoadGroupDataForListView(Id: Integer);
var
NewItem:TListItem;
begin
{清空TListView控件的内容}
ListView1.Clear;
{得到组号为Id的记录集}
with ADOQuery1 do
begin
SQL.Clear;
SQL.Add('SELECT RECORD_NAME,RECORD_BIRTHDAY,RECORD_TEL,RECORD_MOBILE,RECORD_OICQ');
SQL.Add('FROM TXL_MAP,TXL_RECORD');
SQL.Add('WHERE MAP_GROUP_ID='+IntToStr(Id));
SQL.Add('AND MAP_RECORD_ID=RECORD_ID');
Open;
{将每条记录填入TListView控件中}
while not Eof do
begin
NewItem:=ListView1.Items.Add;
NewItem.Caption:=FieldByName('RECORD_NAME').AsString;
NewItem.SubItems.Add(FieldByName('RECORD_BIRTHDAY').AsString);
NewItem.SubItems.Add(FieldByName('RECORD_TEL').AsString);
NewItem.SubItems.Add(FieldByName('RECORD_MOBILE').AsString);
NewItem.SubItems.Add(FieldByName('RECORD_OICQ').AsString);
next;
end;
Close;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -