uprinfo.~pas

来自「DELPHI编程入门篇.从基础入手,浅显易懂,一定物有所值.」· ~PAS 代码 · 共 492 行

~PAS
492
字号
unit Uprinfo;

interface

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

type
  Tfrmprinfo = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    ComboBox1: TComboBox;
    Label4: TLabel;
    Edit3: TEdit;
    BitBtn1: TBitBtn;
    StringGrid1: TStringGrid;
    Panel2: TPanel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    ComboBox2: TComboBox;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    BitBtn5: TBitBtn;
    BitBtn6: TBitBtn;
    BitBtn7: TBitBtn;
    BitBtn8: TBitBtn;
    ADOQuery1: TADOQuery;
    Edit10: TEdit;
    DTPicker1: TDateTimePicker;
    CheckBox1: TCheckBox;
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);
    procedure ComboBox2Select(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure BitBtn6Click(Sender: TObject);
    procedure BitBtn8Click(Sender: TObject);
    procedure BitBtn7Click(Sender: TObject);
    procedure BitBtn5Click(Sender: TObject);
    procedure StringGrid1Click(Sender: TObject);
    procedure Edit6KeyPress(Sender: TObject; var Key: Char);
    procedure Edit7KeyPress(Sender: TObject; var Key: Char);
    procedure Edit4KeyPress(Sender: TObject; var Key: Char);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure BitBtn2Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmprinfo: Tfrmprinfo;
  canupdate:boolean;
implementation

uses Udatamodule, Uprkind;

{$R *.dfm}

procedure Tfrmprinfo.FormCreate(Sender: TObject);
var
  arow:integer;
begin
  dtpicker1.Date:=date;
  stringgrid1.Cells[0,0]:='商品编号';
  stringgrid1.Cells[1,0]:='商品名称';
  stringgrid1.Cells[2,0]:='商品种类';
  stringgrid1.Cells[3,0]:='PLU码';
  stringgrid1.Cells[4,0]:='商品单价';
  stringgrid1.Cells[5,0]:='批次';
  stringgrid1.Cells[6,0]:='保质期';
  canupdate:=false;
  adoquery1.SQL.Text:='select * from pluinfo order by prid';
  adoquery1.Open;
  if adoquery1.RecordCount > 0 then
  begin
    arow:=1;
    stringgrid1.RowCount:=adoquery1.RecordCount+1;
    while not adoquery1.Eof do
    begin
      stringgrid1.Cells[0,arow]:=adoquery1.FieldValues['prid'];
      stringgrid1.Cells[1,arow]:=adoquery1.FieldValues['prname'];
      stringgrid1.Cells[2,arow]:=adoquery1.FieldValues['classid'];
      stringgrid1.Cells[3,arow]:=adoquery1.FieldValues['plu'];
      stringgrid1.Cells[4,arow]:=adoquery1.FieldValues['prrate'];
      stringgrid1.Cells[5,arow]:=adoquery1.fieldbyname('bachtime').AsString;
      stringgrid1.Cells[6,arow]:=adoquery1.fieldbyname('traittime').AsString;
      inc(arow);
      adoquery1.Next;
    end;
    adoquery1.Close;
  end;
  combobox1.Text:='全部';
  adoquery1.SQL.Text:='select classid,classname from classinfo';
  adoquery1.Open;
  while not adoquery1.Eof do
  begin
    combobox1.Items.Add(adoquery1.FieldValues['classname']);
    combobox2.Items.Add(adoquery1.FieldValues['classname']);
    adoquery1.Next;
  end;
  adoquery1.Close;
  combobox2.SelLength:=5;
end;

procedure Tfrmprinfo.BitBtn1Click(Sender: TObject);
var
  procode:string;
  i:integer;
begin
  if ((edit1.Text <> '') and (edit2.Text <> '') and (strtoint(edit1.Text)>strtoint(edit2.Text))) then
  begin
    showmessage('编号从小到大排列!');
    abort;
  end;
  for i:=1 to stringgrid1.RowCount-1 do
  stringgrid1.Rows[i].Clear;
  stringgrid1.RowCount:=2;
  if combobox1.Text <> '全部' then
  begin
    adoquery1.SQL.Text:='select classid from classinfo where classname = '''+combobox1.Text+'''';
    adoquery1.Open;
    procode:=adoquery1.fieldbyname('classid').AsString;
    adoquery1.Close;
    adoquery1.SQL.Text:='select * from pluinfo where classid = '''+procode+'''';
  end
  else
    adoquery1.SQL.Text:='select * from pluinfo where 1=1';
  if edit1.Text <> '' then
  begin
    while length(edit1.Text) < 7 do
      edit1.Text:='0'+edit1.Text;
    adoquery1.SQL.Add('and prid >= '''+edit1.Text+'''');
  end;
  if edit2.Text <> '' then
  begin
    while length(edit2.Text) < 7 do
      edit2.Text:='0'+edit2.Text;
    adoquery1.SQL.Add('and prid <='''+edit2.Text+'''');
  end;
  if edit3.Text <> '' then
    adoquery1.SQL.Add('and prname = '''+edit3.Text+'''');
  adoquery1.Open;
  if adoquery1.RecordCount > 0 then
  begin
    stringgrid1.RowCount:=adoquery1.RecordCount+1;
    i:=1;
    while not adoquery1.Eof do
    begin
      stringgrid1.Cells[0,i]:=adoquery1.FieldValues['prid'];
      stringgrid1.Cells[1,i]:=adoquery1.FieldValues['prname'];
      stringgrid1.Cells[2,i]:=adoquery1.FieldValues['classid'];
      stringgrid1.Cells[3,i]:=adoquery1.fieldbyname('plu').asstring;
      stringgrid1.Cells[4,i]:=adoquery1.fieldbyname('prrate').asstring;
      stringgrid1.Cells[5,i]:=adoquery1.fieldbyname('bachtime').asstring;
      stringgrid1.Cells[6,i]:=adoquery1.fieldbyname('traittime').asstring;
      adoquery1.Next;
      inc(i);
    end;
  end;
  adoquery1.Close;  
end;

procedure Tfrmprinfo.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
  key:=chr(0);
  showmessage('从下拉列表中选择!');
end;

procedure Tfrmprinfo.ComboBox2Select(Sender: TObject);
begin
  adoquery1.SQL.Text:='select classid from classinfo where classname = '''+combobox2.Text+'''';
  adoquery1.Open;
  edit10.Text:=adoquery1.fieldbyname('classid').AsString;
  adoquery1.Close;
end;

procedure Tfrmprinfo.BitBtn3Click(Sender: TObject);
var
  vmaxnum:string;
begin
  adoquery1.SQL.Text:='select max(prid) as maxnum from pluinfo';
  adoquery1.Open;
  vmaxnum:=adoquery1.fieldbyname('maxnum').AsString;
  adoquery1.Close;
  if vmaxnum = '' then
    edit4.Text:='0000001'
  else
  begin
    edit4.Text:=inttostr(strtoint(vmaxnum)+1);
    while length(edit4.Text)<7 do
    edit4.Text:='0'+edit4.Text;
  end;
  edit10.Text:='';
  edit5.Enabled:=true; edit5.Text:='';
  edit6.Enabled:=true; edit6.Text:='';
  edit7.Enabled:=true; edit7.Text:='';
  edit8.Enabled:=true; edit8.Text:='';
  DTPicker1.Enabled:=true;
  checkbox1.checked:=true;
  combobox2.Enabled:=true; combobox2.Text:='';
  bitbtn1.Enabled:=false;bitbtn2.Enabled:=false;
  bitbtn3.Enabled:=false;
  bitbtn4.Enabled:=false;
  bitbtn5.Enabled:=false;
  bitbtn8.Enabled:=false;
  bitbtn6.Enabled:=true;
  bitbtn7.Enabled:=true;
  edit5.SetFocus;
end;

procedure Tfrmprinfo.BitBtn4Click(Sender: TObject);
begin
  canupdate:=true;
  edit10.Text:='';
  edit5.Enabled:=true;
  edit6.Enabled:=true;
  edit7.Enabled:=true;
  edit8.Enabled:=true;
  combobox2.Enabled:=true;
  edit4.Text:=stringgrid1.Cells[0,stringgrid1.Row];
  edit5.Text:=stringgrid1.Cells[1,stringgrid1.Row];
  edit10.Text:=stringgrid1.Cells[2,stringgrid1.Row];
  edit6.Text:=stringgrid1.Cells[3,stringgrid1.Row];
  edit7.Text:=stringgrid1.Cells[4,stringgrid1.Row];
  edit8.Text:=stringgrid1.Cells[5,stringgrid1.Row];
  if stringgrid1.Cells[6,stringgrid1.Row] <>'' then
  begin
    dtpicker1.Enabled:=true;
    checkbox1.Checked:=true;
    DTPicker1.Date:=strtodate(stringgrid1.Cells[6,stringgrid1.Row]);
  end
  else begin
    dtpicker1.Enabled:=false;
    checkbox1.Checked:=false;
  end;  
  adoquery1.SQL.Text:='select classname from classinfo where classid = '''+edit10.Text+'''';
  adoquery1.Open;
  combobox2.Text:=adoquery1.fieldbyname('classname').AsString;
  adoquery1.Close;
  bitbtn1.Enabled:=false;bitbtn2.Enabled:=false;
  bitbtn3.Enabled:=false;
  bitbtn4.Enabled:=false;
  bitbtn5.Enabled:=false;
  bitbtn8.Enabled:=false;
  bitbtn6.Enabled:=true;
  bitbtn7.Enabled:=true;
  edit5.SetFocus;
end;

procedure Tfrmprinfo.BitBtn6Click(Sender: TObject);
var
  i:integer;
begin
  if edit5.Text = '' then
  begin
    showmessage('请输入商品名称');
    exit;
  end;
   if edit10.Text = '' then
  begin
    showmessage('请输入商品种类');
    exit;
  end;
  adoquery1.SQL.Text:='select * from pluinfo where prid = '''+edit4.Text+'''';
  adoquery1.Open;
  adoquery1.Edit;
  adoquery1.FieldValues['prid']:=edit4.Text;
  adoquery1.FieldValues['prname']:=edit5.Text;
  adoquery1.FieldValues['classid']:=edit10.Text;
  adoquery1.FieldValues['plu']:=edit6.Text;
  adoquery1.FieldValues['prrate']:=edit7.Text;
  adoquery1.FieldValues['bachtime']:=edit8.Text;
  if checkbox1.checked then
  begin
    adoquery1.FieldByName('traittime').AsDateTime:=dtpicker1.Date;
  end
  else
    adoquery1.FieldByName('traittime').AsString:='';
  adoquery1.Post;
  adoquery1.Close;
  if not canupdate then
  begin
    if stringgrid1.Cells[0,stringgrid1.RowCount-1] <> '' then
      stringgrid1.RowCount:=stringgrid1.RowCount+1;
    stringgrid1.Cells[0,stringgrid1.RowCount-1]:=edit4.Text;
    stringgrid1.Cells[1,stringgrid1.RowCount-1]:=edit5.Text;
    stringgrid1.Cells[2,stringgrid1.RowCount-1]:=edit10.Text;
    stringgrid1.Cells[3,stringgrid1.RowCount-1]:=edit6.Text;
    stringgrid1.Cells[4,stringgrid1.RowCount-1]:=edit7.Text;
    stringgrid1.Cells[5,stringgrid1.RowCount-1]:=edit8.Text;
    if checkbox1.checked then
    stringgrid1.Cells[6,stringgrid1.RowCount-1]:=datetostr(dtpicker1.date);
  end
  else begin
    for i:=1 to stringgrid1.RowCount-1 do
      if stringgrid1.Cells[0,i] = edit4.Text then
      begin
        stringgrid1.Cells[0,i]:=edit4.Text;
        stringgrid1.Cells[1,i]:=edit5.Text;
        stringgrid1.Cells[2,i]:=edit10.Text;
        stringgrid1.Cells[3,i]:=edit6.Text;
        stringgrid1.Cells[4,i]:=edit7.Text;
        stringgrid1.Cells[5,i]:=edit8.Text;
        if checkbox1.Checked then
          stringgrid1.Cells[6,i]:=datetostr(dtpicker1.Date)
        else
          stringgrid1.cells[6,i]:='';
      end;
  end;
  edit4.Clear; edit10.Clear;
  edit5.Enabled:=false; edit5.Clear;
  edit6.Enabled:=false; edit6.Clear;
  edit7.Enabled:=false; edit7.Clear;
  edit8.Enabled:=false; edit8.Clear;
  dtpicker1.Enabled:=false; edit8.Clear;
  combobox2.Enabled:=false; combobox2.Text:='';
  bitbtn1.Enabled:=true;
  bitbtn2.Enabled:=true;
  bitbtn3.Enabled:=true;
  bitbtn4.Enabled:=true;
  bitbtn5.Enabled:=true;
  bitbtn8.Enabled:=true;
  bitbtn6.Enabled:=false;
  bitbtn7.Enabled:=false;
  canupdate:=false;
end;

procedure Tfrmprinfo.BitBtn8Click(Sender: TObject);
begin
  self.Close;
end;

procedure Tfrmprinfo.BitBtn7Click(Sender: TObject);
begin
  edit4.Clear; edit10.Clear;
  edit5.Enabled:=false; edit5.Clear;
  edit6.Enabled:=false; edit6.Clear;
  edit7.Enabled:=false; edit7.Clear;
  edit8.Enabled:=false; edit8.Clear;
  dtpicker1.Enabled:=false; edit8.Clear;
  checkbox1.checked:=false;
  combobox2.Enabled:=false; combobox2.Text:='';
  bitbtn1.Enabled:=true;
  bitbtn2.Enabled:=true;
  bitbtn3.Enabled:=true;
  bitbtn4.Enabled:=true;
  bitbtn5.Enabled:=true;
  bitbtn8.Enabled:=true;
  bitbtn6.Enabled:=false;
  bitbtn7.Enabled:=false;
  canupdate:=false;
end;

procedure Tfrmprinfo.BitBtn5Click(Sender: TObject);
var
  i:integer;
begin
  if stringgrid1.Row > 0 then
  begin
   if messagedlg('真的要删除吗?',mtConfirmation,[mbYes, mbNo],0) = mrYes then
   begin
     adoquery1.SQL.Text:='delete from pluinfo where prid = '''+stringgrid1.Cells[0,stringgrid1.row]+'''';
     adoquery1.ExecSQL;
     adoquery1.close;
     if stringgrid1.RowCount = 2 then
       stringgrid1.Rows[1].Clear
     else begin
       for i:=stringgrid1.Row to stringgrid1.RowCount -2 do
         stringgrid1.Rows[i]:=stringgrid1.Rows[i+1];
       stringgrid1.Rows[stringgrid1.RowCount-1].Clear;
       stringgrid1.RowCount:=stringgrid1.RowCount-1;
     end;
   end;
 end
 else
   showmessage('请选择删除的项');    
end;

procedure Tfrmprinfo.StringGrid1Click(Sender: TObject);
begin
  if canupdate then
  begin
    edit4.Text:=stringgrid1.Cells[0,stringgrid1.Row];
    edit5.Text:=stringgrid1.Cells[1,stringgrid1.Row];
    edit10.Text:=stringgrid1.Cells[2,stringgrid1.Row];
    edit6.Text:=stringgrid1.Cells[3,stringgrid1.Row];
    edit7.Text:=stringgrid1.Cells[4,stringgrid1.Row];
    edit8.Text:=stringgrid1.Cells[5,stringgrid1.Row];
    if stringgrid1.Cells[6,stringgrid1.Row] <> '' then
    begin
      checkbox1.checked:=true;
      dtpicker1.Enabled:=true;
      DTPicker1.Date:=strtodate(stringgrid1.Cells[6,stringgrid1.Row]);
    end
    else begin
      dtpicker1.Enabled:=false;
      checkbox1.Checked:=false;
    end;
    adoquery1.SQL.Text:='select classname from classinfo where classid = '''+edit10.Text+'''';
    adoquery1.Open;
    combobox2.Text:=adoquery1.FieldValues['classname'];
    adoquery1.Close;
  end;  
end;

procedure Tfrmprinfo.Edit6KeyPress(Sender: TObject; var Key: Char);
begin
  if (( not(key in ['0'..'9'])) and (key <> #8) and (key <> #22)) then
  begin
    showmessage('输入数字');
    key:=chr(0);
    exit;
  end;
end;

procedure Tfrmprinfo.Edit7KeyPress(Sender: TObject; var Key: Char);
var
  s:string;
  i,cpoint:integer;
begin
  if (( not(key in ['0'..'9'])) and (key <> '.') and (key <> #8) and (key <> #22)) then
  begin
    showmessage('输入数字或小数点');
    key:=chr(0);
    exit;
  end
  else begin
    s:=edit7.Text;
    cpoint:=0;
    for i:=1 to length(s) do
      if s[i] = '.' then
      inc(cpoint);
    if ((cpoint > 0) and (key = '.')) then
    key:=chr(0);
  end;  
end;

procedure Tfrmprinfo.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
  if (( not(key in ['0'..'9'])) and (key <> #8) and (key <> #22)) then
  begin
    showmessage('输入数字');
    key:=chr(0);
  end
end;

procedure Tfrmprinfo.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  if not bitbtn8.Enabled then
  begin
    canclose:=false;
    showmessage('请先保存数据然后退出');
  end;
end;

procedure Tfrmprinfo.BitBtn2Click(Sender: TObject);
begin
  application.CreateForm(tfrmprkind,frmprkind);
  frmprkind.ShowModal;
  frmprkind.Release;
end;

procedure Tfrmprinfo.CheckBox1Click(Sender: TObject);
begin
  if checkbox1.Checked then
  dtpicker1.Enabled:=true
  else
    dtpicker1.Enabled:=false;
end;

end.

⌨️ 快捷键说明

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