📄 pz_sjpz.pas
字号:
end;
while not Eof(ATextFile) do
begin
Readln(ATextFile, s);
ItemValue.Clear;
while Pos(',', s) > 0 do
begin
ItemValue.Add(Trim(Copy(s, 1, Pos(',', s) - 1)));
if ItemValue[ItemValue.Count - 1] = '' then
ItemValue[ItemValue.Count - 1] := 'null';
s := Trim(Copy(s, Pos(',', s) + 1, 100000));
end;
if lxbz = 3 then
begin
ItemValue.Add('2000-09-08');
ItemValue.Add('2001-08-28');
end;
if not InsertToDb(ItemValue, Selsql, Insql) then
Exit;
end;
CloseFile(ATextFile);
DeleteFile(FileName);
ItemValue.Free;
Result := True;
Screen.Cursor := crDefault;
end;
{------------------------设置来源文件的路径及相关语句-----------------------------------}
procedure TFrmPZ_Sjpz.Szxx(lxbz: integer; var lxh: integer; var FileName,
Delsql, Selsql, Insql: string);
begin
FileName := ExtractFilePath(Application.ExeName);
FileName := Copy(FileName, 1, Pos('bin', LowerCase(FileName)) - 1) + 'Data\';
Delsql := 'Delete From ';
Selsql := 'Select * From ';
Insql := 'Insert Into ';
case lxbz of
1:
begin {服务员}
FileName := FileName + 'fwy.txt';
lxh := 19;
Delsql := Delsql + 'PZXX_DFWY1';
Selsql := Selsql + 'PZXX_DFWY1 Order By 服务员编码';
Insql := Insql + 'PZXX_DFWY1';
end;
2:
begin {收款员}
FileName := FileName + 'sky.txt';
lxh := 21;
Delsql := Delsql + 'PZXX_DSKY1';
Selsql := Selsql + 'PZXX_DSKY1 Order By 收款员号';
Insql := Insql + 'PZXX_DSKY1';
end;
3:
begin {折扣信息}
FileName := FileName + 'zk.txt';
lxh := 13;
Delsql := Delsql + 'PZXX_DZKXX1';
Selsql := Selsql + 'PZXX_DZKXX1 Order By 折扣号';
Insql := Insql + 'PZXX_DZKXX1';
end;
4:
begin {交易方式}
FileName := FileName + 'jyfs.txt';
lxh := 17;
Delsql := Delsql + 'PZXX_DJYFS';
Selsql := Selsql + 'PZXX_DJYFS Order By 交易号';
Insql := Insql + 'PZXX_DJYFS';
end;
5:
begin {商品类别}
FileName := FileName + 'splb.txt';
lxh := 23;
Delsql := Delsql + 'PZXX_DSPLB1';
Selsql := Selsql + 'PZXX_DSPLB1 Order By 商品类别号';
Insql := Insql + 'PZXX_DSPLB1';
end;
6:
begin {商品信息}
FileName := FileName + 'spxx.txt';
lxh := 24;
Delsql := Delsql + 'PZXX_DSPXX1';
Selsql := Selsql + 'PZXX_DSPXX1 Order By 商品号';
Insql := Insql + 'PZXX_DSPXX1';
end;
7:
begin {柜组信息}
FileName := FileName + 'gz.txt';
lxh := 22;
Delsql := Delsql + 'PZXX_DGZXX1';
Selsql := Selsql + 'PZXX_DGZXX1 Order By 柜组号';
Insql := Insql + 'PZXX_DGZXX1';
end;
end;
end;
function TFrmPZ_Sjpz.OpenFile(TextFileName: string; JqNum, lxh: integer):
Boolean;
var
ReturnValue: integer;
begin
Result := False;
ReturnValue := ReadFromDll('D', Pchar(TextFileName), 0, 0, JqNum, lxh, 10,
10);
if ReturnValue <> -1 then
begin
Screen.Cursor := crDefault;
ShowMessage('读取收银机配置信息错误,系统无法继续工作!');
Exit;
end;
if not FileExists(TextFileName) then
begin
Screen.Cursor := crDefault;
ShowMessage('文件' + TextFileName + '不存在,系统无法继续工作');
Exit;
end;
Result := True;
end;
{--------------------------清除数据库中配置信息-------------------------------}
function TFrmPZ_Sjpz.EmptyPz(delsql: string): Boolean;
begin
Result := False;
with FrmCJ_DataModule.ADOQuery2 do
begin
Close;
Sql.Clear;
Sql.add(delsql);
try
ExecSQL;
except
Screen.Cursor := crDefault;
ShowMessage('删除数据库错误');
Exit;
end;
end;
Result := True;
end;
{---------------------向数据库中插入配置信息--------------------------------}
function TFrmPZ_Sjpz.InsertToDb(ItemValue: TStrings; Selsql, Insql: string):
Boolean;
var
s: string;
j: integer;
begin
Result := False;
with FrmCJ_DataModule.ADOQuery2 do
begin
Close;
Sql.Clear;
Sql.Add(Selsql);
try
Open;
except
Screen.Cursor := crDefault;
ShowMessage('读取数据库失败');
Exit;
end;
s := itemvalue[0];
for j := 1 to FieldCount - 1 do
if (Fields[j].DataType = ftstring) or (Fields[j].DataType = ftDateTime)
then
s := s + ',''' + itemvalue[j] + ''''
else
s := s + ',' + itemvalue[j];
Close;
Sql.Clear;
Sql.add(Insql + ' values(' + s + ')');
try
ExecSQL;
except
//ShowMessage(s);
Screen.Cursor := crDefault;
ShowMessage('向数据库中插入记录失败');
Exit;
end;
end;
Result := True;
end;
{------------------调用dll文件,采集配置及流水信息-----------------------}
function TFrmPZ_Sjpz.ReadFromDll(czlx: pchar; filename1: pchar;
WBaud: integer; Wport: smallint; Wmc: smallint; Wtype: smallint;
Wformx: smallint; Wformy: smallint): smallint;
type
TDllFunc = function(
Wcommand: pchar;
Wfname: pchar;
WBaud: integer;
Wport: smallint;
Wmc: smallint;
Wtype: smallint;
Wformx: smallint;
Wformy: smallint)
: smallint; stdcall;
var
alib: THandle;
proc: TDllFunc;
re: smallint;
PathName: string;
begin
PathName := ExtractFilePath(Application.ExeName) + 'xtinterface.dll';
try
alib := LoadLibrary(PChar(PathName));
if alib = 0 then
begin
ShowMessage('无法打开访问收款机的函数');
Screen.Cursor := crDefault;
Exit;
end;
proc := TDllFunc(GetProcAddress(alib, PChar('XtRun')));
if @proc = nil then
begin
ShowMessage('无法从收银机读取数据');
Screen.Cursor := crDefault;
Exit;
end
else
begin
re := proc(czlx, filename1, WBaud, Wport, Wmc, Wtype, Wformx, Wformy);
ReadFromDll := re;
end;
finally
proc := nil;
FreeLibrary(alib);
end;
Screen.Cursor := crDefault;
end;
{-------------------从文件中读取配置信息----------------------------}
procedure TFrmPZ_Sjpz.Button1Click(Sender: TObject);
begin
Button1Clicked := False;
Panel1.Visible := True;
if ComboBox3.Items.Count > 0 then
ComboBox3.ItemIndex := 0;
if ComboBox4.Items.Count > 0 then
ComboBox4.ItemIndex := 0;
{if not FromFileToDb(BzXx, 2) then
ShowMessage('从收银机读入信息失败!');
PzxxBrowse(Bzxx);
HideField(Bzxx);
}
end;
{------------------将数据库中信息写回配置文件----------------------}
procedure TFrmPZ_Sjpz.Button2Click(Sender: TObject);
begin
PublicUnit.WriteToHistroy('设备配置', Now, Time, '用户《' + FrmMain.UserName +
'》于服务器' + FrmMain.ServerName + '登陆本系统', FrmMain.UserName);
Button1Clicked := True;
Panel1.Visible := True;
if ComboBox3.Items.Count > 0 then
ComboBox3.ItemIndex := 0;
if ComboBox4.Items.Count > 0 then
ComboBox4.ItemIndex := 0;
//if not FileLx(BzXx, 2) then
// ShowMessage('更新收银机配置信息失败');
end;
{-----------------------获得数据字典名称----------------------------}
procedure TFrmPZ_Sjpz.GetDicXx(lxbz: integer; var DicName: string);
begin
case lxbz of
2: {收款员}
DicName := 'Dic_密码姓名';
4: {交易方式}
DicName := 'Dic_交易名称';
5: {商品类别}
DicName := 'Dic_商品类别名称';
6: {商品信息}
DicName := 'Dic_商品名称';
7: {柜组信息}
DicName := 'Dic_柜组名称';
end;
end;
{---------------------------生成数据字典----------------------------}
function TFrmPZ_Sjpz.GetDic(DicName: string): Boolean;
var
TemporaryTableNames: TStrings;
begin
Result := False;
TemporaryTableNames := TStringList.Create;
FrmCJ_DataModule.ADOConnection1.GetTableNames(TemporaryTableNames, False);
if TemporaryTableNames.IndexOf(Trim(DicName)) = -1 then
begin
if MessageDlg('没有字典,是否创建?', mtConfirmation, mbOKCancel, 0) =
mrCancel then
Exit;
with FrmCJ_DataModule.ADOQuery4 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;
Result := True;
end;
{---------------------------生成商品类别号数据字典----------------------------}
function TFrmPZ_Sjpz.GetDic1(DicName: string): Boolean;
var
TemporaryTableNames: TStrings;
begin
Result := False;
TemporaryTableNames := TStringList.Create;
FrmCJ_DataModule.ADOConnection1.GetTableNames(TemporaryTableNames, False);
if TemporaryTableNames.IndexOf(Trim(DicName)) = -1 then
begin
//if MessageDlg('没有字典,是否创建?', mtConfirmation, mbOKCancel, 0) = mrCancel then Exit;
with FrmCJ_DataModule.ADOQuery4 do
begin
Close;
Sql.Clear;
Sql.Add('Create Table ' + DicName);
Sql.Add('(ID varChar (50),DICTIONARY integer)');
try
ExecSql;
except
ShowMessage('error');
Exit;
end;
end;
end;
Result := True;
end;
{----------------------向数据字典中插入数据-------------------------------}
function TFrmPZ_Sjpz.InsertToDic(lxbz: integer; DicName: string): Boolean;
var
selsql, mc: string;
i: integer;
begin
Result := False;
if not DeleteFromDic(Trim(DicName)) then
Exit;
case lxbz of
1: selsql :=
'Select Distinct 服务员姓名,服务员编码 From PZXX_DFWY1 Order By 服务员编码';
2: selsql :=
'Select Distinct substring(密码姓名,5,20),收款员号 From PZXX_DSKY1 Order By 收款员号';
4: selsql :=
'Select Distinct 交易名称,交易号 From PZXX_DJYFS Order By 交易号';
5: selsql :=
'Select Distinct 商品类别名称,商品类别号 From PZXX_DSPLB1 Order By 商品类别号';
6: selsql :=
'Select Distinct 商品名称,商品号 From PZXX_DSPXX1 Order By 商品号';
7: selsql :=
'Select Distinct 柜组名称,柜组号 From PZXX_DGZXX1 Order By 柜组号';
end;
with FrmCJ_DataModule.ADOQuery4 do
begin
Close;
Sql.Clear;
Sql.Add(selsql);
try
Open;
except
ShowMessage('无法打开配置信息表');
Exit;
end;
if RecordCount = 0 then
Exit;
First;
i := 0;
while not Eof do
begin
mc := Trim(Fields[0].AsString);
i := i + 1;
with FrmCJ_DataModule.ADOQuery1 do
begin
Close;
Sql.Clear;
Sql.Add('Insert Into ' + Trim(DicName) + ' values (''' + IntToStr(i) +
''',''' + Trim(mc) + ''')');
try
ExecSql;
except
ShowMessage('向数据字典中插入数据错误!');
Exit;
end;
end;
next;
end;
end;
Result := True;
end;
{----------------------向商品类别号中插入数据-------------------------------}
function TFrmPZ_Sjpz.InsertToDic1(lxbz: integer; DicName: string): Boolean;
var
selsql, mc: string;
lbh: integer;
begin
Result := False;
if not DeleteFromDic(Trim(DicName)) then
Exit;
selsql :=
'Select Distinct 商品类别名称,商品类别号 From PZXX_DSPLB1 Order By 商品类别号';
with FrmCJ_DataModule.ADOQuery4 do
begin
Close;
Sql.Clear;
Sql.Add(selsql);
try
Open;
except
ShowMessage('无法打开配置信息表');
Exit;
end;
if RecordCount = 0 then
Exit;
First;
while not Eof do
begin
mc := Trim(Fields[0].AsString);
lbh := StrToInt(FloatToStr((Fields[1].AsFloat - 5001)));
with FrmCJ_DataModule.ADOQuery1 do
begin
Close;
Sql.Clear;
Sql.Add('Insert Into ' + Trim(DicName) + ' values (''' + Trim(mc) + ''','
+ IntToStr(lbh) + ')');
try
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -