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

📄 group.pas

📁 自己做的通讯录程序
💻 PAS
字号:
unit Group;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, StdCtrls, Buttons;

type
  TfrmGroup = class(TForm)
    Label1: TLabel;
    lbGroup: TListBox;
    ADOConnection1: TADOConnection;
    btnMoveDown: TBitBtn;
    BtnMoveUp: TBitBtn;
    GroupBox1: TGroupBox;
    editGroupName: TEdit;
    btGroupAdd: TBitBtn;
    btGroupUpdate: TBitBtn;
    btGroupDelete: TBitBtn;
    btnClose: TBitBtn;
    procedure FormShow(Sender: TObject);
    procedure btGroupAddClick(Sender: TObject);
    procedure btGroupUpdateClick(Sender: TObject);
    procedure btGroupDeleteClick(Sender: TObject);
    procedure lbGroupClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BtnMoveUpClick(Sender: TObject);
    procedure SetItemSort(var strItem:String; nIndex: Integer);
    procedure btnCloseClick(Sender: TObject);
    procedure btnMoveDownClick(Sender: TObject);
  private
    { Private declarations }
    GroupIDs: Array of Integer;
    strSQL: string;
    m_MaxID: Integer;
  public
    { Public declarations }
  end;

var
  frmGroup: TfrmGroup;

implementation

{$R *.dfm}

procedure TfrmGroup.FormShow(Sender: TObject);
var
  i, n : Integer;
  Query1 : TADOQuery;
begin
  if lbGroup.Items.Count > 0 then exit;

  Query1 := TADOQuery.Create(nil);
  Query1.Connection := ADOConnection1;

  strSQL := 'select * from GroupList Order by GroupName';
  with Query1 do
  begin
    SQL.Clear;
    SQL.Add(strSQL);
    Open;
  end;
  lbGroup.Clear;
  GroupIDs := nil;
  //clbGroup.Clear;

  SetLength(GroupIDs, Query1.RecordCount);
  i := 0;
  m_MaxID := 0;
  Query1.First;
  while not(Query1.Eof) do
  begin
      lbGroup.Items.Add(Query1.FieldByName('GroupName').AsString);
      GroupIDs[i] := Query1.FieldByName('GroupID').AsInteger;
      //clbGroup.Items.Add(Query1.FieldByName('GroupName').AsString);
      if m_MaxID < GroupIDs[i] then
        m_MaxID := GroupIDs[i];
      Query1.Next;
      i := i+1;
  end;

  //最大的组别ID号不仅要在组别数据中找,还要在AddressList表中找
  With Query1 do
  begin
    SQL.Clear;
    SQL.Add('SELECT Max(GroupID) as maxID FROM GroupFall');
    Open;
    n := FieldByName('maxID').AsInteger;
    if m_MaxID < n then
      m_MaxID := n;
    Close;
  end;

  Query1.Close;
  Query1.Free;
end;

procedure TfrmGroup.btGroupAddClick(Sender: TObject);
var
  i, len: Integer;
  ADOQuery: TADOQuery;
  strItem: String;
