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

📄 goodsselectunit.pas

📁 好用得程序
💻 PAS
字号:
unit GoodsSelectUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, Grids, Buttons, ExtCtrls, ToolWin, DB,
  DBTables;

type
  TGoodsSelectForm = class(TForm)
    PanelBkGnd: TPanel;
    SG_data: TStringGrid;
    StatusBar1: TStatusBar;
    Label2: TLabel;
    SB_find: TSpeedButton;
    E_find: TEdit;
    ControlBar1: TControlBar;
    ToolBar1: TToolBar;
    TB_Select: TToolButton;
    TB_EDIT: TToolButton;
    TB_DEL: TToolButton;
    ToolButton5: TToolButton;
    tb_Add: TToolButton;
    TB_EXIT: TToolButton;
    Panel: TPanel;
    Label1: TLabel;
    CB_Name: TComboBox;
    Bevel1: TBevel;
    Query_data: TQuery;
    query_basemess: TQuery;
    procedure TB_SelectClick(Sender: TObject);
    procedure TB_EDITClick(Sender: TObject);
    procedure tb_AddClick(Sender: TObject);
    procedure CB_NameChange(Sender: TObject);
    procedure TB_EXITClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure SG_dataDblClick(Sender: TObject);
    procedure User_addlist(S_name: string);
    procedure E_findChange(Sender: TObject);
    procedure E_findKeyPress(Sender: TObject; var Key: Char);
    procedure TB_DELClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  GoodsSelectForm: TGoodsSelectForm;

implementation

uses GoodsEditUnit, FunctionUnit, MainUnit;

{$R *.dfm}

procedure TGoodsSelectForm.User_addlist(S_name: string);
var
  I_lines: integer;
begin
  for I_lines := 1 to sg_data.RowCount do
  begin
    sg_data.Rows[I_lines].Clear;
  end;
   //增加查找列表
  with query_basemess do
  begin
    close;
    if (s_name = '所有商品') or (trim(s_name) = '') then
      sql.text := 'select * from goods order by name'
    else
      sql.text := 'select * from goods where name="' + s_name + '" order by name';
    open;
    if recordcount > 0 then
      sg_data.rowcount := recordcount + 1
    else
      sg_data.RowCount := 2;
    first;
    I_lines := 1;
    while not eof do
    begin
      sg_data.Cells[0, I_lines] := inttostr(I_lines);
      sg_data.cells[1, I_lines] := fieldbyname('id').asstring;
      sg_data.cells[2, I_lines] := fieldbyname('name').asstring;
      sg_data.Cells[3, I_lines] := fieldbyname('type').asstring;
      sg_data.Cells[4, I_lines] := fieldbyname('price').asstring;
      sg_data.Cells[5, I_lines] := fieldbyname('sellprice').asstring;
      sg_data.Cells[6, I_lines] := fieldbyname('unit').asstring;
      sg_data.Cells[7, I_lines] := fieldbyname('memo').asstring;
      I_lines := I_lines + 1;
      next;
    end;
    close;
  end;
  sg_data.Row := 1;
  if sg_data.RowCount > 1 then
    sg_data.FixedRows := 1
  else
    sg_data.FixedRows := 0;
end;

procedure TGoodsSelectForm.TB_SelectClick(Sender: TObject);
begin
  ModalResult := mrOK;
end;

procedure TGoodsSelectForm.TB_EDITClick(Sender: TObject);
var
  I_temp: integer;
  B_find: Boolean;
begin
  if SG_data.Cells[1, 1] = '' then exit;
  Application.CreateForm(TGoodsEditForm, GoodsEditForm);
  GoodsEditForm.Caption := '商品信息(编辑)';
  GoodsEditForm.P_state := 1;
  with GoodsEditForm do
  begin
    P_state := 1;
    e_id.Text := SG_data.Cells[1, SG_data.Row];
    e_name.Text := SG_data.Cells[2, SG_data.Row];
    e_type.text := SG_data.Cells[3, SG_data.Row];
    e_price.Text := sg_data.cells[4, sg_data.Row];
    e_sellprice.Text := sg_data.cells[5, sg_data.Row];
    e_unit.Text := SG_data.Cells[6, SG_data.Row];
    e_memo.Text := SG_data.Cells[7, SG_data.Row];
  end;
  GoodsEditForm.showmodal;
  with query_data do
  begin
    close;
    sql.Clear;
    sql.text := 'select * from goods order by name';
    open;
    CB_NAME.Items.add('所有商品');
    while not eof do
    begin
      B_find := false;
      for I_temp := 0 to CB_NAME.items.Count - 1 do
      begin
        if CB_NAME.Items[I_temp] = fieldbyname('name').asstring then
          B_find := true; //找到相同名称
      end;
      if not B_find then //没有找到时增加
        CB_NAME.Items.add(fieldbyname('name').asstring);
      next;
    end;
    close;
  end;
  GoodsEditForm.free;
  CB_NAMEChange(self);

end;

procedure TGoodsSelectForm.tb_AddClick(Sender: TObject);
var
  I_temp: integer;
  B_find: Boolean;
begin
  Application.CreateForm(TGoodsEditForm, GoodsEditForm);
  GoodsEditForm.E_name.Text := SG_data.Cells[2, SG_data.Row];
  GoodsEditForm.Caption := '商品信息(增加)';
  GoodsEditForm.P_state := 0;
  GoodsEditForm.showmodal;
  with query_data do
  begin
    close;
    sql.Clear;
    sql.text := 'select * from goods order by name';
    open;
    CB_NAME.Items.add('所有商品');
    while not eof do
    begin
      B_find := false;
      for I_temp := 0 to CB_NAME.items.Count - 1 do
      begin
        if CB_NAME.Items[I_temp] = fieldbyname('name').asstring then
          B_find := true; //找到相同名称
      end;
      if not B_find then //没有找到时增加
        CB_NAME.Items.add(fieldbyname('name').asstring);
      next;
    end;
    close;
  end;
  GoodsEditForm.free;
  CB_NAMEChange(self);

