📄 card_lycard.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 + -