begin
  if editGroupName.Text = '' then
     Exit;
  ADOQuery := TADOQuery.Create(nil);
  ADOQuery.Connection := ADOConnection1;

  m_MaxID := m_MaxID + 1;
  strItem := editGroupName.Text;
  strItem := '00' + strItem;
  SetItemSort(strItem, lbGroup.Items.Count+1);

  strSQL := 'INSERT INTO GroupList VALUES('
          + IntToStr(m_MaxID) + ', ''' + strItem + ''')';
  try
    ADOQuery.SQL.Clear;
    ADOQuery.SQL.Append(strSQL);
    ADOQuery.ExecSQL;
    SetLength(GroupIDs, len+1);
    GroupIDs[len] := m_MaxID;
    //editGroupID.Text := IntToStr(max + 1);
    lbGroup.Items.Add(strItem);
    lbGroup.ItemIndex := lbGroup.Items.Count - 1;
    //clbGroup.Items.Add(editGroupName.Text);
  except
  end;
  ADOQuery.Free;
end;

procedure TfrmGroup.btGroupUpdateClick(Sender: TObject);
var
  ADOQuery: TADOQuery;
  strItem: String;
begin
  strItem := editGroupName.Text;
  strItem := '00' + strItem;
  SetItemSort(strItem, lbGroup.ItemIndex);

  ADOQuery := TADOQuery.Create(nil);
  ADOQuery.Connection := ADOConnection1;
  strSQL := 'Update GroupList Set GroupName=''' + strItem
          + ''' where GroupID=' + IntToStr(GroupIDs[lbGroup.ItemIndex]);
  ADOQuery.SQL.Clear;
  ADOQuery.SQL.Add(strSQL);
  ADOQuery.ExecSQL;

  lbGroup.Items[lbGroup.ItemIndex] := strItem;
  //clbGroup.Items[lbGroup.ItemIndex] := editGroupName.Text;
  ADOQuery.Free;
end;

procedure TfrmGroup.btGroupDeleteClick(Sender: TObject);
var
  i, len, index: Integer;
  ADOQuery: TADOQuery;
begin
  ADOQuery := TADOQuery.Create(nil);
  ADOQuery.Connection := ADOConnection1;
  len := lbGroup.Items.Count;
  index := lbGroup.ItemIndex;

  strSQL := 'DELETE FROM GroupList where GroupID=' + IntToStr(GroupIDs[index]);
  ADOQuery.SQL.Clear;
  ADOQuery.SQL.Add(strSQL);
  ADOQuery.ExecSQL;

  for i := index to len-2 do
  begin
    GroupIDs[i] := GroupIDs[i+1];
  end;
  SetLength(GroupIDs, len-1);
  lbGroup.Items.Delete(index);
  //clbGroup.Items.Delete(index);
  if (index > lbGroup.Items.Count-1) then
    index := lbGroup.Items.Count - 1;
  lbGroup.ItemIndex := index;
  lbGroupClick(Sender);
  ADOQuery.Free;
end;

procedure TfrmGroup.lbGroupClick(Sender: TObject);
var
  strItem: String;
begin
  if lbGroup.Items.Count > 0 then
  begin
    strItem := lbGroup.Items[lbGroup.ItemIndex];
    Delete(strItem, 1, 2);
    editGroupName.Text := strItem;
  end;
end;

procedure TfrmGroup.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TfrmGroup.BtnMoveUpClick(Sender: TObject);
var
  nIndex, nTempID: Integer;
  strItem, strNextItem: String;
  ADOQuery: TADOQuery;
begin
  nIndex := lbGroup.ItemIndex;
  //从第二个开始才能上移
  if (nIndex > 0) then
  begin
    ADOQuery := TADOQuery.Create(nil);
    ADOQuery.Connection := ADOConnection1;

    //交换并更改组别名称
    strItem := lbGroup.Items[nIndex];
    SetItemSort(strItem, nIndex-1);
    strNextItem := lbGroup.Items[nIndex - 1];
    SetItemSort(strNextItem, nIndex);
    lbGroup.Items[nIndex - 1] := strItem;
    lbGroup.Items[nIndex] := strNextItem;

    //交换组别ID
    nTempID := GroupIDs[nIndex - 1];
    GroupIDs[nIndex - 1] := GroupIDs[nIndex];
    GroupIDs[nIndex] := nTempID;

    //更改数据库中的数据
    strSQL := 'Update GroupList Set GroupName=''' + lbGroup.Items[nIndex-1]
            + ''' where GroupID=' + IntToStr(GroupIDs[nIndex-1]);
    ADOQuery.SQL.Clear;
    ADOQuery.SQL.Add(strSQL);
    ADOQuery.ExecSQL;

    strSQL := 'Update GroupList Set GroupName=''' + lbGroup.Items[nIndex]
            + ''' where GroupID=' + IntToStr(GroupIDs[nIndex]);
    ADOQuery.SQL.Clear;
    ADOQuery.SQL.Add(strSQL);
    ADOQuery.ExecSQL;

    lbGroup.ItemIndex := nIndex-1;
    ADOQuery.Free;
  end;
end;

procedure TfrmGroup.btnMoveDownClick(Sender: TObject);
var
  nIndex, nTempID: Integer;
  strItem, strNextItem: String;
  ADOQuery: TADOQuery;
begin
  nIndex := lbGroup.ItemIndex;
  //从第二个开始才能上移
  if (nIndex < lbGroup.Items.Count-1) then
  begin
    ADOQuery := TADOQuery.Create(nil);
    ADOQuery.Connection := ADOConnection1;

    //交换并更改组别名称
    strItem := lbGroup.Items[nIndex];
    SetItemSort(strItem, nIndex+1);
    strNextItem := lbGroup.Items[nIndex+1];
    SetItemSort(strNextItem, nIndex);
    lbGroup.Items[nIndex + 1] := strItem;
    lbGroup.Items[nIndex] := strNextItem;

    //交换组别ID
    nTempID := GroupIDs[nIndex + 1];
    GroupIDs[nIndex + 1] := GroupIDs[nIndex];
    GroupIDs[nIndex] := nTempID;

    //更改数据库中的数据
    strSQL := 'Update GroupList Set GroupName=''' + lbGroup.Items[nIndex+1]
            + ''' where GroupID=' + IntToStr(GroupIDs[nIndex+1]);
    ADOQuery.SQL.Clear;
    ADOQuery.SQL.Add(strSQL);
    ADOQuery.ExecSQL;

    strSQL := 'Update GroupList Set GroupName=''' + lbGroup.Items[nIndex]
            + ''' where GroupID=' + IntToStr(GroupIDs[nIndex]);
    ADOQuery.SQL.Clear;
    ADOQuery.SQL.Add(strSQL);
    ADOQuery.ExecSQL;

    lbGroup.ItemIndex := nIndex+1;
    ADOQuery.Free;
  end;
end;

procedure TfrmGroup.SetItemSort(var strItem:String; nIndex: Integer);
var
  strSeq: String;
begin
  if (nIndex < 10) then
    strSeq := '0' + IntToStr(nIndex)
  else
    strSeq := IntToStr(nIndex);
  Delete(strItem, 1, 2);
  strItem := strSeq + strItem;
end;

procedure TfrmGroup.btnCloseClick(Sender: TObject);
begin
  Close();
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -