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

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

?? myldbbaseengine.pas

?? 一個本地database引擎,支持中文T_Sql查詢,兼容DELPHI標準數據庫控件
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
    procedure CreateDatabase; virtual;
    // create table data
    function CreateTableData(Cursor: TMYLDBCursor): TMYLDBTableData; virtual; abstract;
    // find table data
    function FindTableData(Cursor: TMYLDBCursor): TMYLDBTableData; virtual;
    // find or create table data
    function FindOrCreateTableData(Cursor: TMYLDBCursor): TMYLDBTableData; virtual;
    // get new ObjectId
    function GetNewObjectId: TMYLDBObjectID; virtual; abstract;

    procedure Commit(SessionID: TMYLDBSessionID; DoFlushBuffers: Boolean=True); virtual;
    procedure Rollback(SessionID: TMYLDBSessionID); virtual;
    procedure FlushBuffers; virtual;

   public
    property DatabaseName: String read FDatabaseName write FDatabaseName;
    property PageManager: TMYLDBPageManager read FPageManager write FPageManager;
    property ReadOnly: Boolean read FReadOnly write FReadOnly;
    property SessionList: TList read FSessionList;
    property MultiUser: Boolean read FMultiUser write FMultiUser;
    // 5.12
    property SessionName: string read FSessionName write FSessionName;
  end; // TMYLDBDatabaseData




////////////////////////////////////////////////////////////////////////////////
//
// General functions and procedures
//
////////////////////////////////////////////////////////////////////////////////


  procedure ShowErrorMessage(ErrorMessage: String);
  procedure ShowWarningMessage(WarningMessage: String);


  // return false if field value is null
  function GetFieldData(
            // field number in FieldDefs
            FieldNo: Integer;
            // field definitions
            FieldDefs: TMYLDBFieldDefs;
            // pointer to allocated buffer for storing field value
            Buffer: Pointer;
            // record buffer
            RecordBuffer: TMYLDBRecordBuffer
                       ): Boolean;

  // returns false if field value is null
  procedure SetFieldData(
            // physical field No
            FieldNo: Integer;
            // field definitions
            FieldDefs: TMYLDBFieldDefs;
            // pointer to allocated buffer with new field value
            Buffer: Pointer;
            // record buffer
            RecordBuffer: TMYLDBRecordBuffer
                        );

 // return true if record buffers are binary identical
 function CompareRecordBuffers(RecordBuffer1,RecordBuffer2: TMYLDBRecordBuffer;
                              RecordBufferSize: Integer): Boolean;


 var
  IsDesignMode:          Boolean;

implementation

uses

// MYLDBoluteDatabase units
     MYLDBMain,
     MYLDBBTree,
     MYLDBLocalEngine,
     MYLDBDiskEngine;



////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBBaseFieldManager
//
////////////////////////////////////////////////////////////////////////////////


//------------------------------------------------------------------------------
// GetNextAutoincVal
//------------------------------------------------------------------------------
function TMYLDBBaseFieldManager.GetNextAutoincVal(FieldNo: Integer): TMYLDBSequenceValue;
begin
  if (FieldNo >= FieldDefs.Count) then
    raise EMYLDBException.Create(30402, ErrorGFieldWithObjectIdNotFound, [FieldNo]);
  if (FieldNo >= Length(FLastAutoIncValues)) then
    raise EMYLDBException.Create(30403, ErrorGFieldWithObjectIdNotFound, [FieldNo]);

  if (FFieldDefs.Items[FieldNo].AutoincIncrement <> 0) then
    Inc(FLastAutoIncValues[FieldNo], FFieldDefs.Items[FieldNo].AutoincIncrement)
  else
    Inc(FLastAutoIncValues[FieldNo]);
  if ((FFieldDefs.Items[FieldNo].AutoincMaxValue <> 0) and
      (FLastAutoIncValues[FieldNo] > FFieldDefs.Items[FieldNo].AutoincMaxValue)) then
    if (FFieldDefs.Items[FieldNo].AutoincCycled) then
      FLastAutoIncValues[FieldNo] := FFieldDefs.Items[FieldNo].AutoincMinValue
    else
      raise EMYLDBException.Create(20160, ErrorAAutoincMaxValueExceeded, [FFieldDefs.Items[FieldNo].Name]);

  Result := FLastAutoIncValues[FieldNo];
end;//GetNextAutoincVal


//------------------------------------------------------------------------------
// Constructor
//------------------------------------------------------------------------------
constructor TMYLDBBaseFieldManager.Create(TableData: TMYLDBTableData);
begin
  FTableData := TableData;
  FFieldDefs := TMYLDBFieldDefs.Create;
end;//Create


//------------------------------------------------------------------------------
// Destructor
//------------------------------------------------------------------------------
destructor TMYLDBBaseFieldManager.Destroy;
begin
  FFieldDefs.Free;
end;//Destroy


//------------------------------------------------------------------------------
// load from stream
//------------------------------------------------------------------------------
procedure TMYLDBBaseFieldManager.LoadMetadata(Stream: TStream);
begin
 FieldDefs.LoadFromStream(Stream);
 RecalcFieldOffsets;
 InitLastAutoIncValues;
end; // LoadMetadata


//------------------------------------------------------------------------------
// save to stream
//------------------------------------------------------------------------------
procedure TMYLDBBaseFieldManager.SaveMetadata(Stream: TStream);
begin
 FieldDefs.SaveToStream(Stream);
end; // SaveMetadata


//------------------------------------------------------------------------------
// LoadMostUpdated
//------------------------------------------------------------------------------
procedure TMYLDBBaseFieldManager.LoadMostUpdated(Buf: PChar; var Offset: Integer);
var cnt,i: Integer;
begin
 cnt := PInteger(Buf+Offset)^;
 Inc(Offset, sizeof(Integer));
 SetLength(FLastAutoIncValues, cnt);
 for i:=0 to cnt-1 do
   begin
     FLastAutoIncValues[i] := PInt64(Buf+Offset)^;
     Inc(Offset, sizeof(Int64));
   end;
end;// LoadMostUpdated


//------------------------------------------------------------------------------
// SaveMostUpdated
//------------------------------------------------------------------------------
procedure TMYLDBBaseFieldManager.SaveMostUpdated(Buf: PChar; var Offset: Integer);
var cnt,i: Integer;
begin
 cnt := Length(FLastAutoIncValues);
 PInteger(Buf+Offset)^ := cnt;
 Inc(Offset, sizeof(Integer));
 for i:=0 to cnt-1 do
   begin
     PInt64(Buf+Offset)^ := FLastAutoIncValues[i];
     Inc(Offset, sizeof(Int64));
   end;
end;// SaveMostUpdated


//------------------------------------------------------------------------------
// RecalcFieldOffsets
//------------------------------------------------------------------------------
procedure TMYLDBBaseFieldManager.RecalcFieldOffsets;
begin
 FFieldDefs.RecalcFieldOffsets;
end;//RecalcFieldOffsets


//------------------------------------------------------------------------------
// InitLastAutoIncValues
//------------------------------------------------------------------------------
procedure TMYLDBBaseFieldManager.InitLastAutoIncValues;
var
  i: Integer;
begin
  SetLength(FLastAutoIncValues, FieldDefs.Count);
  for i:=0 to Length(FLastAutoIncValues)-1 do
    if (IsAutoincFieldType(FieldDefs.Items[i].AdvancedFieldType)) then
      FLastAutoIncValues[i] := FieldDefs.Items[i].AutoincInitialValue
    else
      FLastAutoIncValues[i] := 0;
end;// InitLastAutoIncValues


//------------------------------------------------------------------------------
// DiskRecordBufferToMemRecordBuffer
//------------------------------------------------------------------------------
procedure TMYLDBBaseFieldManager.DiskRecordBufferToMemRecordBuffer(DiskRecordBuffer, MemRecordBuffer: PChar);
var
  i: Integer;
  NullFlagsSize: Integer;
begin
  FillChar(MemRecordBuffer^, FFieldDefs.GetMemoryRecordBufferSize, #0);

  // move NULL flags
  NullFlagsSize := FFieldDefs.Count div 8;
  if ((FFieldDefs.Count mod 8) > 0) then
   Inc(NullFlagsSize);
  Move(DiskRecordBuffer^, MemRecordBuffer^, NullFlagsSize);

  // move fields
  for i:=0 to FFieldDefs.Count-1 do
    Move((DiskRecordBuffer+FFieldDefs[i].DiskOffset)^,
         (MemRecordBuffer+FFieldDefs[i].MemoryOffset)^,
         FFieldDefs[i].DiskDataSize);
end;// DiskRecordBufferToMemRecordBuffer


//------------------------------------------------------------------------------
// MemRecordBufferToDiskRecordBuffer
//------------------------------------------------------------------------------
procedure TMYLDBBaseFieldManager.MemRecordBufferToDiskRecordBuffer(MemRecordBuffer, DiskRecordBuffer: PChar);
var
  i: Integer;
  NullFlagsSize: Integer;
begin
  FillChar(DiskRecordBuffer^, FFieldDefs.GetDiskRecordBufferSize, #0);

  // move NULL flags
  NullFlagsSize := FFieldDefs.Count div 8;
  if ((FFieldDefs.Count mod 8) > 0) then
   Inc(NullFlagsSize);
  Move(MemRecordBuffer^, DiskRecordBuffer^, NullFlagsSize);

  // move fields
  for i:=0 to FFieldDefs.Count-1 do
    Move((MemRecordBuffer+FFieldDefs[i].MemoryOffset)^,
         (DiskRecordBuffer+FFieldDefs[i].DiskOffset)^,
         FFieldDefs[i].DiskDataSize);
end;// MemRecordBufferToDiskRecordBuffer


//------------------------------------------------------------------------------
// CompareRecordBuffers
//------------------------------------------------------------------------------
function TMYLDBBaseFieldManager.CompareRecordBuffers(RecordBuffer1,
                                     RecordBuffer2: TMYLDBRecordBuffer): Boolean;
var
  i: Integer;
  NullFlagsSize: Integer;
begin
  // compare NULL flags
  NullFlagsSize := FFieldDefs.Count div 8;
  if ((FFieldDefs.Count mod 8) > 0) then
   Inc(NullFlagsSize);
  Result := (StrLComp(RecordBuffer1, RecordBuffer2, NullFlagsSize) = 0);
  // compare fields?
  if (Result) then
    for i:=0 to FFieldDefs.Count-1 do
      begin
        Result := (StrLComp(RecordBuffer1+FFieldDefs[i].MemoryOffset,
                            RecordBuffer2+FFieldDefs[i].MemoryOffset,
                            FFieldDefs[i].DiskDataSize) = 0);
        if (not Result) then
          break;
      end;
end;// CompareRecordBuffers


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合丝袜日本网| 亚洲乱码国产乱码精品精小说 | 国产精品资源在线看| 一区二区三区欧美在线观看| 亚洲精品乱码久久久久久久久 | 91年精品国产| 中文字幕亚洲精品在线观看| 欧美三级中文字幕| 91精品国产综合久久久久久久久久| 91福利在线导航| 欧美美女一区二区| 欧美电视剧在线观看完整版| 精品国产乱码久久久久久蜜臀| 国产无人区一区二区三区| 亚洲视频一区二区在线观看| 一区二区成人在线| 韩国精品一区二区| 精品亚洲成a人| 91丨九色丨蝌蚪丨老版| 欧美日韩夫妻久久| 久久蜜臀中文字幕| 亚洲乱码国产乱码精品精小说| 天天综合网 天天综合色| 精品一区二区三区免费观看| 91香蕉视频污在线| 不卡av在线网| 99精品国产视频| 99久久免费视频.com| 奇米色777欧美一区二区| 精品一区精品二区高清| 亚洲国产一区二区视频| 日韩av在线发布| 日韩av中文字幕一区二区三区| 麻豆成人综合网| 国产高清在线观看免费不卡| 99re热这里只有精品免费视频| 91久久精品一区二区二区| 欧美精品色综合| 久久网站最新地址| 国产精品传媒在线| 日本不卡高清视频| 成人黄色一级视频| 51精品久久久久久久蜜臀| 国产亚洲一区二区三区四区| 依依成人综合视频| 精品在线你懂的| 久久久亚洲精品一区二区三区 | 欧美日韩中文国产| 欧美三级日韩三级| 日韩精品一区二区三区swag| 久久精品欧美日韩精品| 亚洲精品视频在线| 国产在线精品免费| 欧美视频一区二区三区四区| 国产在线一区观看| 性欧美疯狂xxxxbbbb| 国产美女在线观看一区| 在线免费视频一区二区| 精品国产亚洲一区二区三区在线观看| 中文字幕精品三区| 三级不卡在线观看| 99久久99久久精品国产片果冻| 日韩欧美综合一区| 一区二区免费看| av在线播放不卡| 精品久久国产97色综合| 亚洲一线二线三线久久久| 国产激情一区二区三区桃花岛亚洲| 欧美无砖砖区免费| 国产精品国产a级| 久久69国产一区二区蜜臀| 欧美日韩一区二区三区四区| 国产精品系列在线| 激情欧美一区二区| 在线播放国产精品二区一二区四区| 国产精品乱人伦一区二区| 久久99久久99小草精品免视看| 在线观看国产91| 亚洲女人的天堂| 成人av在线资源网| 国产日韩一级二级三级| 久久精品国产一区二区三| 欧美无人高清视频在线观看| 中文字幕一区二区三区四区| 国产精品一区二区在线播放| 欧美一级理论片| 午夜日韩在线观看| 欧美日韩一区二区三区四区| 一区二区激情视频| 91久久国产最好的精华液| 一区二区中文视频| 成人av资源在线观看| 国产精品系列在线| 高清久久久久久| 国产午夜亚洲精品理论片色戒| 久久精品国产99国产| 日韩三级在线观看| 日本女人一区二区三区| 欧美一区二区福利在线| 青娱乐精品在线视频| 欧美日韩国产欧美日美国产精品| 亚洲成人av在线电影| 欧美性做爰猛烈叫床潮| 一个色综合网站| 欧美日韩一区二区三区高清| 色综合欧美在线| 捆绑调教一区二区三区| 午夜欧美2019年伦理| 精品女同一区二区| 91在线视频播放| 日韩在线观看一区二区| 久久久久国产精品人| 欧美视频日韩视频在线观看| 国产一区二区免费视频| 亚洲美女视频在线| 久久亚洲一区二区三区四区| 91浏览器在线视频| 99久久伊人网影院| 专区另类欧美日韩| 一本色道久久综合亚洲91| 亚洲卡通动漫在线| 欧美日韩日日骚| 日韩电影在线观看一区| 欧美一级高清片在线观看| 免费观看一级特黄欧美大片| 久久综合网色—综合色88| 成人一区二区视频| 亚洲免费观看高清完整| 欧美日韩二区三区| 精品中文字幕一区二区| 国产精品乱人伦| 欧美优质美女网站| 欧美a级理论片| 久久精品人人爽人人爽| 99精品国产视频| 天天综合色天天综合色h| 精品美女一区二区三区| 国产成人精品亚洲日本在线桃色| 中文字幕人成不卡一区| 欧美日韩在线一区二区| 久草热8精品视频在线观看| 久久女同性恋中文字幕| 99久久久免费精品国产一区二区| 亚洲激情校园春色| 日韩欧美国产一二三区| 99国产精品久久久久久久久久 | 日本 国产 欧美色综合| 久久综合久久综合亚洲| 91视频在线观看| 久久国产麻豆精品| 亚洲视频在线观看三级| 日韩欧美成人午夜| 色综合视频一区二区三区高清| 日韩不卡手机在线v区| 国产精品福利一区二区三区| 91精品国产福利| 91女神在线视频| 精品一区二区三区免费视频| 夜夜精品视频一区二区| 国产视频一区二区在线| 3d成人动漫网站| 成人av免费在线观看| 久久丁香综合五月国产三级网站| 亚洲人成在线观看一区二区| 欧美va亚洲va国产综合| 欧洲精品一区二区三区在线观看| 国内精品免费**视频| 亚洲国产日韩精品| 中文一区二区在线观看| 欧美一个色资源| 在线免费观看日本欧美| 国产精品性做久久久久久| 日本欧美加勒比视频| 亚洲日本成人在线观看| 国产亚洲精品精华液| 欧美一区二区三区免费视频| 日本高清视频一区二区| 高清久久久久久| 国精产品一区一区三区mba桃花 | 97国产精品videossex| 久88久久88久久久| 日韩av中文在线观看| 一区二区国产视频| 亚洲男人的天堂一区二区| 国产目拍亚洲精品99久久精品| 日韩丝袜美女视频| 欧美美女网站色| 在线观看欧美日本| 91老师国产黑色丝袜在线| 成人美女视频在线看| 国产精华液一区二区三区| 精品无码三级在线观看视频| 免费在线观看视频一区| 日韩激情一二三区| 日韩国产在线观看一区| 午夜一区二区三区在线观看| 亚洲午夜一区二区三区| 亚洲综合色视频| 亚洲综合免费观看高清在线观看| 亚洲日本一区二区|