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

📄 card_lycard.pas

📁 亚惠快餐管理信息系统 包括亚惠快餐管理的各项功能
💻 PAS
字号:
unit Card_LyCard;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ToolWin, ComCtrls, ExtCtrls, DBCtrls, StdCtrls, Buttons, Mask,
  Grids, DBGrids, DB, IniFiles, jpeg, ADODB;

type
  TFrmCard_LyCard = class(TForm)
    Bevel1: TBevel;
    StatusBar1: TStatusBar;
    CoolBar1: TCoolBar;
    ToolBar2: TToolBar;
    DBNavigator1: TDBNavigator;
    ToolBar3: TToolBar;
    ToolButton1: TToolButton;
    Panel4: TPanel;
    DBGrid1: TDBGrid;
    Panel1: TPanel;
    Panel2: TPanel;
    Label1: TLabel;
    Label3: TLabel;
    DBText1: TDBText;
    Label2: TLabel;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    Panel3: TPanel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    DBEdit5: TDBEdit;
    Panel5: TPanel;
    Label8: TLabel;
    Label9: TLabel;
    Label7: TLabel;
    DBEdit7: TDBEdit;
    DBEdit8: TDBEdit;
    DBEdit6: TDBEdit;
    Panel6: TPanel;
    DBComboBox1: TDBComboBox;
    DBComboBox2: TDBComboBox;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    ADOQuery2: TADOQuery;
    procedure FormShow(Sender: TObject);
    procedure DBEdit1DblClick(Sender: TObject);
    procedure DBEdit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBEdit2Exit(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    procedure DBEdit2DblClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure DBEdit7Change(Sender: TObject);
    procedure DBComboBox2Change(Sender: TObject);
    procedure DBEdit6Enter(Sender: TObject);
    procedure ADOQuery1AfterPost(DataSet: TDataSet);
    procedure ADOQuery1BeforePost(DataSet: TDataSet);
  private
    { Private declarations }
  public
    { Public declarations }
    SuccessFlag:Boolean;
    Flag: Boolean;
    procedure ScanData;
    function IfEditNull: Boolean;
    procedure GetIniValue;
    procedure SetValue;
    procedure IniComboBox;
    procedure GetLyJe;
    procedure SetReadOnlyTrue;
    procedure SetReadOnlyFalse;
    function  GetMaxSl(var MaxSl:integer):Boolean;
  end;

procedure SetWork;
implementation
uses Card_DataModule, PublicUnit, DI_DBCalendar, main, DI_DataModul1,
  DI_DBDictionery, PZ_RqXz,Card_Result;

{$R *.dfm}

procedure SetWork;
var
  FrmCard_LyCard: TFrmCard_LyCard;
begin
  Screen.Cursor := crHourGlass;
  Application.CreateForm(TFrmCard_LyCard, FrmCard_LyCard);
  FrmCard_LyCard.Show;
  Screen.Cursor := crDefault;
end;

{与窗体有关}

procedure TFrmCard_LyCard.FormShow(Sender: TObject);
begin
  Screen.Cursor := crHourGlass;
  with CardSell_DataModule.ADOConnection1  do
  begin
    Close;
    ConnectionString := 'Provider=SqlOLEDB.1;Persist Security Info=True;User ID='
      + PublicUnit.DBUser + ';Password=' + PublicUnit.DBPass +
      ';Initial Catalog='
      + PublicUnit.DbName + ';Data Source=' + PublicUnit.ServerName;
    try
      Open;
    except
      Screen.Cursor := crDefault;
      ShowMessage('连接业务数据库失败,该系统无法正常工作!');
      Exit;
    end;
  end;
  {ADOQuery1.ConnectionString:= 'Provider=SqlOLEDB.1;Persist Security Info=True;User ID='
      + PublicUnit.DBUser + ';Password=' + PublicUnit.DBPass +
      ';Initial Catalog='
      + PublicUnit.DbName + ';Data Source=' + PublicUnit.ServerName;}
  ADOQuery1.Close;
  ADOQuery1.Connection:=CardSell_DataModule.ADOConnection1;
  DataSource1.DataSet:=ADOQuery1;
  ADOQuery2.Close;
  ADOQuery2.Connection:=CardSell_DataModule.ADOConnection1;
  SetReadOnlyTrue;
  ScanData;
  Screen.Cursor := crDefault;
  //InitialEdit;
end;

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

{判断Edit是否有为空的字段}

function TFrmCard_LyCard.IfEditNull: Boolean;
var
  i: integer;
  Temp: TComponent;
begin
  Result := True;
  for i := 0 to ComponentCount - 1 do
  begin
    Temp := Components[i];
    if (Temp is TDBEdit) then
      if TDBEdit(Temp).Text = '' then
      begin
        ShowMessage(TDBEdit(Temp).Hint + '不能为空');
        TDBEdit(Temp).SetFocus;
        Exit;
      end;
  end;
  Result := False;
end;

procedure TFrmCard_LyCard.ScanData;
var
  k, wid: integer;
begin
  Screen.Cursor := crHourGlass;
  with ADOQuery1 do
  begin
    Close;
    Sql.Clear;
    Sql.Add('Select * ');
    Sql.Add('From SCSJ_TLYXX Order By 日期');
    try
      Open;
    except
      Screen.Cursor := crDefault;
      ShowMessage('无法浏览领用卡信息!');
      Exit;
    end;
    StatusBar1.Panels[0].Text := '   当前为卡片领用信息数据表';
    StatusBar1.Panels[1].Text := '   共有 ' + IntToStr(RecordCount) + ' 条记录';
    for k := 0 to FieldCount - 1 do
    begin
      if k = 1 then wid := 40 else  wid := 50;
      DBGrid1.Columns[k].Title.Alignment := taCenter;
      DBGrid1.Columns[k].Width := DBGrid1.Columns[k].Field.DisplayWidth + wid;
    end;
    SetDBGridFieldsDisplay(DbGrid1);
    DBGrid1.Columns[8].Visible := False;
    Screen.Cursor := crDefault;
  end;
end;

procedure TFrmCard_LyCard.DBEdit1DblClick(Sender: TObject);
var
  Rq: TDate;
begin
  if DBEdit1.DataSource.DataSet.State in [dsEdit, dsInsert] = False then
    Exit;
  {DI_DfmDBCalendar := TDI_DfmDBCalendar.Create(Application, nil,
    TDBEdit(Sender),
    'DBEdit');
  with DI_DfmDBCalendar do
  begin
    Width := 400;
    ShowModal;
    Free;
  end;}
  PZ_RqXz.SetWork(Rq);
  DBEdit1.Field.Value := Rq;
end;

procedure TFrmCard_LyCard.DBEdit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ((Sender is TDBEdit) and (Key = VK_RETURN)) then
  begin
    if TDBEdit(Sender).Tag = 8 then
    begin
      if TDBEdit(Sender).DataSource.DataSet <> nil then
        with TDBEdit(Sender).DataSource.DataSet do
        begin
          Next;
          DBEdit1.SetFocus;
          if EOF and CanModify then
          begin
            Append;
            //GetIniValue;
          end;
        end;
    end
    else
      perform(WM_NEXTDLGCTL, 0, 0);
  end;
end;

procedure TFrmCard_LyCard.DBEdit2Exit(Sender: TObject);
begin
  if DBEdit1.DataSource.DataSet.State in [dsEdit, dsInsert] = False then
    Exit;
  ADOQuery1.FieldByName('操作员姓名').AsString :=
    Trim(FrmMain.UserName);
end;

procedure TFrmCard_LyCard.BitBtn1Click(Sender: TObject);
begin
  Close;
end;

procedure TFrmCard_LyCard.GetIniValue;
var
  ti: TInifile;
  MachineNo: string;
begin
  //ADOQuery1.DataSource.DataSet.Insert;
  ADOQuery1.FieldByName('日期').AsDateTime := Date;
  ADOQuery1.FieldByName('发卡人').AsString :=
    Trim(FrmMain.UserName);
  ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'System.ini');
  MachineNo := ti.ReadString('默认选项', 'MachineNo', '2');
  ADOQuery1.FieldByName('售卡机编码').AsString :=
    Trim(MachineNo);
  IniComboBox;
  GetLyJe;
  DBEdit1.SetFocus;
  ti.Free;
end;
{初始化卡片类型和卡片面值列表}

procedure TFrmCard_LyCard.IniComboBox;
var
  ti: TInifile;
  TypeCount, i: integer;
  CardType: string;
begin
  DBComboBox1.Clear;
  DBComboBox2.Clear;
  ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + '\System.ini');
  TypeCount := ti.ReadInteger('CardTypeList', 'CardTypeCount', 0);
  for i := 1 to TypeCount do
  begin
    CardType := ti.ReadString('CardTypeList', 'CardType' + IntToStr(i), '');
    if CardType = '' then
      Continue;
    DBComboBox1.Items.Add(CardType);
    if DBComboBox1.Items.Count > 0 then
    begin
      DBComboBox1.ItemIndex := 0;
      ADOQuery1.FieldByName('卡片类型').AsString :=
        Trim(DBComboBox1.Text);
    end;
  end;
  TypeCount := ti.ReadInteger('CardValueList', 'CardValueCount', 0);
  for i := 1 to TypeCount do
  begin
    CardType := ti.ReadString('CardValueList', 'CardValue' + IntToStr(i), '');
    if CardType = '' then
      Continue;
    DBComboBox2.Items.Add(CardType);
    if DBComboBox2.Items.Count > 0 then
    begin
      DBComboBox2.ItemIndex := 0;
      ADOQuery1.FieldByName('卡片面值').AsString :=
        Trim(DBComboBox2.Text);
    end;
  end;
  ti.Free;
end;

procedure TFrmCard_LyCard.SetValue;
var
  ti: TInifile;
  MachineNo: string;
begin
  ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'System.ini');
  MachineNo :=
    Trim(ADOQuery1.FieldByName('售卡机编码').AsString);
  ti.WriteString('默认选项', 'MachineNo', MachineNo);
  ti.Free;
end;

procedure TFrmCard_LyCard.DBNavigator1Click(Sender: TObject;
  Button: TNavigateBtn);
begin
  if Button = nbInsert then
  begin
    GetIniValue;
    SetReadOnlyFalse;
    Flag := False;
  end;
end;

procedure TFrmCard_LyCard.DBEdit2DblClick(Sender: TObject);
var
  ADataSet: TDataSet;
  DicName: string;
  TemporaryTableNames: TStrings;
  DI_DfmDBDictionery: TDI_DfmDBDictionery;
begin
  ADataSet := TDBEdit(Sender).DataSource.DataSet;
  if not (ADataSet.State in [dsEdit, dsInsert]) then
    Exit;
  DicName := 'Dic_' + Trim(TDbEdit(Sender).Field.FieldName);
  DI_DfmDataModule1.AnotherDBADOConnection.Close;
  DI_DfmDataModule1.AnotherDBADOConnection.ConnectionString :=
    'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=' + FrmMain.Dbuser
    +
    ';Password=' + FrmMain.DBPass + ';Initial Catalog=' + FrmMain.DbName +
    ';Data Source=' + FrmMain.ServerName;
  TemporaryTableNames := TStringList.Create;
  DI_DfmDataModule1.AnotherDBADOConnection.GetTableNames(TemporaryTableNames,
    False);
  if TemporaryTableNames.IndexOf(DicName) = -1 then
  begin
    if MessageDlg('没有字典,是否创建?', mtConfirmation, mbOKCancel, 0) =
      mrCancel then
      Exit;
    with DI_DfmDataModule1.DictioneryADOQuery do
    begin
      Close;
      Sql.Clear;
      Sql.Add('Create Table ' + DicName);
      Sql.Add('(ID varChar (10),DICTIONARY varChar(50))');
      try
        ExecSql;
      except
        ShowMessage('error');
        Exit;
      end;
    end;
  end;
  DI_DfmDBDictionery := TDI_DfmDBDictionery.Create(Self, DicName, DBGrid1,
    TDBEdit(Sender), 'DBEdit');
  DI_DfmDBDictionery.ShowModal;
  DI_DfmDBDictionery.Free;
  TemporaryTableNames.Free;
end;

procedure TFrmCard_LyCard.DBEdit7Change(Sender: TObject);
begin
  if Flag then
  begin
    if DBEdit7.Text = '' then
      DBEdit7.Text := '0';
    GetLyJe;
  end;
  Flag := True;
end;

procedure TFrmCard_LyCard.GetLyJe;
var
  Value1: integer;
begin
  //Value1:=Trim(CardSell_DataModule.ADOQuery4.FieldByName('卡片面值').AsString);
  //CardSell_DataModule.ADOQuery4.FieldByName('领用金额').AsFloat:=
  //CardSell_DataModule.ADOQuery4.FieldByName('领用数量').AsFloat*StrToFloat(Value1);
  Value1 := StrToInt(Trim(DBComboBox2.Text));
  if DBEdit7.Text = '' then
    DBEdit7.Text := '0';
  DBEdit8.Text := IntToStr(StrToInt(Trim(DBEdit7.Text)) * Value1);
end;

procedure TFrmCard_LyCard.DBComboBox2Change(Sender: TObject);
begin
  if Flag then
  begin
    if DBEdit7.Text = '' then
      DBEdit7.Text := '0';
    GetLyJe;
  end;
  Flag := True;
end;

procedure TFrmCard_LyCard.DBEdit6Enter(Sender: TObject);
begin
  GetLyJe;
end;

procedure  TFrmCard_LyCard.SetReadOnlyTrue;
begin
  DBEdit2.ReadOnly:=True;
  DBEdit5.ReadOnly:=True;
  DBEdit6.ReadOnly:=True;
  DBEdit7.ReadOnly:=True;
  DBEdit8.ReadOnly:=True;
  DBComboBox1.ReadOnly:=True;
  DBComboBox2.ReadOnly:=True;
end;
procedure  TFrmCard_LyCard.SetReadOnlyFalse;
begin
  DBEdit5.ReadOnly:=False;
  DBEdit6.ReadOnly:=False;
  DBEdit7.ReadOnly:=False;
  DBEdit8.ReadOnly:=False;
  DBComboBox1.ReadOnly:=False;
  DBComboBox2.ReadOnly:=False;
end;

procedure TFrmCard_LyCard.ADOQuery1AfterPost(DataSet: TDataSet);
var HintXx:String;
begin
  if not SuccessFlag then
  begin
    //DataSet.Cancel;
    Exit;
  end;
  With ADOQuery1 do
  begin
    HintXx:='领用卡成功!'+#13+#10;
    HintXx:=HintXx+'领用日期:  '+DateToStr(FieldByName('日期').AsDateTime)+#13+#10;
    HintXx:=HintXx+'发卡人:    '+FieldByName('发卡人').AsString+#13+#10;
    HintXx:=HintXx+'操作员姓名:   '+FieldByName('操作员姓名').AsString+#13+#10;
    HintXx:=HintXx+'卡片类型:   '+FieldByName('卡片类型').AsString+#13+#10;
    HintXx:=HintXx+'卡片面值:   '+FieldByName('卡片面值').AsString+#13+#10;
    HintXx:=HintXx+'售卡机编码: '+FieldByName('售卡机编码').AsString+#13+#10;
    HintXx:=HintXx+'领用数量:   '+FloatToStr(FieldByName('领用数量').AsFloat)+#13+#10;
    HintXx:=HintXx+'领用金额:   '+FloatToStr(FieldByName('领用金额').AsFloat)+#13+#10;
    Card_Result.SetWork(HintXx, '领用卡片结果信息');
  end;
end;

procedure TFrmCard_LyCard.ADOQuery1BeforePost(DataSet: TDataSet);
var MaxSl,SlLy:integer;
begin
  DataSet.Cancel;
  SuccessFlag:=True;
  SlLy:=StrToInt(FloatToStr(ADOQuery1.FieldByName('领用数量').AsFloat));
  ShowMessage(IntToStr(SlLy));
  if not GetMaxSl(MaxSl) then DataSet.Cancel;
  if SlLy>MaxSl then
  begin
    SuccessFlag:=False;
    //ADOQuery1.FieldByName('领用数量').AsFloat:=0;
    ShowMessage('领用数量超过了可以领用的最大数量'+IntToStr(MaxSl)+'!');
    //DBNavigator1.DataSource.DataSet.Cancel;
    Exit;
  end;
end;

function TFrmCard_LyCard.GetMaxSl(var MaxSl:integer):Boolean;
var
  CardValue,CardType:string;
  LyRq:TDate;
  IniSl,LySl:integer;
begin
  Result:=False;
  LyRq:=ADOQuery1.FieldByName('日期').AsDateTime;
  CardValue:=Trim(ADOQuery1.FieldByName('卡片面值').AsString);
  CardType:=Trim(ADOQuery1.FieldByName('卡片类型').AsString);
  MaxSl:=0;
  with ADOQuery2 do
  begin
    Close;
    Sql.Clear;
    Sql.Add('Select Count(*)');
    Sql.Add('From SCSJ_TSKXX Where');
    Sql.Add('卡片面值='''+Trim(CardValue)+'''');
    Sql.Add('And 卡片类型='''+Trim(CardType)+'''');
    Sql.Add('And Convert(char(10),日期,20)<=''' + DateToStr(LyRq) + '''');
    //Sql.SaveToFile('c:\aa.sql');
    try
      Open;
    except
      Screen.Cursor := crDefault;
      ShowMessage('无法浏览卡片初始化信息!');
      Exit;
    end;
    IniSl:=Fields[0].AsInteger;
    Close;
    Sql.Clear;
    Sql.Add('Select sum(领用数量)');
    Sql.Add('From SCSJ_TLYXX Where');
    Sql.Add('卡片面值='''+Trim(CardValue)+'''');
    Sql.Add('And 卡片类型='''+Trim(CardType)+'''');
    Sql.Add('And Convert(char(10),日期,20)<=''' + DateToStr(LyRq) + '''');
    try
      Open;
    except
      Screen.Cursor := crDefault;
      ShowMessage('无法浏览卡片初始化信息!');
      Exit;
    end;
    LySl:=Fields[0].AsInteger;
  end;
  MaxSl:=IniSl-LySl;
  if MaxSl<0 then MaxSl:=0;
  Result:=True;
end;
end.

⌨️ 快捷键说明

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