亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sp_utils.~pas

?? 通過網關發手機短信
?? ~PAS
字號:
unit SP_Utils;

interface
uses
  SysUtils, Classes,  Controls, Menus, Windows, DB, DBClient,
  Variants, Provider, TypInfo, ExtCtrls, Tabs, ComCtrls, ActiveX;

procedure EnablePanelEx(APanel: TWinControl; AEnable: boolean; ANegClasses: array of TClass);
procedure EnablePanel(APanel: TWinControl; AEnable: boolean);

function cp(s: string): string;
function DatasetToCdsData2(ADataset: TDataset): OleVariant;
procedure IncStr(var s: string);
function Equa(v1, v2: Variant): boolean;
function ValueIn(AValue: Variant; AValueSet: array of Variant): boolean;
function StrInArray(AStr, AStrList: string): boolean;
function FieldIsNull(AField1, AField2: TField): TField;
function CheckFilterWordInSQL(ASQL: string; ARaise: boolean = false): boolean;

function StreamToOleVar(AStream: TStream): OleVariant;
procedure OleVarToStream(AValue: OleVariant; AStream: TStream);
procedure OleVarToBlob(AValue: OleVariant; AField: TBlobField);
function BlobToOleVar(AField: TBlobField): OleVariant;
procedure SlitOleVar(AValue: OleVariant; var ASize: integer; var AResult: OleVariant);
procedure DefFieldByObj(ADataset: TDataset; APropObj: TPersistent; AStrLen: integer = 200);
procedure FillRecordFromObj(AObj: TPersistent; ADataset: TDataset);
procedure FillObjFromRecord(AObj: TPersistent; AData: TDataset; AIgnFields: string = '');
function QtStringSeries(s: string): string;
function GetLinceseNo: string;
procedure UpdateFieldValues(AField: TField; AValue: Variant);
function GetDispFromDataset(AValue: variant; AKeyField, ADispField: TField): string;

function NC(s: string): string;
procedure DatasetToCdsData(ADataset: TDataset; var AData: OleVariant);

implementation
uses SelfFunc;

procedure DatasetToCdsData(ADataset: TDataset; var AData: OleVariant);
var
  cds: TClientDataset;
  prd: TDatasetProvider;
begin
  cds := TClientDataset.Create(nil);
  prd := TDatasetProvider.Create(nil);
  try
    ADataset.Open;
    ADataset.First;   //對于TkbmMemtable,如果不執行First有時只能返回一條記錄
    prd.DataSet := ADataset;
    cds.SetProvider(prd);
    cds.Open;
    AData := cds.Data;
  finally
    cds.Free;
    prd.Free;
  end;
end;

function NC(s: string): string;
begin
  Result := 'N' + cp(s);
end;

function QtStringSeries(s: string): string;
begin
  Result := StringReplace(s, ',', cp(','), [rfReplaceAll]);
  Result := #39 +Result + #39;
end;

function GetDispFromDataset(AValue: variant; AKeyField, ADispField: TField): string;
begin
  Result := '';
  if AKeyField.DataSet.Locate(AKeyField.FieldName, AValue, []) then
    Result := ADispField.AsString;
end;

procedure EnablePanelEx(APanel: TWinControl; AEnable: boolean; ANegClasses: array of TClass);
var
  i: integer;

  function _IsNegClass(AObject: TObject): boolean;
  var
    ii: integer;
    const
      AInnerNegs: array[0..1]of TClass = (TTabSheet, TPanel);
  begin
    Result := false;

    for ii := Low(AInnerNegs) to High(AInnerNegs) do
    if AObject is AInnerNegs[ii] then
    begin
      Result := true;
      Exit;
    end;

    if Length(ANegClasses) > 0 then
    for ii := Low(ANegClasses) to High(ANegClasses) do
    if AObject is ANegClasses[ii] then
    begin
      Result := true;
      Break;
    end;
  end;

begin
  for i := 0 to APanel.ControlCount - 1 do
  begin
    with TControl(APanel.Controls[i]) do
    begin
      if not _IsNegClass(APanel.Controls[i]) then
         Enabled := AEnable;
    end;
    if APanel.Controls[i] is TWinControl then
      EnablePanelEx(TWinControl(APanel.Controls[i]), AEnable, ANegClasses);
  end;
end;

procedure EnablePanel(APanel: TWinControl; AEnable: boolean);
begin
  EnablePanelEx(APanel, AEnable, []);
end;

procedure IncStr(var s: string);
var
  i: integer;
begin
  i := length(s);
  while (Ord(s[i]) >= 90) and (i > 1) do
  begin
    s[i] := '0';
    dec(i);
  end;
  inc(s[i]);
  while not (s[i] in (['0'..'9'] + ['A'..'Z'])) do inc(s[i]);
end;


function cp(s: string): string;
begin
  Result := QuotedStr(s);
end;

function Equa(v1, v2: Variant): boolean;
var
  s1, s2: string;
begin
  if VarIsNull(v1) then
    s1 := '' else s1 := v1;
  if VarIsNull(v2) then
    s2 := '' else s2 := v2;
  Result := (AnsiCompareText(s1, s2) = 0);
end;

function ValueIn(AValue: Variant; AValueSet: array of Variant): boolean;
var
  i: integer;
begin
  Result := false;
  for i := Low(AValueSet) to High(AValueSet) do
  begin
    Result := Equa(AValue, AValueSet[i]);
    if Result then
      Break;
  end;
end;

type
   TVarSize = record
     case AType: boolean of
      true:
        (Bytes: array[0..3] of Byte);
      false:
        (Value: integer);
    end;

procedure DefFieldByObj(ADataset: TDataset; APropObj: TPersistent;
   AStrLen: integer);
var
  pl: PPropList;
  i: integer;
  sProp, sPropAlias: string;
  ft: TFieldType;
  n, len: integer;
  t: TPersistent;
  AFieldDef: TFieldDef;
begin
//  New(pl);
  t := APropObj;
  n := TypInfo.GetPropList(t , pl);
  try
    ADataset.Close;
    ADataset.FieldDefs.Clear;
    for i := 0 to n  -1 do
    with ADataset.FieldDefs do
    begin
      sProp := pl[i]^.Name;
      if Length(sProp) > 31 then
        sProp := Copy(sProp, 1, 31);
      case pl[i]^.PropType^.Kind of
        tkInteger: ft := ftInteger;
        tkString:  ft := ftString;
        tkFloat:   ft := ftFloat;
        tkVariant: ft := ftVariant;
      else         ft := ftString;
    end;
    if ft = ftString then
      len := AStrLen
    else len := 0;
      if AnsiCompareText(pl[i]^.PropType^.Name, 'Boolean') = 0 then
      begin
        ft := ftBoolean;
        len := 0;
      end;

      if AnsiCompareText(pl[i]^.PropType^.Name, 'TDateTime') = 0 then
      begin
        ft := ftDateTime;
        len := 0;
      end;

      if AnsiCompareText(pl[i]^.PropType^.Name, 'TDate') = 0 then
      begin
        ft := ftDate;
        len := 0;
      end;

      Add(sProp, ft, len);
    end;
    ADataset.Open;
  finally
    FreeMemory(pl);
  end;
end;

procedure FillObjFromRecord(AObj: TPersistent; AData: TDataset; AIgnFields: string = '');
var
  i: integer;
begin
 AIgnFields := ',' + AIgnFields + ',';
  with AData do
  begin
    for i := 0 to Fields.Count - 1 do
    if not Fields[i].IsNull then
    if pos(',' + Fields[i].FieldName + ',', AIgnFields) <= 0 then    
    if TypInfo.GetPropInfo(AObj, Fields[i].FieldName) <> nil then
    begin
      try
        SetPropValue(AObj, Fields[i].FieldName, Fields[i].Value);
      except
      end;
    end;
  end;
end;

procedure FillRecordFromObj(AObj: TPersistent; ADataset: TDataset);
var
  i: integer;
begin
  with ADataset do
  begin
    Edit;
    for i := 0 to Fields.Count - 1 do
    if TypInfo.GetPropInfo(AObj, Fields[i].FieldName) <> nil then
    begin
      try
        Fields[i].Value := GetPropValue(AObj, Fields[i].FieldName);
      except
      end;
    end;
  end;
end;

procedure UpdateFieldValues(AField: TField; AValue: Variant);
var
  bk: TBookMark;
begin
  with AField.DataSet do
  begin
    bk := GetBookMark();
    DisableControls;
    try
      First;
      while not Eof do
      begin
        Edit;
        AField.Value := AValue;
        Post;
        Next;
      end;
    finally
      GotoBookMark(bk);
      FreeBookMark(bk);
      Enablecontrols;
    end;
  end;
end;

procedure SlitOleVar(AValue: OleVariant; var ASize: integer; var AResult: OleVariant);
var
  i: integer;
  b: Byte;
  VarSize: TVarSize;
begin
  ASize := 0;
  AResult := Null;
  if AValue = Null then
    Exit;
  try
    VarSize.AType := true;
    for i := 0 to 3 do
      VarSize.Bytes[i] := AValue[i];
    VarSize.AType := false;
    ASize := VarSize.Value;

   if ASize = 0 then
     Exit;

   AResult := VarArrayCreate([0, ASize - 1], varByte);
    for i := 0 to ASize - 1 do
      AResult[i] := AValue[i + 4];

  except
    ASize := 0;
  end;
end;

procedure OleVarToStream(AValue: OleVariant; AStream: TStream);
var
  st: TStream;
  pc: PChar;
  i, ASize: integer;
  b, n: Byte;
begin
  if VarIsNull(AValue) then
    Exit;
  st := AStream;
  pc := TVarData(AValue).VArray.Data;
  ASize := TVarData(AValue).VArray.ElementSize *
    TVarData(AValue).VArray.Bounds[0].ElementCount;
  st.Write(pc[0], ASize);
//  raise exception.Create(inttostr(vararrayhighbound(AValue, 1)));
  {
  GetMem(pc, ASize);
  ASize := VarArrayHighBound(AValue, 1) + 1;
  try
    for i := 0 to ASize - 1 do
    begin
      b := AValue[i];
      pc[i] := Chr(b);
    end;

    st.Write(pc[0], ASize);

  finally
    FreeMem(pc);
  end;
  }
end;

procedure OleVarToBlob(AValue: OleVariant; AField: TBlobField);
var
  st: TStream;
  b, n: Byte;
begin
  AField.DataSet.Edit;
  if VarIsNull(AValue) then
  begin
    AField.AsVariant := AValue;
    Exit;
  end;
  try
    st := TMemoryStream.Create;
    OleVarToStream(AValue, st);
    st.Position := 0;
    AField.LoadFromStream(st);
    n := (st.Size);
  finally
    st.Free;
  end;
end;

function StreamToOleVar(AStream: TStream): OleVariant;
var
  st: TStream;
  pc: PChar;
  i, ASize: integer;
  VarSize: TVarSize;
  v: OleVariant;
begin
  st := AStream;
  if st.Size <= 0 then
  begin
    Result := Null;
    Exit;
  end;
  ASize := st.Size;
  st.Position := 0;
  Result := VarArrayCreate([0, ASize -1], varByte);
  pc := TVarData(Result).VArray.Data;
  st.Read(pc[0], ASize);


 { GetMem(pc, ASize);
  try
    st.Position := 0;
    st.Read(pc[0], ASize);
    Result := VarArrayCreate([0, ASize -1], varByte);
    for i := 0 to ASize - 1 do
      Result[i] := Byte(pc[i]);


  finally
    FreeMem(pc);
  end;
 }
end;

function BlobToOleVar(AField: TBlobField): OleVariant;
var
  st: TStream;
begin
  Result := Null;
  if AField.IsNull then
    Exit;
  st := TMemoryStream.Create;
  AField.SaveToStream(st);
  try
    Result := StreamToOleVar(st);
  finally
    st.Free;
  end;
end;

function CheckFilterWordInSQL(ASQL: string; ARaise: boolean = false): boolean;
const
   AMax = 3;
   AFilters: array[0..AMax - 1] of string = ('Drop', 'Delete', 'Truncate');
var
   i, n: integer;
   st: TStrings;
   ADisWord: string;
begin
  Result := false;
  ASQL := Uppercase(ASQL);
  ADisWord := '';
  for i := 0 to AMax - 1 do
  begin
    n := Pos(Uppercase(AFilters[i]), ASQL);
    if n > 0 then
    begin
      Result := true;
      Break;
    end;
  end;
  if not Result then
    Exit;
  Result := false;
  st := TStringList.Create;
  try
    st.Delimiter := ' ';
    st.DelimitedText := ASQL;
    for i := 0 to AMax - 1 do
      if st.IndexOf(Uppercase(AFilters[i])) <> -1 then
      begin
        Result := true;
        ADisWord := AFilters[i];
        Break;
      end;
    finally
      st.Free;
    end;
  if Result and ARaise then
    raise Exception.Create('SQL語句中包含可能導致危險操作的關鍵字:'+ ADisWord);
end;

function DatasetToCdsData2(ADataset: TDataset): OleVariant;
var
  cds: TClientDataset;
  prd: TDatasetProvider;
begin
  cds := TClientDataset.Create(nil);
  prd := TDatasetProvider.Create(nil);
  try
    ADataset.First;
    prd.DataSet := ADataset;
    cds.SetProvider(prd);
    cds.Open;
    Result := cds.Data;
  finally
    cds.Free;
    prd.Free;
  end;
end;

function GetLinceseNo: string;
var
  dwIDESerial, dExt, n: DWORD;
  d1, d2, d3, d4: CARDINAL;
  sMachName: string;
  i: integer;
begin
  dwIDESerial := 0;
  GetVolumeInformation('C:\', nil, d1, @dwIDESerial, d2, d3, nil, d4);
  dExt := $AC6B785A;
  n := $8184D289;
  sMachName := GetMachineName;
  for i := 1 to Length(sMachName) do
    n := n + Ord(sMachName[i]);
  n := n shl (n mod 24);
  dwIDESerial := dwIDESerial xor n;
  dExt := dExt or n;
  Result := inttohex(dwIDESerial , 8) + '-' + inttohex(dExt, 8);
end;

function FieldIsNull(AField1, AField2: TField): TField;
begin
  if AField1.IsNull then
    Result := AField2
  else
    Result := AField1;  
end;

function StrInArray(AStr, AStrList: string): boolean;
begin
  // 判斷一個元素是否存在一個逗號分隔的字串列表中,例如:2,23,ab,24,55f
  Result := Pos(',' + AStr + ',', ',' + AStrList + ',') > 0;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美经典一区二区| 国产经典欧美精品| 亚洲亚洲精品在线观看| 麻豆极品一区二区三区| 国产午夜精品一区二区三区四区| 日韩精品电影在线观看| 国产亚洲欧美在线| 欧美中文一区二区三区| 久久99久久精品欧美| 成人欧美一区二区三区黑人麻豆 | 91精品国产一区二区人妖| 精品亚洲成a人在线观看 | 成人av免费在线| 亚洲一区二区免费视频| 国产丝袜美腿一区二区三区| 欧美一区二区久久| 欧美日韩一二三| 99久久精品免费观看| 蜜桃av一区二区在线观看| 亚洲第一狼人社区| |精品福利一区二区三区| 亚洲精品一区二区在线观看| 欧美日韩亚洲综合一区二区三区| 99久久久精品免费观看国产蜜| 日韩中文字幕区一区有砖一区 | 蜜桃精品在线观看| 欧美日韩一区二区三区高清| 欧美一区二区三区在线电影| 99精品桃花视频在线观看| 国产在线日韩欧美| 毛片av一区二区三区| 五月激情综合婷婷| 精品一区二区三区在线视频| 欧美日韩国产高清一区二区| 欧美韩日一区二区三区四区| 成人免费视频app| av男人天堂一区| 91久久精品国产91性色tv| 欧美美女喷水视频| 精品久久久久久久人人人人传媒| 国产欧美日韩另类一区| 亚洲欧美日韩国产综合| 日精品一区二区| 国产电影一区二区三区| 色偷偷久久一区二区三区| 91精品婷婷国产综合久久竹菊| 久久婷婷国产综合精品青草| 亚洲蜜臀av乱码久久精品| 日韩精品午夜视频| 成人免费av资源| 欧美日韩精品一区视频| 国产欧美一区二区三区网站| 亚洲线精品一区二区三区八戒| 国内精品伊人久久久久av一坑| 99精品欧美一区二区三区综合在线| 777奇米四色成人影色区| 欧美精彩视频一区二区三区| 日一区二区三区| 99久精品国产| 26uuu亚洲综合色| 亚洲一区二区视频在线| 欧美日韩一区二区三区四区五区| 精品国产一区二区精华| 一级精品视频在线观看宜春院 | 中文字幕中文乱码欧美一区二区 | 成人精品一区二区三区四区| 欧美美女喷水视频| 亚洲男人的天堂在线aⅴ视频| 久久se这里有精品| 在线观看国产日韩| 国产精品欧美精品| 国产呦精品一区二区三区网站| 欧美视频在线一区| 自拍av一区二区三区| 国产一区二区三区在线看麻豆| 欧美日韩激情一区二区三区| 国产精品国产三级国产aⅴ无密码| 免费在线观看成人| 欧美图片一区二区三区| 国产精品毛片久久久久久久| 精彩视频一区二区三区| 91精品国产高清一区二区三区 | 偷拍自拍另类欧美| 一本久久a久久免费精品不卡| 日本一区二区三区电影| 国产综合成人久久大片91| 91精品国产免费| 日韩精品1区2区3区| 欧美日韩一级片在线观看| 亚洲免费三区一区二区| av不卡在线播放| 国产精品日日摸夜夜摸av| 国产曰批免费观看久久久| 欧美一区二区视频在线观看 | 精品一区二区精品| 日韩精品综合一本久道在线视频| 亚洲电影在线播放| 在线观看一区二区视频| 一区二区三区四区视频精品免费 | 国产精品欧美久久久久一区二区| 国内精品伊人久久久久av一坑| 欧美成人精品高清在线播放| 麻豆91在线播放| 欧美一二三四区在线| 麻豆精品在线观看| 精品久久久久久最新网址| 麻豆91小视频| 久久久www成人免费无遮挡大片| 韩国av一区二区| 久久久久成人黄色影片| 国产精品乡下勾搭老头1| 国产日韩欧美制服另类| 国产成人亚洲精品青草天美 | 国产一区二三区| 久久久久免费观看| 国产成人午夜99999| 欧美激情一区二区在线| 99久久99久久久精品齐齐| 亚洲欧美日韩电影| 欧美私模裸体表演在线观看| 亚洲午夜免费福利视频| 7777精品伊人久久久大香线蕉完整版| 亚欧色一区w666天堂| 91麻豆精品久久久久蜜臀| 免费看精品久久片| 久久久亚洲午夜电影| 成人av中文字幕| 亚洲最大成人综合| 6080亚洲精品一区二区| 激情伊人五月天久久综合| 国产欧美日韩综合精品一区二区| av中文字幕亚洲| 亚洲成人一区二区| 亚洲精品一区二区三区精华液| 成人国产精品免费网站| 亚洲高清不卡在线| 亚洲精品一区二区三区精华液| 成人午夜碰碰视频| 亚洲午夜久久久久久久久久久| 日韩一区二区电影| 成人av手机在线观看| 无吗不卡中文字幕| 欧美激情综合五月色丁香| 欧美日韩色一区| 国产在线国偷精品免费看| 综合久久综合久久| 日韩一区二区三区四区| 成人av网站免费观看| 日韩av午夜在线观看| 欧美国产丝袜视频| 欧美人狂配大交3d怪物一区 | 日韩美女在线视频| 99久久er热在这里只有精品15| 日韩高清在线观看| 国产精品久久看| 欧美一级午夜免费电影| av在线不卡观看免费观看| 丝袜美腿亚洲色图| 国产精品欧美经典| 日韩欧美成人一区二区| 91蜜桃传媒精品久久久一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅| **网站欧美大片在线观看| 欧美一区二区福利视频| 色婷婷久久久久swag精品| 韩国女主播一区| 亚洲成人精品在线观看| 日本一二三四高清不卡| 日韩一区二区三区精品视频| 色欧美88888久久久久久影院| 极品少妇xxxx精品少妇偷拍| 亚洲一区中文在线| 亚洲国产精品传媒在线观看| 欧美一区二区三区在线视频 | 国产精品久久久久久久久搜平片 | 欧美日韩久久久久久| 波多野结衣一区二区三区| 老司机精品视频导航| 亚洲高清中文字幕| 国产精品美女久久久久久| 精品日韩在线观看| 欧美探花视频资源| 一本大道久久a久久精品综合| 国产九九视频一区二区三区| 日韩精品午夜视频| 亚洲成人av中文| 一区二区三区精品| 亚洲特黄一级片| 欧美激情在线看| 久久品道一品道久久精品| 日韩你懂的在线播放| 欧美精品一二三| 欧美丝袜丝nylons| 色综合久久综合中文综合网| www.日本不卡| eeuss鲁片一区二区三区在线看| 丁香六月久久综合狠狠色| 国产又黄又大久久| 国产美女一区二区三区| 久久国产综合精品|