ubook.~pas

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

~PAS
589
字号
unit Ubook;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, dxExEdtr, dxEdLib, StdCtrls, dxEditor, Grids, dxCntner, ExtCtrls,
  Buttons, ComCtrls, DB, ADODB, Menus, RpDefine, RpRave, RpCon, RpConDS;

type
  Tfrmbook = class(TForm)
    Panel1: TPanel;
    Panel3: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit1: TEdit;
    DTPicker1: TDateTimePicker;
    DTPicker2: TDateTimePicker;
    ComboBox1: TComboBox;
    Label5: TLabel;
    Edit2: TEdit;
    Label6: TLabel;
    ComboBox2: TComboBox;
    Label7: TLabel;
    DTPicker3: TDateTimePicker;
    Label8: TLabel;
    DTPicker4: TDateTimePicker;
    Label9: TLabel;
    Edit3: TEdit;
    SpeedButton1: TSpeedButton;
    Panel2: TPanel;
    SpeedButton2: TSpeedButton;
    SpeedButton4: TSpeedButton;
    SpeedButton5: TSpeedButton;
    SpeedButton6: TSpeedButton;
    SpeedButton7: TSpeedButton;
    SpeedButton8: TSpeedButton;
    StringGrid2: TStringGrid;
    ADOQuery1: TADOQuery;
    StringGrid1: TStringGrid;
    dxButtonEdit1: TdxButtonEdit;
    ADOQuery2: TADOQuery;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    RvProject1: TRvProject;
    RvbookConnection1: TRvDataSetConnection;
    RvbookConnection2: TRvDataSetConnection;
    procedure SpeedButton1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure SpeedButton5Click(Sender: TObject);
    procedure dxButtonEdit1Exit(Sender: TObject);
    procedure dxButtonEdit1ButtonClick(Sender: TObject;
      AbsoluteIndex: Integer);
    procedure StringGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure StringGrid2Click(Sender: TObject);
    procedure SpeedButton8Click(Sender: TObject);
    procedure SpeedButton6Click(Sender: TObject);
    procedure SpeedButton4Click(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure SpeedButton7Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmbook: Tfrmbook;

implementation

uses Udatamodule, Ufilprod;

{$R *.dfm}

procedure Tfrmbook.SpeedButton1Click(Sender: TObject);
var
  i,arow:integer;
begin
  for i:=1 to stringgrid2.RowCount-1 do
  stringgrid2.Rows[i].Clear;
  stringgrid2.RowCount:=2;
  for i:=1 to stringgrid1.RowCount-1 do
    stringgrid1.Rows[i].Clear;
  stringgrid1.RowCount:=2;
  adoquery1.SQL.Text:='select bookid,provid,bookdate,reachdate,handleman from stockbook where bookdate between #'+datetostr(dtpicker1.date)+'# and #'+datetostr(dtpicker2.date)+'#';
  if edit1.Text <> '' then
  adoquery1.SQL.Add('and bookid = '''+edit1.Text+'''');
  if combobox1.Text <> '' then
  adoquery1.SQL.add('and provid = '''+copy(combobox1.Text,1,5)+'''');
  adoquery1.Open;
  if adoquery1.RecordCount > 0 then
  begin
    stringgrid1.Enabled:=true;
    stringgrid2.RowCount:=adoquery1.RecordCount+1;
    edit2.Text:=''; edit3.Text:=''; combobox2.ItemIndex:=-1;
    //edit2.Text:=adoquery1.FieldValues['bookid'];
    //edit3.Text:=adoquery1.FieldValues['bookdate'];
   // dtpicker3.Date:=adoquery1.FieldValues['reachdate'];
   // dtpicker4.Date:=adoquery1.FieldValues['handleman'];
    for i:=0 to combobox2.Items.Count-1 do
    begin
      if copy(combobox2.Items.Strings[i],1,5) = adoquery1.FieldByName('provid').AsString then
      combobox2.ItemIndex:=i;
      break;
    end;
    arow:=1;
    while not adoquery1.Eof do
    begin
      stringgrid2.Cells[1,arow]:=adoquery1.FieldValues['bookid'];
      stringgrid2.Cells[2,arow]:=adoquery1.FieldValues['provid'];
      stringgrid2.Cells[3,arow]:=adoquery1.FieldValues['bookdate'];
      adoquery1.Next;
      inc(arow);
    end;
    speedbutton4.Enabled:=true;
    speedbutton7.Enabled:=true;
  end;
  adoquery1.Close;
end;

procedure Tfrmbook.FormCreate(Sender: TObject);
var
  i,j,arows,recordcounts:integer;
begin
  stringgrid1.Cells[1,0]:='商品编号';
  stringgrid1.Cells[2,0]:='商品名称';
  stringgrid1.Cells[3,0]:='数量';
  stringgrid2.Cells[1,0]:='订单编号';
  stringgrid2.Cells[2,0]:='供应商';
  stringgrid2.Cells[3,0]:='订购日期';
  dtpicker1.Date:=date-7;
  dtpicker2.Date:=date;
  adoquery1.SQL.Text:='select provid,provname from provinfo';
  adoquery1.Open;
  while not adoquery1.Eof do
  begin
    combobox1.Items.Add(adoquery1.FieldValues['provid']+'   '+adoquery1.FieldValues['provname']);
    combobox2.Items.Add(adoquery1.FieldValues['provid']+'   '+adoquery1.FieldValues['provname']);
    adoquery1.Next;
  end;
  adoquery1.Close;
  adoquery1.SQL.Text:='select bookid,provid,bookdate,reachdate,handleman from'
  +' stockbook where ifdeal = false';
  adoquery1.Open;
  recordcounts:=adoquery1.RecordCount;
  if recordcounts > 0 then
  begin
    stringgrid2.RowCount:=adoquery1.RecordCount+1;
    edit2.Text:=adoquery1.FieldValues['bookid'];
    edit3.Text:=adoquery1.FieldValues['handleman'];;
    dtpicker3.Date:=adoquery1.FieldValues['bookdate'];;
    dtpicker4.Date:=adoquery1.FieldValues['reachdate'];;
    for i:= 0 to combobox2.Items.Count-1 do
    begin
      if copy(combobox2.Items.Strings[i],1,5) = adoquery1.FieldValues['provid'] then
        combobox2.ItemIndex:=i;
      break;
    end;
    stringgrid2.Cells[0,1]:='*';
    arows:=1;
    while not adoquery1.Eof do
    begin
      stringgrid2.Cells[1,arows]:=adoquery1.FieldValues['bookid'];
      stringgrid2.Cells[2,arows]:=adoquery1.FieldValues['provid'];
      stringgrid2.Cells[3,arows]:=adoquery1.FieldValues['bookdate'];
      adoquery1.Next;
      inc(arows);
    end;
    adoquery1.close;
    adoquery1.SQL.text:='select stockbook1.prid,pluinfo.prname,stockbook1.booknum from'
    +' stockbook1 INNER JOIN pluinfo on stockbook1.prid = pluinfo.prid where stockbook1.bookid = '''+stringgrid2.Cells[1,1]+'''';
    adoquery1.Open;
    if adoquery1.RecordCount > 0 then
    begin
      stringgrid1.RowCount:=adoquery1.RecordCount+1;
      j:=1;
      while not adoquery1.Eof do
      begin
        stringgrid1.Cells[1,j]:=adoquery1.FieldValues['prid'];
        stringgrid1.Cells[2,j]:=adoquery1.FieldValues['prname'];
        stringgrid1.Cells[3,j]:=adoquery1.FieldValues['booknum'];
        adoquery1.Next;
        inc(j);
      end;
      adoquery1.Close;
    end;
  end
  else begin
    stringgrid1.Enabled:=false;
    speedbutton4.Enabled:=false;
    speedbutton7.Enabled:=false;
  end;
end;

procedure Tfrmbook.SpeedButton2Click(Sender: TObject);
var
  bcount,smonth,sdate:string;
  ayear,amonth,adate:word;
  i:integer;
begin
  for i:=1 to stringgrid1.RowCount-1 do
    stringgrid1.Rows[i].Clear;
    stringgrid1.RowCount:=2;
  stringgrid1.Enabled:=true;
  edit1.Text:='';edit1.Enabled:=false;
  dtpicker1.Enabled:=false;
  dtpicker2.Enabled:=false;
  combobox1.Text:='';combobox1.Enabled:=false;
  edit2.Text:='';
  edit3.Text:='';edit3.Enabled:=true;
  dtpicker3.Enabled:=true;dtpicker3.Date:=date;
  dtpicker4.Enabled:=true;dtpicker4.Date:=date;
  combobox2.Enabled:=true;combobox2.ItemIndex:=-1;
  decodedate(date,ayear,amonth,adate);
  smonth:=inttostr(amonth);sdate:=inttostr(adate);
  if length(smonth) < 2 then smonth:= '0'+smonth;
  if length(sdate) < 2 then sdate:='0'+sdate;
  bcount:=inttostr(ayear)+smonth+sdate;
  adoquery1.SQL.Text:='select max(bookid) as bcount from stockbook where bookid like '''+bcount+'%''';
  adoquery1.Open;
  if adoquery1.Fields[0].AsString <> '' then
    edit2.Text:=inttostr(strtoint64(adoquery1.Fields[0].AsString)+1)
  else
    edit2.Text:=bcount+'0001';
  adoquery1.Close;
  speedbutton1.Enabled:=false;
  speedbutton2.Enabled:=false;
  speedbutton4.Enabled:=false;
  speedbutton5.Enabled:=true;
  speedbutton6.Enabled:=true;
  speedbutton7.Enabled:=false;
  speedbutton8.Enabled:=false;
end;

procedure Tfrmbook.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
var
  arect:trect;
begin
  if speedbutton5.Enabled then
  begin
    if acol = 3 then
      stringgrid1.Options:=stringgrid1.options+[goediting]
    else
      stringgrid1.Options:=stringgrid1.options-[goediting];
    if ((acol = 1) or (acol = 2)) then
    begin
      arect:=stringgrid1.CellRect(acol,arow);
      arect.Left:=arect.Left+stringgrid1.Left;
      arect.Right:=arect.Right+stringgrid1.Left;
      arect.top:=arect.Top+stringgrid1.Top;
      dxbuttonedit1.Left:=arect.Left+1;
      dxbuttonedit1.Top:=arect.Top+1;
      dxbuttonedit1.Height:=stringgrid1.RowHeights[arow];
      dxbuttonedit1.Width:=stringgrid1.ColWidths[acol];
      dxbuttonedit1.Visible:=true;
      dxbuttonedit1.Text:=stringgrid1.Cells[acol,arow];
      dxbuttonedit1.SetFocus;
    end;
    if arow <> stringgrid1.RowCount-1 then
    begin
      if stringgrid1.Cells[1,stringgrid1.RowCount-1] = '' then
      begin
        stringgrid1.Rows[stringgrid1.RowCount-1].Clear;
        if stringgrid1.RowCount > 2 then
          stringgrid1.RowCount:=stringgrid1.RowCount-1;
      end;
    end;
  end;
end;

procedure Tfrmbook.SpeedButton5Click(Sender: TObject);
var
  i,j,recount:integer;
begin
  if edit2.Text  = '' then
  begin
    showmessage('订单编号不能为空');
    exit;
  end;
  if combobox2.Text = '' then
  begin
    showmessage('供应商不能为空!');
    exit;
  end;

⌨️ 快捷键说明

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