⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 自己做的通讯录程序
💻 PAS
📖 第 1 页 / 共 4 页
字号:
  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 + -