end;

procedure TGoodsSelectForm.CB_NameChange(Sender: TObject);
begin
  User_addlist(cb_name.Text);
end;

procedure TGoodsSelectForm.TB_EXITClick(Sender: TObject);
begin
  Self.Close;
end;

procedure TGoodsSelectForm.FormCreate(Sender: TObject);
var
  I_temp: integer;
  B_find: Boolean;
begin
  inherited;
  self.Caption := Application.Title + ' - 产品列表';
  Query_basemess.DatabaseName := 'CPXSGL';
  Query_data.DatabaseName := 'CPXSGL';
  with sg_data do
  begin
    colcount := 8;
    colwidths[0] := width * 8 div 100;
    colwidths[1] := width * 25 div 100;
    colwidths[2] := width * 25 div 100;
    colwidths[3] := width * 25 div 100;
    colwidths[4] := width * 25 div 100;
    colwidths[5] := width * 15 div 100;
    colwidths[6] := width * 15 div 100;
    colwidths[7] := width * 25 div 100;
    cols[0].Text := '序号';
    cols[1].text := '产品编码';
    cols[2].text := '产品名称';
    cols[3].text := '产品型号';
    cols[4].text := '最近单价';
    cols[5].text := '提成';
    cols[6].text := '单位';
    cols[7].text := '备注';
  end;
  with query_data do
  begin
    close;
    sql.Clear;
    sql.text := 'select * from goods order by name';
    open;
    CB_NAME.Items.add('所有商品');
    while not eof do
    begin
      B_find := false;
      for I_temp := 0 to CB_NAME.items.Count - 1 do
      begin
        if CB_NAME.Items[I_temp] = fieldbyname('name').asstring then
          B_find := true; //找到相同名称
      end;
      if not B_find then //没有找到时增加
        CB_NAME.Items.add(fieldbyname('name').asstring);
      next;
    end;
    close;
  end;
  User_addlist('所有商品');

end;

procedure TGoodsSelectForm.SG_dataDblClick(Sender: TObject);
begin
  ModalResult := mrOK;
end;

procedure TGoodsSelectForm.E_findChange(Sender: TObject);
var
  I_line: integer;
  S_source, S_find: string;
begin
  if trim(e_find.text) = '' then
  begin
    if sg_data.RowCount > 1 then
      sg_data.Row := 1
    else
      sg_data.Row := 0;
  end
  else
  begin
    S_find := uppercase(trim(e_find.Text));
    for I_line := 1 to sg_data.RowCount - 1 do
    begin
      S_SOURCE := '';
      S_source := uppercase(trim(sg_data.cells[1, I_line] + sg_data.cells[2, I_line] + sg_data.cells[3, I_line]));
      if strpos(pchar(s_source), pchar(S_find)) <> nil then
      begin
        sg_data.row := I_line;
        exit;
      end;
    end;
    messagedlg('所有商品信息中没有找到含“' + e_find.text + '”字符的记录!', mtwarning, [mbok], 0);
    e_find.Text := '';
  end;
end;

procedure TGoodsSelectForm.E_findKeyPress(Sender: TObject; var Key: Char);
begin
  if word(key) = 13 then tb_select.Click;
end;

procedure TGoodsSelectForm.TB_DELClick(Sender: TObject);
var
  I_temp: integer;
  B_find: Boolean;
begin
  if not Checkrights(USERRIGHTS, '删除') then
  begin
    messagedlg(Errormsg0006 + '0007', mterror, [mbok], 0);
    exit;
  end;
  if messagedlg('警告:删除商品信息数据可能产生严重数据丢失现象,请不要在此删除商品信息数据' + chr(13) + chr(13)
    + '删除数据操作将不可恢复,确定要删除本记录吗?', mtWarning, [mbyes, mbno], 0) = mryes then
    if messagedlg('再次警告:为了保证数据库内数据信息的完整性,请不要在此商品信息数据' + chr(13) + chr(13)
      + '删除数据操作将不可恢复,确定要删除本记录吗?', mtWarning, [mbyes, mbno], 0) = mryes then
    begin

      with query_data do
      begin
        close;
        sql.Clear;
        sql.Text := 'delete from goods where id=''' + SG_data.Cells[1, SG_data.Selection.Top] + '''';
        try
          execsql;
        except
          messagedlg(Errormsg0005 + '0009', mtError, [mbok], 0);
          close;
          exit;
        end;

        close;
        sql.Clear;
        sql.text := 'select * from goods order by name';
        open;
        CB_NAME.Items.add('所有商品');
        while not eof do
        begin
          B_find := false;
          for I_temp := 0 to CB_NAME.items.Count - 1 do
          begin
            if CB_NAME.Items[I_temp] = fieldbyname('name').asstring then
              B_find := true; //找到相同名称
          end;
          if not B_find then //没有找到时增加
            CB_NAME.Items.add(fieldbyname('name').asstring);
          next;
        end;
        close;
      end;
    end;
  CB_NameChange(self);
end;

procedure TGoodsSelectForm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Query_basemess.Free;
  Query_data.Free;
end;

end.

⌨️ 快捷键说明

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