📄 main.pas
字号:
p.QQ := QQ.Text;
p.City := City.Text;
p.Birthday := GetBirthDay();
p.BirthShow := GetBirthShow(p.Birthday);
p.UnitName := Unitname.Text;
p.HomeAddress := HomeAddress.Text;
p.PostAddress := PostAddress.Text;
p.UseLevel := StrToInt(uselevel.Text);
p.Remark := remark.Text;
p.UserName := m_CurUser;
if p.ItemState = isNormal then
p.ItemState := isUpdated;
//分组情况
//首先清空数组
SetLength(p.GroupIDs, 0);
for i:=0 to clbGroup.Items.Count - 1 do
begin
//然后添加组别情况
if clbGroup.Checked[i] then
begin
nGroup := Length(p.GroupIDs);
SetLength(p.GroupIDs, nGroup+1);
p.GroupIDs[nGroup] := GroupIDs[i];
end;
end;
AQuery.Close;
//在下方的数据列表中显示新加的记录
ShowItemInList(ListItem);
end;
procedure TForm1.DeleteItem(nIndex: Integer);
var
p: pTItem;
begin
p := NameList.Items[nIndex].data;
if p.ItemState <> isNew then
//做一个删除的标记,但不真正的删除
m_Deleted.Add(IntToStr(p.ID));
NameList.Items.Delete(nIndex);
end;
procedure TForm1.btDeleteClick(Sender: TObject);
var
nIndex: Integer;
ListItem: TListItem;
begin
ListItem := NameList.Selected;
nIndex := NameList.Items.IndexOf(ListItem);
DeleteItem(nIndex);
NameListChange(nil, NameList.Selected, ctState);
end;
procedure TForm1.SaveData();
var
i, j: Integer;
ADOQuery: TADOQuery;
ADOQuery2: TADOQuery;
p: pTItem;
begin
//先删除姓名为空的记录
i := 0;
while i <= NameList.Items.Count-1 do
begin
if pTItem(NameList.Items[i].Data).Name = '' then
DeleteItem(i)
else
i := i+1;
end;
ADOQuery := TADOQuery.Create(self);
ADOQuery.Connection := ADOConnection1;
ADOQuery2 := TADOQuery.Create(self);
ADOQuery2.Connection := ADOConnection1;
//删除
for i:=0 to m_Deleted.Count-1 do
begin
//删除该人员的组别信息
strSQL := 'Delete from GroupFall where ID=' + m_Deleted[i];
ADOQuery.SQL.Clear;
ADOQuery.SQL.Add(strSQL);
ADOQuery.ExecSQL;
//删除主要信息
strSQL := 'Delete From AddressList Where ID=' + m_Deleted[i];
ADOQuery.SQL.Clear;
ADOQuery.SQL.Add(strSQL);
ADOQuery.ExecSQL;
end;
//清除“要删除的记录”列表
m_Deleted.Clear;
//先更新主要信息
i := 0;
while i <= NameList.Items.Count-1 do
begin
p := NameList.Items[i].Data;
if p.ItemState = isNormal then
begin
i := i+1;
continue;
end;
strSQL := 'SELECT * FROM AddressList WHERE ID=' + IntToStr(p.ID);
ADOQuery.SQL.Clear;
ADOQuery.SQL.Add(strSQL);
ADOQuery.Open();
if ADOQuery.RecordCount = 0 then //没有纪录,说明是新纪录
begin
ADOQuery.Append;
ADOQuery.FieldByName('ID').AsInteger := p.ID;
end
else
ADOQuery.Edit;
ADOQuery.FieldByName('Name').AsString := p.Name;
ADOQuery.FieldByName('sex').AsString := p.sex;
ADOQuery.FieldByName('Telphone').AsString := p.Telphone;
ADOQuery.FieldByName('Email').AsString := p.Email;
ADOQuery.FieldByName('QQ').AsString := p.QQ;
ADOQuery.FieldByName('City').AsString := p.City;
ADOQuery.FieldByName('Birthday').AsString := p.Birthday;
ADOQuery.FieldByName('UnitName').AsString := p.UnitName;
ADOQuery.FieldByName('HomeAddress').AsString := p.HomeAddress;
ADOQuery.FieldByName('PostAddress').AsString := p.PostAddress;
ADOQuery.FieldByName('UseLevel').AsInteger := p.UseLevel;
ADOQuery.FieldByName('Remark').AsString := p.Remark;
ADOQuery.FieldByName('UserName').AsString := p.UserName;
ADOQuery.Post;
ADOQuery.Close();
i := i+1;
end;
//然后更新组别信息
//先删除需要更新的信息
for i:=0 to NameList.Items.Count-1 do
begin
p := NameList.Items[i].Data;
if (p.ItemState = isUpdated) then
begin
strSQL := 'Delete from GroupFall where ID=' + IntToStr(p.ID);
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add(strSQL);
ADOQuery2.ExecSQL;
end;
end;
//再增加需要增加和更新的信息
for i:=0 to NameList.Items.Count-1 do
begin
p := NameList.Items[i].Data;
if (p.ItemState = isUpdated)
or(p.ItemState = isNew) then
begin
for j:=0 to Length(p.GroupIDs)-1 do
begin
strSQL := 'Insert Into GroupFall Values('
+ IntToStr(p.ID) + ', '
+ IntToStr(p.GroupIDs[j])
+ ')';
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add(strSQL);
ADOQuery2.ExecSQL;
end;
end;
//更新数据之后,设置记录的状态为“不需要修改”
p.ItemState := isNormal;
end;
ADOQuery.Free;
ADOQuery2.Free;
end;
procedure TForm1.btSaveListClick(Sender: TObject);
begin
MakeAllEnabled(self, False);
SaveData();
ADOQueryUpdateModifyTime.Parameters.ParamByName('UserName').Value := m_CurUser;
ADOQueryUpdateModifyTime.Parameters.ParamByName('ModifyTime').Value := DateTimeToStr(Now());
ADOQueryUpdateModifyTime.ExecSQL;
MakeAllEnabled(self, True);
end;
procedure TForm1.ClearAllData();
begin
Name.Text := '';
sex.ItemIndex := 0;
QQ.Text := '';
City.Text := '长沙';
Email.Text := '';
Telphone.Text := '';
SplitBirthday('');
unitname.Text := '';
HomeAddress.Text := '';
PostAddress.Text := '';
UseLevel.ItemIndex := 0;
Remark.Text := '';
end;
procedure TForm1.CreateColumns();
var
i: Integer;
col: TListColumn;
begin
NameList.Columns.Clear;
col := NameList.Columns.Add;
col.Caption := '姓名';
col.Width := 75;
for i:=0 to clbContent.Items.Count-1 do
begin
if clbContent.Checked[i] then
begin
col := NameList.Columns.Add;
col.Caption := clbContent.Items[i];
col.Width := StrToInt(lbItemWidth.Items[i]);
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// NameList.GridLines := true;
NameList.RowSelect := true;
m_Deleted := TStringList.Create();
m_CurUser := '';
//显示内容
clbContent.Checked[0] := True;
clbContent.Checked[1] := True;
clbContent.Checked[2] := True;
clbContent.Checked[3] := True;
clbContent.Checked[4] := True;
clbContent.Checked[9] := True;
CreateColumns();
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
m_Deleted.Free;
end;
procedure TForm1.NameListColumnClick(Sender: TObject; Column: TListColumn);
begin
NameList.ToggleSortByColumn(Column.Index, ssAlpha);
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
n: Integer;
begin
if not(ifModify()) then
begin
CanClose := True;
Exit;
end;
n := MessageBox(Handle, '数据已修改,要保存结果并退出吗?', '关闭', MB_YESNOCANCEL or MB_ICONQUESTION);
if n = IDCANCEL then
begin
CanClose := False;
Exit;
end;
CanClose := True;
if n = IDNO then
begin
Exit;
end;
//btSaveListClick(nil);
SaveData();
{
ini := TIniFile.Create('\setting.ini');
//数据维护
ini.WriteBool('DataMaintain', 'HoldGroup', cbHoldGroup.Checked);
ini.UpdateFile;
ini.Free;
}
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
strModifyTime: String;
begin
Timer1.Enabled := False;
if Length(m_CurUser)=0 then
begin
ShowMessage('没有选择当前用户,请选择');
end;
MakeAllEnabled(self, False);
Update();
FillGroup;
GetDataFromDB();
{
ini := TIniFile.Create('\setting.ini');
//数据维护
cbHoldGroup.Checked := ini.ReadBool('DataMaintain', 'HoldGroup', false);
ini.Free;
}
if Length(m_CurUser)>0 then
MakeAllEnabled(self, True);
NDataFile.Enabled := true;
NAbout.Enabled := true;
NFunction.Enabled := true;
NHelp.Enabled := true;
NSelectUser.Enabled := true;
//获取当前用户的最后更改时间
with AQuery do
begin
SQL.Clear;
SQL.Add('Select ModifyTime From Users Where UserName=''' + m_CurUser +'''');
Open;
strModifyTime := FieldByName('ModifyTime').AsString;
StatusBar1.Panels[0].Text := Format('当前用户:%s | 最后修改时间:%s', [m_CurUser,strModifyTime]);
Close;
end;
end;
procedure TForm1.NShowClick(Sender: TObject);
begin
NShow.Checked := not(NShow.Checked);
sbCondition.Visible := NShow.Checked;
Splitter1.Visible := NShow.Checked;
ToolButtonShow.Down := NShow.Checked;
update;
end;
procedure TForm1.NGroupClick(Sender: TObject);
var
frm: TfrmGroup;
begin
frm := TfrmGroup.Create(Application);
frm.ShowModal;
FillGroup();
frm.Free;
end;
procedure TForm1.NQuitClick(Sender: TObject);
begin
Close;
end;
procedure TForm1.NExportClick(Sender: TObject);
var
i,j: Integer;
f: TIniFile;
p: PTItem;
begin
if SaveDialog1.Execute then
begin
f := TIniFile.Create(SaveDialog1.FileName);
f.WriteInteger('RECORDNUMBER', 'Number', NameList.Items.Count);
//保存数据
for i:=0 to NameList.Items.Count-1 do
begin
p := NameList.Items[i].Data;
f.WriteString(IntToStr(i+1), 'Name', p.Name);
f.WriteString(IntToStr(i+1), 'sex', p.sex);
f.WriteString(IntToStr(i+1), 'Telphone', p.Telphone);
f.WriteString(IntToStr(i+1), 'Email', p.Email);
f.WriteString(IntToStr(i+1), 'QQ', p.QQ);
f.WriteString(IntToStr(i+1), 'City', p.City);
f.WriteString(IntToStr(i+1), 'Birthday', p.Birthday);
f.WriteString(IntToStr(i+1), 'UnitName', p.UnitName);
f.WriteString(IntToStr(i+1), 'HomeAddress', p.HomeAddress);
f.WriteString(IntToStr(i+1), 'PostAddress', p.PostAddress);
f.WriteInteger(IntToStr(i+1),'UseLevel', p.UseLevel);
f.WriteString(IntToStr(i+1), 'Remark', p.Remark);
f.WriteInteger(IntToStr(i+1),'GroupIDNumber', Length(p.GroupIDs));
for j:=0 to Length(p.GroupIDs)-1 do
f.WriteInteger(IntToStr(i+1), 'GroupID'+IntToStr(j+1), p.GroupIDs[j]);
end;
//保存编组数据
f.WriteInteger('GROUPNUMBER', 'Number', clbGroup.Items.Count);
for i:=0 to clbGroup.Items.Count-1 do
begin
f.WriteInteger('Group'+IntToStr(i+1), 'GroupID', GroupIDs[i]);
f.WriteString( 'Group'+IntToStr(i+1), 'GroupName', clbGroup.Items[i]);
end;
f.Free;
Messagebox(Handle, '导出完毕!', 'OK', MB_OK or MB_ICONINFORMATION);
end;
end;
function TForm1.PersonExist(name: String): Boolean;
var
i: Integer;
begin
result := false;
for i:=0 to NameList.Items.Count-1 do
if name = pTItem(NameList.Items[i].Data).Name then
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -