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

📄 datamodule1.pas

📁 飞恒进销存,从盒子上下来的,不知这里有没有.
💻 PAS
📖 第 1 页 / 共 4 页
字号:
procedure TDataE2.EncodeHotel;
var
   fSys,fHotel:TextFile;
   s,sFileName:string;
   nLength,i:integer;
begin
   AssignFile(fSys,'\sxm\data\飞恒.TXT');
   Reset(fSys);
   Readln(fSys,s);
   closeFile(fSys);

   AssignFile(fHotel,s);
   Reset(fHotel);
   readln(fHotel,s);
   closeFile(fHotel);

   nLength:=length(s);
   for i:=1 to nlength do
      s[i]:=chr( ord(s[i])xor ord(CopyRight[i mod 22+1]) xor ord(Software[i mod 16+1]) xor (ord(Developer[i mod 30])+i*2+8));

   AssignFile(fSys,'\sxm\data\飞恒.sys');
   Reset(fSys);
   Readln(fSys,sFileName);
   closeFile(fSys);

   AssignFile(fHotel,sFilename);
   ReWrite(fHotel);
   writeln(fHotel,s);
   closeFile(fHotel);
end;

procedure TDataE2.DecodeOneHotel ;
var
   fSys,fHotel:TextFile;
   s:string;
   ch:char;
   i,n:integer;
begin
   s:='\sxm\data\飞恒软件.txt';
   if FileExists(s) then
     AssignFile(fSys,'\sxm\data\飞恒软件.txt')
   else
     AssignFile(fSys,'\sxm\data\飞恒.sys');

   Reset(fSys);
   Readln(fSys,s);
   Readln(fSys,HotelId);
   closeFile(fSys);

   AssignFile(fHotel,s);
   Reset(fHotel);
   i:=1;
   n:=1;
   s:='';
   while not eof(fHotel) do
   begin
      read(fHotel,ch);
      ch:=chr( ord(ch) xor ord(CopyRight[i mod 22+1]) xor ord(Software[i mod 16+1]) xor (ord(Developer[i mod 30])+i*2+8));
      //for demo
      //ch:=chr( ord(ch) xor ord(CopyRight[i mod 21+1]) xor ord(Software[i mod 15+1]) xor (ord(Developer[i mod 30])+i*2+7));
      if ch='/' then
      begin
        if n=1 then HotelName:=s;
        if n=2 then
        try
          InstallDate:=strTodate(s);
        except
        end;
        if n=3 then HotelSpe:=StrToint(s);
        s:='';
        inc(n);
      end
      else
       s:=s+ch;

      inc(i);
   end;

   closeFile(fHotel);
end;

function TDataE2.MacAddress: string;
var
Lib: Cardinal;
Func: function(GUID: PGUID): Longint; stdcall;
GUID1, GUID2: TGUID;
begin
Result := '';
Lib := LoadLibrary('rpcrt4.dll');
if Lib <> 0 then
begin
   @Func := GetProcAddress(Lib, 'UuidCreateSequential');
   if Assigned(Func) then
   begin 
     if (Func(@GUID1) = 0) and
        (Func(@GUID2) = 0) and 
        (GUID1.D4[2] = GUID2.D4[2]) and
        (GUID1.D4[3] = GUID2.D4[3]) and
        (GUID1.D4[4] = GUID2.D4[4]) and
        (GUID1.D4[5] = GUID2.D4[5]) and 
        (GUID1.D4[6] = GUID2.D4[6]) and 
        (GUID1.D4[7] = GUID2.D4[7]) then
     begin
       Result :=
         char(GUID1.D4[2]) +
         char(GUID1.D4[3]) +
         char(GUID1.D4[4]) +
         char(GUID1.D4[5]) +
         char(GUID1.D4[6]) +
         char(GUID1.D4[7]);
         //IntToHex(GUID1.D4[7], 2);
     end;
   end; 
end;
end;

function TDataE2.ReadRegistry:string;
var
  sRegCode,sHotelid,newEncodeKey:string;
  Registry: TRegistry;
begin
  try
    newEncodekey:=GetMacAddress(0);
    if newEncodekey='' then
      newEncodekey:=MacAddress;
    if newEncodekey='' then //2005-12-28
      newEncodekey:='00E04C600F95';

    sRegCode:=RegisterCode(SerialNo(EncodeString(hotelName,newEncodeKey)),hotelId);

    Registry:=TRegistry.Create;
    try
      //Registry.OpenKey('\Software\ODBC\ODBC.INI\myMRP',False);
      Registry.OpenKey('\Software\fhsoft\myMRP',true);
      case abs(HotelSpe) of
        1..9    :  sHotelId:=HotelId+'_HOTEL';
        100..999:  sHotelId:=HotelId+'_POS';
        else       sHotelId:=HotelId+'_MRP';
      end;
      result:=Registry.ReadString(sHotelId);
    finally
      Registry.Free;
    end;
  except
    on e:exception do
    Application.MessageBox(Pchar(E.Message),'提示',64);
  end;    
end;

function TDataE2.WriteRegistry:boolean;
var
  sRegCode,sHotelid:string;
  Registry: TRegistry;
begin
  result:=false;
  sRegCode:=RegisterCode(SerialNo(EncodeString(hotelName,#143#7#91#37)),hotelId);

  Registry:=TRegistry.Create;
  try
    //Registry.OpenKey('\Software\ODBC\ODBC.INI\myMRP',true); 2005-11-24 不写到ODBC里,另外创建一个键
    Registry.OpenKey('\Software\fhsoft\myMRP',true);
    case abs(HotelSpe) of
      1..9    :  sHotelId:=HotelId+'_HOTEL';
      100..999:  sHotelId:=HotelId+'_POS';
      else       sHotelId:=HotelId+'_MRP';
    end;
    Registry.WriteString(sHotelId,sRegCode);
    result:=true;
  finally
    Registry.CloseKey ;
    Registry.Free;
  end;
end;

//对客户名称进行变换
function TDataE2.EncodeString(mCusName,mKey:string):string;
var
  I, J: Integer;
  s:string;
begin
  J := 1;
  s:='';
  for I := 1 to Length(mCusName) do
  begin
    s := s + Char(Ord(mCusName[I]) xor Ord(mKey[J]));
    if J + 1 <= Length(mKey) then
      Inc(J)
    else
      J := 1;
  end;
  { 自己加步骤 }
  result:=s;
end; { StringEncrypt }

//生成序列号,最后只取8位
function TDataE2.SerialNo(mString: string): string;
var
  I,n,k,m: Integer;
  S: string;
begin
  Result := '';
  S := '';
  m:=0;
  for I := 1 to Length(mString) do
  begin
    n:= m+ord(mString[I]) ;
    k:= n div 7;
    case k of
      0..9   : n:=k +48;
      10..35 : n:=k + 55;
    else
      n:=50;
    end;
    S := S + chr(n);
    m:=( m + n ) or (m-n);
  end;
  Result := s;
end; { StringToDisplay }

//由序列号生成注册号: 前8位为序列号,后7位为加密号
function TDataE2.RegisterCode(mString,mCusNo: string): string;
var
  I,n,k,m,j: Integer;
  S,ch: string;
begin
  Result := '';
  s:='';
  j:=1;
  for I:=1 to 8 do
  begin
    s := s + Char(Ord(mString[I]) xor (Ord(mCusNo[J])* Ord(mCusNo[3]) +1) );
    if J + 1 <= Length(mCusNo) then
      Inc(J)
    else
      J := 1;
  end;

  ch:=s;
  S := '';
  m:=0;
  for I := 1 to 7 do
  begin
    n:= m+ord( ord(mString[I]) xor ord(ch[8-I]) xor ord(ch[I])  ) ;
    k:= n div 7;
    case k of
      0..9   : n:=k +48;
      10..35 : n:=k + 55;
    else
      n:=53;
    end;
    S := S + chr(n);
    m:=( m + n ) or ( m - n   ) ;
  end;
  Result := copy(mString,1,5)+'-'+copy(mstring,6,3) + copy(s,1,2)+'-'+copy(s,3,5);
end; { StringToDisplay }

function TDataE2.GetWindowsPlatFormId:integer;
var
  OS: TOSVersionInfo;
  PlatformId: Dword;
{  function Plat(Pl: DWORD): string;
  begin
    case Pl of
      VER_PLATFORM_WIN32s: result := 'Win32s on Windows 3.1x';
      VER_PLATFORM_WIN32_WINDOWS: result := 'Windows 95/98/ME';
      VER_PLATFORM_WIN32_NT:   result := 'Windows NT/2000/XP';
    else
      result := 'Windows';
    end;
  end;}
begin
  PlatformId := 0;
  try
  with OS do
  begin
      dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
      if GetVersionEx(OS) then
      begin
        PlatformId := 0;//dwPlatformId;
        if dwPlatFormid =  VER_PLATFORM_WIN32_NT then
         if  (dwMajorVersion = 5 )and (dwMinorVersion = 1 ) then
          platformId:=1; //xp
      end;
  end; //Os
  except
  end;
  result:=PlatFormId;
end;

Function TDataE2.checkPrimaryKey(Tablename,FieldValue,sValue:string):boolean;
begin
  with ADOQuery1 do
  begin
    //查询FieldValue是否己存在
    close;
    sql.Clear ;
    sql.Add('select '+FieldValue+' from '+Tablename+' where '+FieldValue+' = :'+FieldValue);
    parameters[0].value:=sValue;
    open;
    result:=not eof;
  end;
end;

Function TDataE2.GetComputname:string;
var
  name:PChar;
  len:dword;
begin
  len:=30;
  getmem(name,30); //建立一指定大小的动态变量,并将指针指向该处
  getcomputername(name,len);
  result:=name;
end;


procedure TDataE2.ShowAdoError;
var
  sInfo:string;
  adoErrors:Errors;
  adoErr:Error;
  iCount:integer;
begin
  sInfo:='';
  adoErrors:=AdoConStore.Errors ;
  for iCount:=0 to adoErrors.count-1 do
  begin
    adoErr:=adoErrors.item[iCount];
    sInfo:=sInfo+'错误号: '+intTostr(adoErr.number)+chr(13);
    sInfo:=sInfo+'代码  : '+adoErr.source+chr(13);
    sInfo:=sInfo+'说明  : '+adoErr.description+chr(13);
    sInfo:=sInfo+'状态  : '+adoErr.sqlstate+chr(13);
  end;
  application.MessageBox(pchar(sInfo),'错误',MB_OK+MB_ICONINFORMATION);
end;

procedure TDataE2.tblGoodsNewRecord(DataSet: TDataSet);
begin
  tblGoods.FieldByName('perqty').AsInteger:=1
end;

procedure TDataE2.tblGoodsAfterScroll(DataSet: TDataSet);
begin
  if QuerySum.active then QuerySum.close;
  querySum.sql.clear;
  QuerySum.sql.Add('select o.*,s.name from onhand o,store s where o.goodsid= :goodsid and o.storeid=s.storeid');
  QuerySum.parameters[0].Value:=tblGoods.fieldbyname('goodsid').asinteger;
  QuerySum.open;
end;


procedure TDataE2.tblBankBeforePost(DataSet: TDataSet);
begin
  if tblBank.State = dsInsert then
    tblBank.FieldByName('Amount').AsCurrency:=tblBank.FieldByName('FirstAmount').AsCurrency;
  if tblBank.State = dsEdit then
    tblBank.FieldByName('Amount').AsCurrency:=tblBank.FieldByName('Amount').AsCurrency-nAmtStart+tblBank.FieldByName('FirstAmount').AsCurrency;
end;

procedure TDataE2.tblBankBeforeEdit(DataSet: TDataSet);
begin
  nAmtStart:=tblBank.FieldByName('FirstAmount').AsCurrency;
end;

procedure TDataE2.tblClientBeforePost(DataSet: TDataSet);
begin
  if tblClient.State = dsInsert then
    tblClient.FieldByName('BALANCE').AsCurrency:=tblClient.FieldByName('BALANCEAMT').AsCurrency;
  if tblClient.State = dsEdit then
    tblClient.FieldByName('BALANCE').AsCurrency:=tblClient.FieldByName('BALANCE').AsCurrency-nAmtStart+tblClient.FieldByName('BALANCEAMT').AsCurrency;
end;

procedure TDataE2.tblClientBeforeEdit(DataSet: TDataSet);
begin
  nAmtStart:=tblClient.FieldByName('BALANCEAMT').AsCurrency;
end;

procedure TDataE2.TblvendorBeforeEdit(DataSet: TDataSet);
begin
  nAmtStart:=Tblvendor.FieldByName('BALANCEAMT').AsCurrency;
end;

procedure TDataE2.TblvendorBeforePost(DataSet: TDataSet);
begin
  if Tblvendor.State = dsInsert then
    Tblvendor.FieldByName('BALANCE').AsCurrency:=Tblvendor.FieldByName('BALANCEAMT').AsCurrency;
  if Tblvendor.State = dsEdit then
    Tblvendor.FieldByName('BALANCE').AsCurrency:=Tblvendor.FieldByName('BALANCE').AsCurrency-nAmtStart+Tblvendor.FieldByName('BALANCEAMT').AsCurrency;
end;

function TDataE2.GetMacAddress(index: integer): string;
var
  ncb : TNCB; //NetBios控制块
  AdapterS : TAdapterStatus; //网卡状态结构
  LanaNum : TLanaeNum; //Netbios Lana
  i: integer;
  rc : Char; //NetBios的返回代码
  str : String;
begin
  Result := '';
  try
    ZeroMemory(@ncb, SizeOf(ncb)); //NetBios控制块清零
    ncb.ncb_command := chr(NCBENUM); //ENUM
    rc := NetBios(@ncb); //取返回代码

    ncb.ncb_buffer := @LanaNum; //再一次处理ENUM命令
    ncb.ncb_length := Sizeof(LanaNum);
    rc := NetBios(@ncb); //取返回代码

    if ord(rc)<>0 then
    exit;

    ZeroMemory(@ncb, Sizeof(ncb)); //NetBios控制块清零
    ncb.ncb_command := chr(NCBRESET);
    ncb.ncb_lana_num := LanaNum.lana[index];
    rc := NetBios(@ncb);
    if ord(rc)<>0 then
    exit;
    //取网卡的状态
    ZeroMemory(@ncb, Sizeof(ncb));
    ncb.ncb_command := chr(NCBASTAT);
    ncb.ncb_lana_num := LanaNum.lana[index];
    StrPCopy(ncb.ncb_callname,'*');
    ncb.ncb_buffer := @AdapterS;
    ncb.ncb_length := SizeOf(AdapterS);
    rc := NetBios(@ncb);
    //将MAC地址转换成字符串
    str := '';
    for i:=0 to 5 do
    //str := str + IntToHex(Integer(AdapterS.adapter_address[i]),2);  改用下面的语句,不然注册有错。
    str := str + char(Integer(AdapterS.adapter_address[i]));
    Result := str;
  finally
  end;
end;

procedure TDataE2.QueryRptAfterScroll(DataSet: TDataSet);
begin
  if gTableid=89 then
  begin
    if QueryTmp.active then QueryTmp.Close;
    QueryTmp.sql.clear;
    QueryTmp.sql.add('select a.Units,a.qty,a.price,b.code,b.name from o_outstored a');
    QueryTmp.sql.add('left outer join goods b on a.goodsid=b.goodsid');
    QueryTmp.sql.add('where a.billid=:billid');
    QueryTmp.Parameters[0].Value:=QueryRpt.FieldByName('Billid').AsInteger;
    QueryTmp.Open;
  end;
end;

end.

⌨️ 快捷键说明

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