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

📄 card_sellcard.pas

📁 亚惠快餐管理信息系统 包括亚惠快餐管理的各项功能
💻 PAS
📖 第 1 页 / 共 3 页
字号:
  IcKh, MachineNo, CardStatus, CzyName,CardNo: string;
  MaxNum:integer;
begin
  if MessageDlg('此操作将会清除卡片信息表中的数据,是否继续?',
    mtconfirmation, mbokcancel, 0) = mrcancel then
    Exit;
  {删除记录时确保卡片在读写器中}
  if not ReadKh(CardNo, Comhm, Pchar(PassWord1)) then
  begin
    ShowMessage('请插入卡片!');
    Exit;
  end;
  CardNo:=Trim(CardNo);
  if not FindNeareastRecord(CardNo,MaxNum) then Exit;
  if MaxNum=-100 then Exit;
  if ((CardSell_DataModule.ADOQuery2.FieldByName('序号').AsInteger<>MaxNum) or
  (CardSell_DataModule.ADOQuery2.FieldByName('IC卡号').AsString <>Trim(CardNo))) then
  begin
    ShowMessage('此条记录不是最新插入的,系统无法删除该记录!');
    Exit;
  end;
  with CardSell_DataModule.ADOQuery2 do
  begin
    rq := StrToDate(DateTimeToStr(Fields[0].AsDateTime));
    IcKh := (Fields[1].AsString);
    MachineNo := (Fields[10].AsString);
    CardStatus := Trim(Fields[7].AsString);
    CzyName := Trim(Fields[9].AsString);
  end;
  if not DeleteFromDB(rq, IcKh, MachineNo, CardStatus, CzyName) then
  begin
    ShowMessage('删除售卡信息表失败!');
    Exit;
  end;
  if not DeleteFromSubDB(rq, IcKh, MachineNo, Cardstatus, CzyName) then
  begin
    ShowMessage('删除售卡信息子表失败');
    Exit;
  end;
  //加入将卡恢复到操作前的状态
  //returnvalue:=ReadFromDll('intialize',comh,pass);
  //清除有效期和余额
  //returnvalue:=ReadFromDll('clear',comh,pass);
  ToolButton2.Enabled:=False;
  ScanData;
end;
//从文件中读取卡号信息

function TFrmCard_SellCard.ReadKh(var CardNo: string; comh: smallint; pass:
  Pchar): Boolean;
var
  returnvalue: smallint;
  AFileName, s: string;
  ATextFile: Textfile;
begin
  Result := False;
  returnvalue := ReadFromDll('readcardno', comh, pass);
  if returnvalue <> 0 then
  begin
    Screen.Cursor := crDefault;
    ShowMessage('读取卡号错误!');
    Exit;
  end;
  AFileName := Trim('c:\windows\cardno.txt');
  if not FileExists(AFileName) then
  begin
    Screen.Cursor := crDefault;
    ShowMessage('卡号信息文件' + AFileName + '不存在,系统无法继续工作!');
    Exit;
  end;
  AssignFile(ATextFile, AFileName);
  try
    ReSet(ATextFile);
  except
    Screen.Cursor := crDefault;
    ShowMessage('卡号信息文件' + AFileName + '受到破坏,系统无法继续工作!');
    CloseFile(ATextFile);
    Exit;
  end;
  while not Eof(ATextFile) do
    Readln(ATextFile, s);
  CloseFile(ATextFile);
  s := Trim(s);
  if s='FFFFFFFF' then
  begin
    ShowMessage('卡片插反了,请正确插入卡片!');
    Exit;
  end;
  {while Copy(s, 1, 1) = '0' do
    s := Trim(Copy(s, 2, 10000000));}
  CardNo := Trim(s);
  Result := True;
end;

function TFrmCard_SellCard.ReadXx(CardNo: string; Rq: TDate): Boolean;
var
  CardStatus: string;
