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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? myldbd4routines.pas

?? 一個本地database引擎,支持中文T_Sql查詢,兼容DELPHI標(biāo)準(zhǔn)數(shù)據(jù)庫控件
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
unit MYLDBD4Routines;

interface

{$I MYLDBVer.inc}

uses Windows, Classes, Sysutils,
{$IFNDEF D5H}
     Db,
{$ENDIF}
     MYLDBExcept,
     MYLDBConst;


const
  kernel = 'kernel32.dll';
  oleaut = 'oleaut32.dll';

var
  ClearAnyProc: Pointer;  { Handler clearing a varAny }

type

{$IFNDEF D5H}
{ TMasterDataLink }

  TMasterDataLink = class(TDetailDataLink)
  private
    FDataSet: TDataSet;
    FFieldNames: string;
    FFields: TList;
    FOnMasterChange: TNotifyEvent;
    FOnMasterDisable: TNotifyEvent;
    procedure SetFieldNames(const Value: string);
  protected
    procedure ActiveChanged; override;
    procedure CheckBrowseMode; override;
    function GetDetailDataSet: TDataSet; override;
    procedure LayoutChanged; override;
    procedure RecordChanged(Field: TField); override;
  public
    constructor Create(DataSet: TDataSet);
    destructor Destroy; override;
    property FieldNames: string read FFieldNames write SetFieldNames;
    property Fields: TList read FFields;
    property OnMasterChange: TNotifyEvent read FOnMasterChange write FOnMasterChange;
    property OnMasterDisable: TNotifyEvent read FOnMasterDisable write FOnMasterDisable;
  end;
{$ENDIF}

  StrRec = packed record
    allocSiz: Longint;
    refCnt: Longint;
    length: Longint;
  end;
{ FloatToText, FloatToTextFmt, TextToFloat, and FloatToDecimal type codes }

//  TFloatValue = (fvExtended, fvCurrency);

{ FloatToText format codes }

//  TFloatFormat = (ffGeneral, ffExponent, ffFixed, ffNumber, ffCurrency);

{ FloatToDecimal result record }

  TFloatRec = packed record
    Exponent: Smallint;
    Negative: Boolean;
    Digits: array[0..20] of Char;
  end;


  PMemoryManager = ^TMemoryManager;
  TMemoryManager = record
    GetMem: function(Size: Integer): Pointer;
    FreeMem: function(P: Pointer): Integer;
    ReallocMem: function(P: Pointer; Size: Integer): Pointer;
  end;
  TFormatSettings = record
    CurrencyFormat: Byte;
    NegCurrFormat: Byte;
    ThousandSeparator: Char;
    DecimalSeparator: Char;
    CurrencyDecimals: Byte;
    DateSeparator: Char;
    TimeSeparator: Char;
    ListSeparator: Char;
    CurrencyString: string;
    ShortDateFormat: string;
    LongDateFormat: string;
    TimeAMString: string;
    TimePMString: string;
    ShortTimeFormat: string;
    LongTimeFormat: string;
    ShortMonthNames: array[1..12] of string;
    LongMonthNames: array[1..12] of string;
    ShortDayNames: array[1..7] of string;
    LongDayNames: array[1..7] of string;
    TwoDigitYearCenturyWindow: Word;
  end;

const
        skew = sizeof(StrRec);
        rOff = sizeof(StrRec) - sizeof(Longint); { refCnt offset }
        overHead = sizeof(StrRec) + 1;

const
  MinCurrency: Currency = -922337203685477.5807 {$IFDEF LINUX} + 1 {$ENDIF};  //!! overflow?
  MaxCurrency: Currency =  922337203685477.5807 {$IFDEF LINUX} - 1 {$ENDIF};  //!! overflow?

const


  reInvalidPtr        = 2;
  reVarInvalidOp      = 16;
(*
  reOutOfMemory       = 1;
  reDivByZero         = 3;
  reRangeError        = 4;
  reIntOverflow       = 5;
  reInvalidOp         = 6;
  reZeroDivide        = 7;
  reOverflow          = 8;
  reUnderflow         = 9;
  reInvalidCast       = 10;
  reAccessViolation   = 11;
  reStackOverflow     = 12;
  reControlBreak      = 13;
  rePrivInstruction   = 14;
  reVarTypeCast       = 15;
  reVarDispatch       = 17;
  reVarArrayCreate    = 18;
  reVarNotArray       = 19;
  reVarArrayBounds    = 20;
  reAssertionFailed   = 21;
  reExternalException = 22;     { not used here; in SysUtils }
  reIntfCastError     = 23;
  reSafeCallError     = 24;
*)
function MYLDB_VarArrayGet(var A: Variant; IndexCount: Integer;
  Indices: Integer): Variant; cdecl;
function VarArrayGet(const A: Variant; const Indices: array of Integer): Variant;

{ Memory manager support }

procedure GetMemoryManager(var MemMgr: TMemoryManager);
procedure SetMemoryManager(const MemMgr: TMemoryManager);
function IsMemoryManagerSet: Boolean;
procedure Error(errorCode: Byte);

{ FloatToCurr will range validate a value to make sure it falls
  within the acceptable currency range }
{ FloatToCurr will range validate a value to make sure it falls
  within the acceptable currency range }

function FloatToCurr(const Value: Extended): Currency;
function TryFloatToCurr(const Value: Extended; out AResult: Currency): Boolean;

function TryStrToFloat(const S: string; out Value: Extended): Boolean; overload;

function TryStrToFloat(const S: string; out Value: Double): Boolean; overload;

function TryStrToFloat(const S: string; out Value: Single): Boolean; overload;


(*
function FloatToStr(Value: Extended): string; overload;
function FloatToStr(Value: Extended;
  const FormatSettings: TFormatSettings): string; overload;

{ StrToFloat converts the given string to a floating-point value. The string
  must consist of an optional sign (+ or -), a string of digits with an
  optional decimal point, and an optional 'E' or 'e' followed by a signed
  integer. Leading and trailing blanks in the string are ignored. The
  DecimalSeparator global variable defines the character that must be used
  as a decimal point. Thousand separators and currency symbols are not
  allowed in the string. If the string doesn't contain a valid value, an
  EConvertError exception is raised. }

function StrToFloat(const S: string): Extended; overload;
function StrToFloat(const S: string;
  const FormatSettings: TFormatSettings): Extended; overload;

function StrToFloatDef(const S: string;
  const Default: Extended): Extended; overload;
function StrToFloatDef(const S: string; const Default: Extended;
  const FormatSettings: TFormatSettings): Extended; overload;


{ FloatToText converts the given floating-point value to its decimal
  representation using the specified format, precision, and digits. The
  Value parameter must be a variable of type Extended or Currency, as
  indicated by the ValueType parameter. The resulting string of characters
  is stored in the given buffer, and the returned value is the number of
  characters stored. The resulting string is not null-terminated. For
  further details, see the description of the FloatToStrF function. }

function FloatToText(BufferArg: PChar; const Value; ValueType: TFloatValue;
  Format: TFloatFormat; Precision, Digits: Integer): Integer; overload;
function FloatToText(BufferArg: PChar; const Value; ValueType: TFloatValue;
  Format: TFloatFormat; Precision, Digits: Integer;
  const FormatSettings: TFormatSettings): Integer; overload;

function FloatToCurr(const Value: Extended): Currency;
function TryFloatToCurr(const Value: Extended; out AResult: Currency): Boolean;


*)

{ StrToBool converts the given string to a boolean value.  If the string
  doesn't contain a valid value, an EConvertError exception is raised.
  BoolToStr converts boolean to a string value that in turn can be converted
  back into a boolean.  BoolToStr will always pick the first element of
  the TrueStrs/FalseStrs arrays. }

var
  TrueBoolStrs: array of String;
  FalseBoolStrs: array of String;

const
  DefaultTrueBoolStr = 'True';   // DO NOT LOCALIZE
  DefaultFalseBoolStr = 'False'; // DO NOT LOCALIZE

function StrToBool(const S: string): Boolean;
function StrToBoolDef(const S: string; const Default: Boolean): Boolean;
function TryStrToBool(const S: string; out Value: Boolean): Boolean;
function BoolToStr(B: Boolean; UseBoolStrs: Boolean = False): string;
{$IFNDEF D5H}
{ AnsiSameText compares S1 to S2, without case-sensitivity. The compare
  operation is controlled by the current Windows locale. The return value
  is True if AnsiCompareText would have returned 0. }

function AnsiSameText(const S1, S2: string): Boolean;
{$ENDIF}

procedure FreeAndNil(var Obj);

type
  TValueSign = -1..1;
const
  NegativeValue = Low(TValueSign);
  ZeroValue = 0;
  PositiveValue = High(TValueSign);

function Sign(const AValue: Integer): TValueSign; overload;
function Sign(const AValue: Int64): TValueSign; overload;
function Sign(const AValue: Double): TValueSign; overload;

const
{ Units of time }

  HoursPerDay   = 24;
  MinsPerHour   = 60;
  SecsPerMin    = 60;
  MSecsPerSec   = 1000;
  MinsPerDay    = HoursPerDay * MinsPerHour;
  SecsPerDay    = MinsPerDay * SecsPerMin;
  MSecsPerDay   = SecsPerDay * MSecsPerSec;

  SMissingDateTimeField = '?';
  SInvalidDateTime = '''''%s'''' is not a valid date and time';

  { Used in RecodeDate, RecodeTime and RecodeDateTime for those datetime }
  {  fields you want to leave alone }
  RecodeLeaveFieldAsIs = High(Word);

function EncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond,
  AMilliSecond: Word): TDateTime;
function TryEncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond,
  AMilliSecond: Word; out AValue: TDateTime): Boolean;
function TryEncodeDate(Year, Month, Day: Word; out Date: TDateTime): Boolean;
function TryEncodeTime(Hour, Min, Sec, MSec: Word; out Time: TDateTime): Boolean;
procedure InvalidDateTimeError(const AYear, AMonth, ADay, AHour, AMinute,
  ASecond, AMilliSecond: Word; const ABaseDate: TDateTime = 0);

implementation


var
  MemoryManager: TMemoryManager = (
    GetMem: SysGetMem;
    FreeMem: SysFreeMem;
    ReallocMem: SysReallocMem);

{$I MYLDBGETMEM.INC }

function VariantClear(var V: Variant): Integer; stdcall;
  external oleaut name 'VariantClear';

function SafeArrayPtrOfIndex(VarArray: PVarArray; Indices: Pointer;
  var pvData: Pointer): HResult; stdcall;
  external oleaut name 'SafeArrayPtrOfIndex';

function SafeArrayGetElement(VarArray: PVarArray; Indices,
  Data: Pointer): Integer; stdcall;
  external oleaut name 'SafeArrayGetElement';

function GetVarArray(const A: Variant): PVarArray;
begin
  if TVarData(A).VType and varArray = 0 then
   raise EMYLDBException.Create(10434,ErrorLVarNotArray);
  if TVarData(A).VType and varByRef <> 0 then
    Result := PVarArray(TVarData(A).VPointer^) else
    Result := TVarData(A).VArray;
end;

procedure _FreeMem;
asm
        TEST    EAX,EAX
        JE      @@1
        CALL    MemoryManager.FreeMem
        OR      EAX,EAX
        JNE     @@2
@@1:    RET
@@2:    MOV     AL,reInvalidPtr
        JMP     Error
end;

procedure Error(errorCode: Byte);
begin
 raise EMYLDBException.Create(10437,ErrorLSystemError,[errorCode]);
end;

procedure _LStrClr(var S: AnsiString);
asm
        { ->    EAX pointer to str      }

        MOV     EDX,[EAX]                       { fetch str                     }
        TEST    EDX,EDX                         { if nil, nothing to do         }
        JE      @@done
        MOV     dword ptr [EAX],0               { clear str                     }
        MOV     ECX,[EDX-skew].StrRec.refCnt    { fetch refCnt                  }
        DEC     ECX                             { if < 0: literal str           }
        JL      @@done
   LOCK DEC     [EDX-skew].StrRec.refCnt        { threadsafe dec refCount       }
        JNE     @@done
        PUSH    EAX
        LEA     EAX,[EDX-skew].StrRec.refCnt    { if refCnt now zero, deallocate}
        CALL    _FreeMem
        POP     EAX
@@done:
end;

procedure VarInvalidOp;
asm
        MOV     AL,reVarInvalidOp
        JMP     Error
end;


procedure _VarClear(var V : Variant);
asm
        XOR     EDX,EDX
        MOV     DX,[EAX].TVarData.VType
        TEST    EDX,varByRef
        JNE     @@2
        CMP     EDX,varOleStr
        JB      @@2
        CMP     EDX,varString
        JE      @@1
        CMP     EDX,varAny
        JNE     @@3
        JMP     [ClearAnyProc]
@@1:    MOV     [EAX].TVarData.VType,varEmpty
        ADD     EAX,OFFSET TVarData.VString
        JMP     _LStrClr
@@2:    MOV     [EAX].TVarData.VType,varEmpty
        RET
@@3:    PUSH    EAX
        CALL    VariantClear
end;


function MYLDB_VarArrayGet(var A: Variant; IndexCount: Integer;
  Indices: Integer): Variant; cdecl;
var
  VarArrayPtr: PVarArray;
  VarType: Integer;
  P: Pointer;
begin
  if TVarData(A).VType and varArray = 0 then
   raise EMYLDBException.Create(10433,ErrorLVarNotArray);
  VarArrayPtr := GetVarArray(A);
  if VarArrayPtr^.DimCount <> IndexCount then
   raise EMYLDBException.Create(10435,ErrorLVarArrayBounds,
    [VarArrayPtr^.DimCount,IndexCount]);
  VarType := TVarData(A).VType and varTypeMask;
  _VarClear(Result);
  if VarType = varVariant then
  begin
    if SafeArrayPtrOfIndex(VarArrayPtr, @Indices, P) <> 0 then
     raise EMYLDBException.Create(10436,ErrorLVarArrayBounds,
      [-1,-1]);

    Result := PVariant(P)^;
  end else
  begin
  if SafeArrayGetElement(VarArrayPtr, @Indices,
      @TVarData(Result).VPointer) <> 0 then
       raise EMYLDBException.Create(10438,ErrorLVarArrayBounds,
        [-1,-1]);
    TVarData(Result).VType := VarType;
  end;
end; //MYLDB_VarArrayGet


function VarArrayGet(const A: Variant; const Indices: array of Integer): Variant;
asm
        {     ->EAX     Pointer to A            }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
极品美女销魂一区二区三区| 粉嫩av一区二区三区粉嫩| 国产精品久久久久四虎| 欧美一区二区网站| 色老汉一区二区三区| 成人av在线影院| 国产黑丝在线一区二区三区| 久久精品av麻豆的观看方式| 亚洲成人高清在线| 亚洲成av人影院| 午夜精品久久久| 亚洲中国最大av网站| 综合自拍亚洲综合图不卡区| 1区2区3区欧美| 亚洲美女视频在线观看| 亚洲美女电影在线| 一区二区三区在线视频观看58| 中文字幕一区二区三区四区| 中文字幕亚洲在| 亚洲尤物视频在线| 日日嗨av一区二区三区四区| 免费观看一级欧美片| 韩国av一区二区三区在线观看| 伦理电影国产精品| 国产一区91精品张津瑜| 不卡大黄网站免费看| 在线观看www91| 日韩一区二区三区免费观看| 久久网这里都是精品| 国产精品国产三级国产三级人妇 | 精品一区二区国语对白| 国内精品国产成人国产三级粉色| 丰满亚洲少妇av| 中文字幕精品在线不卡| 亚洲精品视频免费观看| 麻豆专区一区二区三区四区五区| 国产综合久久久久久久久久久久| 91麻豆精品视频| 日韩一区二区免费在线观看| 国产精品久久久久一区二区三区共| 亚洲欧美另类在线| 激情综合网激情| 欧美视频一区二区在线观看| www成人在线观看| 亚洲成av人影院| 99久久综合99久久综合网站| 91麻豆精品国产91久久久久久久久| 久久人人97超碰com| 亚洲福利视频一区| 色哟哟在线观看一区二区三区| 555夜色666亚洲国产免| 日韩久久一区二区| 国产精品自拍在线| 欧美不卡一二三| 日本va欧美va瓶| 欧美日韩国产首页在线观看| 亚洲欧美日韩一区二区三区在线观看| 久久99国产精品久久| 欧美tk丨vk视频| 开心九九激情九九欧美日韩精美视频电影| 色综合天天视频在线观看| 国产精品美女久久福利网站| 粉嫩av一区二区三区在线播放| 日韩免费高清av| 久久国产精品区| 欧美成人精品3d动漫h| 蜜桃视频在线一区| 欧美成人激情免费网| 国产精品一区二区无线| 2021久久国产精品不只是精品| 久久99久久久久| 中文字幕欧美区| 91免费看`日韩一区二区| 亚洲欧美日韩国产综合| 欧美熟乱第一页| 日本大胆欧美人术艺术动态| 日韩精品自拍偷拍| 国产成人aaa| 亚洲一区免费观看| 这里只有精品电影| 韩日欧美一区二区三区| 国产精品久久久久久久久果冻传媒| youjizz国产精品| 亚洲v精品v日韩v欧美v专区| 欧美变态口味重另类| 成人开心网精品视频| 亚洲国产精品综合小说图片区| 日韩精品一区二区三区视频| 成人三级伦理片| 午夜不卡在线视频| 中文无字幕一区二区三区| 日韩一级视频免费观看在线| 国产精品自拍毛片| 午夜日韩在线观看| 中文字幕人成不卡一区| 欧美一区二区三区爱爱| 一本色道久久综合亚洲精品按摩| 免费高清在线视频一区·| 1024成人网色www| 国产欧美一区二区精品性色| 欧美日韩精品一区二区三区四区 | 日韩欧美一区二区视频| 久久久不卡网国产精品一区| 久久99久久99小草精品免视看| 久久综合九色综合97婷婷女人 | 国内不卡的二区三区中文字幕 | 五月婷婷激情综合网| 成人欧美一区二区三区白人| 国产视频一区在线观看| 精品国产人成亚洲区| 欧美午夜不卡视频| av在线不卡观看免费观看| 国产高清成人在线| 国产suv精品一区二区三区| 国产成人免费xxxxxxxx| 国内久久精品视频| 国产成人精品影视| 成人h动漫精品| 成人av午夜电影| 99久久综合狠狠综合久久| 91丨porny丨户外露出| 91电影在线观看| 欧美丰满高潮xxxx喷水动漫| 欧美一区二区三区啪啪| 日韩精品一区在线观看| 久久色.com| 国产精品久久久久精k8| 亚洲另类色综合网站| 亚洲精品国产精华液| 香蕉久久一区二区不卡无毒影院| 欧美aaaaa成人免费观看视频| 麻豆精品精品国产自在97香蕉| 久久99久久精品| 91啪在线观看| 日韩小视频在线观看专区| 国产欧美综合色| 亚洲国产精品精华液网站| 国产一区二区三区四区在线观看| 成人精品国产一区二区4080| 在线中文字幕一区二区| 精品成人免费观看| 一级精品视频在线观看宜春院 | 亚洲影视在线播放| 麻豆专区一区二区三区四区五区| 不卡一区二区在线| 欧美一区在线视频| **性色生活片久久毛片| 日韩精品视频网| 国产电影一区二区三区| 欧美日韩国产首页在线观看| 久久久久久电影| 蜜臀av性久久久久蜜臀aⅴ四虎| 成人精品鲁一区一区二区| 欧美日韩极品在线观看一区| 中文成人av在线| 精品在线你懂的| 欧美妇女性影城| 亚洲精品成人a在线观看| 成人午夜大片免费观看| 2023国产一二三区日本精品2022| 夜夜嗨av一区二区三区| 91视频在线看| 中文字幕亚洲精品在线观看| 国产福利不卡视频| 精品日韩在线观看| 美女脱光内衣内裤视频久久网站| 色婷婷综合五月| 亚洲一区二区在线播放相泽| 一本色道a无线码一区v| 亚洲视频网在线直播| 99re这里只有精品视频首页| 国产精品麻豆一区二区| av电影天堂一区二区在线| 国产精品色婷婷| 播五月开心婷婷综合| 亚洲欧美激情一区二区| 欧亚洲嫩模精品一区三区| 亚洲一区二区在线播放相泽| 欧美高清www午色夜在线视频| 日韩电影网1区2区| 久久蜜桃av一区精品变态类天堂 | 色综合色综合色综合色综合色综合 | 亚洲视频在线观看三级| av成人免费在线| 午夜日韩在线观看| 久久蜜臀中文字幕| 在线一区二区三区四区| 日韩精品乱码免费| 欧美激情一区二区三区在线| 91久久线看在观草草青青| 日韩av不卡一区二区| 欧美高清在线精品一区| 欧美日韩mp4| 成人国产一区二区三区精品| 亚洲国产美女搞黄色| 久久综合久久久久88| 欧美日韩一级二级| 成人黄色国产精品网站大全在线免费观看 | 国产丶欧美丶日本不卡视频| 一区二区三区在线免费|