begin
  CardStatus := '未使用';
  Result := False;
  with CardSell_DataModule.ADOQuery3 do
  begin
    Close;
    Sql.Clear;
    Sql.Add('Select top 1 卡片类型,卡片面值,押金,存款金额');
    Sql.Add('From SCSJ_TSKXX Where 卡片状态=''' + Trim(CardStatus) + '''');
    Sql.Add('And Convert(char(10),日期,20)<=''' + DateToStr(Rq) + '''');
    Sql.Add('And IC卡号=''' + Trim(CardNo) + '''');
    Sql.Add('Order by 序号 DESC');
    try
      Open;
    except
      Screen.Cursor := crDefault;
      ShowMessage('无法浏览卡片初始化信息!');
      Exit;
    end;
    if RecordCount = 0 then
    begin
      Screen.Cursor := crDefault;
      ShowMessage('此卡未初始化!');
      Exit;
    end;
    CardSell_DataModule.ADOQuery2.FieldByName('卡片类型').AsString :=
      Trim(Fields[0].AsString);
    CardSell_DataModule.ADOQuery2.FieldByName('卡片面值').AsString :=
      Trim(Fields[1].AsString);
    CardSell_DataModule.ADOQuery2.FieldByName('押金').AsFloat :=
      Fields[2].AsFloat;
    CardSell_DataModule.ADOQuery2.FieldByName('存款金额').AsFloat :=
      Fields[3].AsFloat;
  end;
  Result := True;
end;

procedure TFrmCard_SellCard.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_SellCard.DBEdit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ((Sender is TDBEdit) and (Key = VK_RETURN)) then
  begin
    if TDBEdit(Sender).TabOrder = 12 then
    begin
      if TDBEdit(Sender).DataSource.DataSet <> nil then
        with TDBEdit(Sender).DataSource.DataSet do
        begin
          Next;
          DBEdit1.SetFocus;
          if EOF and CanModify then
            Append;
        end;
    end
    else
      perform(WM_NEXTDLGCTL, 0, 0);
  end;
end;

procedure TFrmCard_SellCard.BitBtn3Click(Sender: TObject);
begin
  Close;
end;

procedure TFrmCard_SellCard.DBEdit1Exit(Sender: TObject);
begin
  if DBEdit1.DataSource.DataSet.State in [dsEdit, dsInsert] = False then
    Exit;
  CardSell_DataModule.ADOQuery2.FieldByName('操作员姓名').AsString :=
    Trim(FrmMain.UserName);
  CardSell_DataModule.ADOQuery2.FieldByName('卡片状态').AsString := '使用';
end;

procedure TFrmCard_SellCard.DBEdit2Exit(Sender: TObject);
var
  CardNo: string;
  Rq: TDate;
  pass: PChar;
begin
  if DBEdit1.DataSource.DataSet.State in [dsEdit, dsInsert] = False then
    Exit;
  if TEdit(Sender).Text = '' then
  begin
    ShowMessage(TEdit(Sender).Hint + '字段不能为空!');
    TEdit(Sender).SetFocus;
    Exit;
  end;
  if TEdit(Sender).Tag = 2 then
  begin
    Screen.Cursor := crHourGlass;
    pass := Pchar(PassWord1);
    if not ReadKh(CardNo, Comhm, pass) then
      Exit;
    CardSell_DataModule.ADOQuery2.FieldByName('IC卡号').AsString :=
      Trim(CardNo);
    Rq :=
      StrToDate(DateTimeToStr(CardSell_DataModule.ADOQuery2.FieldByName('日期').AsDateTime));
    if not ReadXx(CardNo, Rq) then
      Exit;
    DBEdit4.SetFocus;
    Screen.Cursor := crDefault;
  end;
end;

procedure TFrmCard_SellCard.GetIniValue;
var
  ti: TInifile;
  MachineNo, CardNo: string;
  Rq: TDate;
  ValDayNum: integer;
begin
  Screen.Cursor := crHourGlass;
  OldCardFlag := False;
  PublicUnit.IsErrorFlag := False;
  CardSell_DataModule.ADOQuery2.FieldByName('日期').AsDateTime := Date;
  CardSell_DataModule.ADOQuery2.FieldByName('操作员姓名').AsString :=
    Trim(FrmMain.UserName);
  CardSell_DataModule.ADOQuery2.FieldByName('卡片状态').AsString := '使用';
  ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'System.ini');
  MachineNo := ti.ReadString('默认选项', 'MachineNo', '2');
  ValDayNum := ti.ReadInteger('默认选项', 'ValDayNum', 5);
  CardSell_DataModule.ADOQuery2.FieldByName('售卡机编码').AsString :=
    Trim(MachineNo);
  CardSell_DataModule.ADOQuery2.FieldByName('有效天数').AsInteger := ValDayNum;
  Comhm := ti.ReadInteger('默认选项', 'Port', 0);
  PassWord1 := ti.ReadString('默认选项', 'Mima', '555555');
  PassWord1 := UnEncryFunc(Trim(PassWord1));
  if not ReadKh(CardNo, Comhm, Pchar(PassWord1)) then
  begin
    PublicUnit.IsErrorFlag := True;
    DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast, nbInsert,
    nbCancel];
    DBNavigator1.DataSource.DataSet.Cancel;
    Exit;
  end;
  if CardNo <> '00000000' then
    OldCardFlag := True;
  CardSell_DataModule.ADOQuery2.FieldByName('IC卡号').AsString := Trim(CardNo);
  Rq :=
    StrToDate(DateTimeToStr(CardSell_DataModule.ADOQuery2.FieldByName('日期').AsDateTime));
  if not ReadXx(CardNo, Rq) then
  begin
    PublicUnit.IsErrorFlag := True;
    DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast, nbInsert,
     nbCancel];
    DBNavigator1.DataSource.DataSet.Cancel;
    Exit;
  end;
  DBEdit4.SetFocus;
  Screen.Cursor := crDefault;
  ToolButton1.Enabled := True;
  ti.Free;
end;

procedure TFrmCard_SellCard.SetValue;
var
  ti: TInifile;
  MachineNo: string;
  ValDayNum: integer;
begin
  ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'System.ini');
  MachineNo :=
    Trim(CardSell_DataModule.ADOQuery2.FieldByName('售卡机编码').AsString);
  ti.WriteString('默认选项', 'MachineNo', MachineNo);
  ValDayNum := CardSell_DataModule.ADOQuery2.FieldByName('有效天数').AsInteger;
  ti.WriteString('默认选项', 'MachineNo', MachineNo);
  ti.WriteInteger('默认选项', 'ValDayNum', ValDayNum);
  ti.Free;
end;

procedure TFrmCard_SellCard.DBNavigator1Click(Sender: TObject;
  Button: TNavigateBtn);
begin
  if Button = nbInsert then
  begin
    DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast,
      nbCancel];
    ToolButton1.Enabled := False;
    ToolButton2.Enabled := False;
    GetIniValue;
  end;
  if Button=nbCancel then
  begin
    ToolButton1.Enabled := False;
    ToolButton2.Enabled := False;
  end;
end;

procedure TFrmCard_SellCard.BitBtn4Click(Sender: TObject);
begin
  SetValue;
end;

procedure TFrmCard_SellCard.DBEdit4DblClick(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;

end.

⌨️ 快捷键说明

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