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

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

?? myldbmemengine.pas

?? 一個本地database引擎,支持中文T_Sql查詢,兼容DELPHI標準數據庫控件
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
   if (FRecordCount = 0) then
    RecordID.PageNo := 0
   else
    RecordID.PageNo := FLastRecordID+1;
   RecordID.PageItemNo := 0;
   if (FAllocatedRecordCount <= RecordID.PageNo) then
    begin
     // increase record buffer size
     OldRecordCount := FAllocatedRecordCount;
     Inc(FAllocatedRecordCount,FAllocRecordsBy);
     i := FAllocatedRecordCount * FRecordBufferSize;
     if (OldRecordCount = 0) then
      FRecordBuffer := MemoryManager.GetMem(i)
     else
      MemoryManager.ReallocMem(Pointer(FRecordBuffer),i);
     i := FAllocatedRecordCount div 8;
     if (FAllocatedRecordCount mod 8 > 0) then
      Inc(i);
     if (OldRecordCount = 0) then
      FDeleteFlagBuffer := MemoryManager.GetMem(i)
     else
      MemoryManager.ReallocMem(Pointer(FDeleteFlagBuffer),i);
    end; // increase record buffer size
    Move(RecordBuffer^,PChar(FRecordBuffer + RecordID.PageNo * FRecordBufferSize)^,
          FRecordBufferSize);
    SetNullFlag(False,RecordID.PageNo,FDeleteFlagBuffer);
    Inc(FRecordCount);
    if (RecordID.PageNo < FFirstRecordID) then
     FFirstRecordID := RecordID.PageNo;
    if (RecordID.PageNo > FLastRecordID) then
     FLastRecordID := RecordID.PageNo;
    Result := True;
    Inc(FTableState);
   except
  Result := False;
 end; // try
end; // AddRecord


//------------------------------------------------------------------------------
// update record, return true if record was updated, false if record was deleted
//------------------------------------------------------------------------------
function TMYLDBMemoryRecordManager.UpdateRecord(
            SessionID: TMYLDBSessionID;
            RecordBuffer: TMYLDBRecordBuffer; RecordID: TMYLDBRecordID): Boolean;
begin
 Result := False;
 if (not ((RecordID.PageNo < FFirstRecordID) or (RecordID.PageNo > FLastRecordID))) then
  try
   Move(RecordBuffer^,PChar(FRecordBuffer + RecordID.PageNo * FRecordBufferSize)^,
          FRecordBufferSize);
   Result := True;
   Inc(FTableState);
  except
   Result := False;
  end;
end; // UpdateRecord


//------------------------------------------------------------------------------
// delete record, return true if record was deleted, false if record was deleted earlier
//------------------------------------------------------------------------------
function TMYLDBMemoryRecordManager.DeleteRecord(SessionID: TMYLDBSessionID;
                                           var RecordID: TMYLDBRecordID): Boolean;
begin
 Result := False;
 RecordID.PageItemNo := 0;
 if (not (FRecordCount <= 0)) and
    (not ((RecordID.PageNo < FFirstRecordID) or (RecordID.PageNo > FLastRecordID))) and
    (not (CheckNullFlag(RecordID.PageNo,FDeleteFlagBuffer))) then
  try
   // set delete flag
   SetNullFlag(True,RecordID.PageNo,FDeleteFlagBuffer);
   Dec(FRecordCount);
   if (FRecordCount = 0) then
    begin
     // no records
     FFirstRecordID := 0;
     FLastRecordID := 0;
    end
   else
    begin
     // update first and last records ID
     if (RecordID.PageNo = FFirstRecordID) then
      GetRecordFromAnyPosition(grmNext,FFirstRecordID);
     if (RecordID.PageNo = FLastRecordID) then
      begin
       GetRecordFromAnyPosition(grmPrior,FLastRecordID);
       RecordID.PageNo := FLastRecordID;
      end;
    end;
   FNoRecordsDeleted := False;
   Result := True;
   Inc(FTableState);
 except
  Result := False;
 end;
end; // DeleteRecord


//------------------------------------------------------------------------------
// get record
//------------------------------------------------------------------------------
procedure TMYLDBMemoryRecordManager.GetRecordBuffer(SessionID: TMYLDBSessionID;
                                        var NavigationInfo: TMYLDBNavigationInfo);
begin
 if (FRecordCount = 0) then
  begin
   NavigationInfo.GetRecordResult := grrEOF;
   Exit;
  end;
 // get record relatively to the first position
 if (NavigationInfo.FirstPosition) then
  begin
   NavigationInfo.GetRecordResult := GetRecordFromFirstPosition(
                                      NavigationInfo.GetRecordMode,
                                      NavigationInfo.RecordID.PageNo
                                                               );
   if (NavigationInfo.GetRecordResult = grrOK) then
    NavigationInfo.FirstPosition := False;
  end
 else
 // get record relatively to the last position
 if (NavigationInfo.LastPosition) then
  begin
   NavigationInfo.GetRecordResult := GetRecordFromLastPosition(
                                      NavigationInfo.GetRecordMode,
                                      NavigationInfo.RecordID.PageNo
                                                               );
   if (NavigationInfo.GetRecordResult = grrOK) then
    NavigationInfo.LastPosition := False;
  end
 else
  NavigationInfo.GetRecordResult := GetRecordFromAnyPosition(
                                      NavigationInfo.GetRecordMode,
                                      NavigationInfo.RecordID.PageNo
                                                               );
 if (NavigationInfo.GetRecordResult = grrOK) then
  begin
   try
     Move(
          PChar(FRecordBuffer + NavigationInfo.RecordID.PageNo * FRecordBufferSize)^,
          NavigationInfo.RecordBuffer^,
          FRecordBufferSize
         );
     NavigationInfo.GetRecordResult := grrOK;
   except
    raise EMYLDBException.Create(10019,ErrorLRetreivingRecord);
   end;
  end; // record retrieved successfully
end; // GetRecordBuffer


//------------------------------------------------------------------------------
// return 0,1, or -1 if (1 = 2), (1 > 2) or (1 < 2)
//------------------------------------------------------------------------------
function TMYLDBMemoryRecordManager.CompareRecordID(RecordID1: TMYLDBRecordID; RecordID2: TMYLDBRecordID): Integer;
begin
 if (RecordID1.PageNo = RecordID2.PageNo) then
  Result := 0
 else
 if (RecordID1.PageNo > RecordID2.PageNo) then
  Result := 1
 else
  Result := -1;
end; // CompareRecordID


//------------------------------------------------------------------------------
// return record no
//------------------------------------------------------------------------------
function TMYLDBMemoryRecordManager.GetApproximateRecNo(SessionID: TMYLDBSessionID;
                                          RecordID: TMYLDBRecordID): TMYLDBRecordNo;
begin
 if (RecordCount = 0) or (RecordID.PageNo < FFirstRecordID) or (RecordID.PageNo > FLastRecordID) then
  Result := -1
 else
 if (RecordCount = 1) then
  Result := 1
 else
  Result :=  Round((RecordID.PageNo - FFirstRecordID) / (FRecordCount) *
                   (FLastRecordID - FFirstRecordID)) + 1;
end; // GetApproximateRecNo

{
//------------------------------------------------------------------------------
// Load from stream
//------------------------------------------------------------------------------
procedure TMYLDBMemoryRecordManager.LoadFromStream(Stream: TStream);
var i: Integer;
begin
 LoadDataFromStream(i,Sizeof(i),Stream,10449);
 SetRecordCount(i);
 i := (FAllocatedRecordCount div 8) + Integer((FAllocatedRecordCount mod 8) > 0);
 LoadDataFromStream(FNoRecordsDeleted,Sizeof(FNoRecordsDeleted),Stream,10450);
 LoadDataFromStream(FFirstRecordID,Sizeof(FFirstRecordID),Stream,10451);
 LoadDataFromStream(FLastRecordID,Sizeof(FLastRecordID),Stream,10452);
 if (FAllocatedRecordCount > 0) then
   LoadDataFromStream(FDeleteFlagBuffer^,i,Stream,10453);
end; // LoadFromStream


//------------------------------------------------------------------------------
// Save from stream
//------------------------------------------------------------------------------
procedure TMYLDBMemoryRecordManager.SaveToStream(Stream: TStream);
var i: Integer;
begin
 i := (FAllocatedRecordCount div 8) + Integer((FAllocatedRecordCount mod 8) > 0);
 SaveDataToStream(FAllocatedRecordCount,Sizeof(FAllocatedRecordCount),Stream,10444);
 SaveDataToStream(FNoRecordsDeleted,Sizeof(FNoRecordsDeleted),Stream,10445);
 SaveDataToStream(FFirstRecordID,Sizeof(FFirstRecordID),Stream,10446);
 SaveDataToStream(FLastRecordID,Sizeof(FLastRecordID),Stream,10447);
 if (FAllocatedRecordCount > 0) then
  SaveDataToStream(FDeleteFlagBuffer^,i,Stream,10448);
end; // SaveToStream


//------------------------------------------------------------------------------
// add loaded record
//------------------------------------------------------------------------------
procedure TMYLDBMemoryRecordManager.AddLoadedRecord(RecordBuffer: TMYLDBRecordBuffer);
var RecPos: TMYLDBRecordNo;
begin
 Inc(FRecordCount);
 RecPos := FindRecord(FRecordCount-1);
 if (RecPos = INVALID_ID8) then
  raise EMYLDBException.Create(10454,ErrorLInvalidRecordNo,[FRecordCount]);
 Move(RecordBuffer^,PChar(FRecordBuffer + RecPos * FRecordBufferSize)^,FRecordBufferSize);
end; // AddLoadedRecord
}

////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBMemoryTableData
//
////////////////////////////////////////////////////////////////////////////////


//------------------------------------------------------------------------------
// create RecordManager
//------------------------------------------------------------------------------
procedure TMYLDBMemoryTableData.CreateRecordManager;
begin
 if (FRecordManager <> nil) then
  FRecordManager.Free;
 FRecordManager := TMYLDBMemoryRecordManager.Create(
                      GetRecordBufferSize,
                      FAllocRecordsBy
                                                 );
end;// CreateRecordManager


//------------------------------------------------------------------------------
// create field manager
//------------------------------------------------------------------------------
procedure TMYLDBMemoryTableData.CreateFieldManager(FieldDefs: TMYLDBFieldDefs);
begin
 if (FFieldManager <> nil) then
  FFieldManager.Free;
 FFieldManager := TMYLDBBaseFieldManager.Create(Self);
 inherited CreateFieldManager(FieldDefs);
end;// CreateFieldManager


//------------------------------------------------------------------------------
// create
//------------------------------------------------------------------------------
procedure TMYLDBMemoryTableData.CreateIndexManager(IndexDefs: TMYLDBIndexDefs);
begin
 if (FIndexManager <> nil) then
  FIndexManager.Free;
 FIndexManager := TMYLDBBaseIndexManager.Create(Self, FPageManager);
 inherited CreateIndexManager(IndexDefs);
end;// CreateIndexManager


//------------------------------------------------------------------------------
// Create ConstraintManager
//------------------------------------------------------------------------------
procedure TMYLDBMemoryTableData.CreateConstraintManager(ConstraintDefs: TMYLDBConstraintDefs);
var i: Integer;
begin
 if (FConstraintManager <> nil) then
   FConstraintManager.Free;
  // Fill New ObjectIds
  FillDefsByObjectId(ConstraintDefs);
  // Set TableName to Constraits
  for i:=0 to ConstraintDefs.Count-1 do
   case ConstraintDefs[i].ConstraintType of
    ctNotNull:
      TMYLDBConstraintDefNotNull(ConstraintDefs[i]).TableName := FTableName;
    ctCheck:
      TMYLDBConstraintDefCheck(ConstraintDefs[i]).TableName := FTableName;
    ctPK:
      TMYLDBConstraintDefPrimary(ConstraintDefs[i]).TableName := FTableName;
    ctUnique:
      TMYLDBConstraintDefUnique(ConstraintDefs[i]).TableName := FTableName;
    else
      raise EMYLDBException.Create(30040, ErrorGNotImplementedYet);
   end;
  // Create ConstraintManager
  FConstraintManager := TMYLDBBaseConstraintManager.Create(Self);
  FConstraintManager.ConstraintDefs.Assign(ConstraintDefs);
  // Links ObjectIds
  FConstraintManager.LinkObjectIds;
  // Set enpty Names
  FConstraintManager.FillConstraintAutoNames;
end;//CreateConstraintManager


//------------------------------------------------------------------------------
// load table header
//------------------------------------------------------------------------------
procedure TMYLDBMemoryTableData.LoadTableHeader(
              Stream:             TStream;
              var BLOBDescriptor: TMYLDBBLOBDescriptor
                                             );
var FileHeader: TMYLDBMemoryTableFileHeader;
    DatabaseID: TMYLDBSequenceValue;
begin
  LoadDataFromStream(FileHeader,sizeof(FileHeader),Stream,10160);
  if (FileHeader.Signature <> MYLDBSignature) then
    raise EMYLDBException.Create(10161,ErrorLInvalidSignature,
      [FileHeader.Signature,MYLDBSignature]);
  if (FileHeader.Version > MYLDBVersion + 0.0001) then
    raise EMYLDBException.Create(10162,ErrorLInvalidVersion,
      [FileHeader.Version,MYLDBVersion]);
  if (FileHeader.Version < 0.99) then
    raise EMYLDBException.Create(10443,ErrorLInvalidVersion,
      [FileHeader.Version,MYLDBVersion]);
  SetLength(FTableName,FileHeader.NameLength);
  LoadDataFromStream(PChar(@FTableName[1])^,FileHeader.NameLength,Stream,10163);
  LoadDataFromStream(DatabaseID,sizeof(DatabaseID),Stream,10417);


  if (TMYLDBMemoryDatabaseData(FDatabaseData).FLastObjectID < DatabaseID) then
    TMYLDBMemoryDatabaseData(FDatabaseData).FLastObjectID := DatabaseID;

  BLOBDescriptor.StartPosition := Stream.Position;
  BLOBDescriptor.BlockSize := FileHeader.BlockSize;
  BLOBDescriptor.NumBlocks := FileHeader.NumBlocks;
  BLOBDescriptor.UncompressedSize := FileHeader.UncompressedSize;
  BLOBDescriptor.CompressionAlgorithm := FileHeader.CompressionAlgorithm;
  BLOBDescriptor.CompressionMode := FileHeader.CompressionMode;
  FLoadedRecordCount := FileHeader.RecordCount;
end; // LoadTableHeader


//------------------------------------------------------------------------------
// save table header
//------------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩亚洲综合一区二区三区| 久久综合九色综合欧美98| 日韩视频一区二区在线观看| 国产精品欧美综合在线| 日韩电影在线免费| av电影天堂一区二区在线观看| 日韩三级视频在线看| 一区二区三区在线影院| 国产成人av资源| 欧美一区二区高清| 亚洲精品久久嫩草网站秘色| 九九热在线视频观看这里只有精品| 91国产丝袜在线播放| 国产欧美一区二区三区沐欲| 卡一卡二国产精品 | 精品国精品国产| 亚洲激情中文1区| 丰满放荡岳乱妇91ww| 欧美电影免费观看高清完整版| 亚洲午夜久久久久久久久电影网| 成人免费的视频| 国产视频一区在线观看| 精品一区中文字幕| 欧美一区二区免费| 青青草97国产精品免费观看| 欧美区在线观看| 一区二区三区四区五区视频在线观看 | **欧美大码日韩| 丁香天五香天堂综合| 国产人伦精品一区二区| 韩国av一区二区三区| 日韩欧美国产精品一区| 久久精品国内一区二区三区| 欧美成人女星排名| 激情五月婷婷综合| 久久综合久久综合九色| 激情五月激情综合网| 久久这里只有精品首页| 国产精品一级片在线观看| 精品精品欲导航| 国产在线视频一区二区三区| 欧美精品一区二区三区一线天视频| 久久er99热精品一区二区| 欧美成人一区二区| 国产精品综合网| 国产亚洲污的网站| 欧美色综合久久| 亚洲午夜成aⅴ人片| 91麻豆精品国产91久久久久久久久| 亚洲18影院在线观看| 777a∨成人精品桃花网| 激情综合五月天| 国产精品久久久久久久久免费相片| 成人av电影在线观看| 伊人开心综合网| 欧美精品乱码久久久久久| 久久不见久久见中文字幕免费| 久久久久久麻豆| 99国产精品久久久| 亚洲国产成人av网| 26uuu精品一区二区| 成人爽a毛片一区二区免费| 亚洲女同女同女同女同女同69| 欧美日韩一区高清| 久久97超碰色| 亚洲桃色在线一区| 制服.丝袜.亚洲.另类.中文| 国产精品 日产精品 欧美精品| 成人免费在线视频| 91精品国产一区二区| 丁香亚洲综合激情啪啪综合| 亚洲午夜电影在线| 久久久高清一区二区三区| 欧美亚洲综合一区| 国产经典欧美精品| 午夜视频一区二区| 欧美极品xxx| 在线播放日韩导航| 成人自拍视频在线观看| 亚洲成人1区2区| 国产精品麻豆久久久| 91精品国产91久久久久久最新毛片 | 久久精品男人天堂av| 在线亚洲高清视频| www.久久久久久久久| 国产精品一区二区三区四区| 精品成人佐山爱一区二区| 99在线精品免费| 九九**精品视频免费播放| 亚洲国产乱码最新视频 | 中文字幕第一区二区| 91精品国产综合久久婷婷香蕉| 成人福利视频在线看| 蜜桃精品视频在线观看| 一区二区成人在线视频| 欧美国产成人在线| 精品国产一区二区三区久久影院| 欧美日本国产视频| 色综合婷婷久久| 波多野结衣亚洲| 日韩欧美中文字幕公布| 三级不卡在线观看| 一区二区三区四区不卡在线 | 欧美精品xxxxbbbb| 日韩一级完整毛片| 国产一区二区在线观看免费| 国产精品麻豆久久久| 91福利在线播放| 91福利视频网站| 欧美三级在线看| 无码av免费一区二区三区试看| 国产精品的网站| 国产精品网曝门| 国产精品久久久久久久蜜臀| 中文字幕国产一区| 国产精品污www在线观看| 国产欧美一二三区| 国产三级一区二区| 国产视频视频一区| 中文字幕欧美国产| 亚洲婷婷综合久久一本伊一区| 中文字幕制服丝袜成人av| 成人欧美一区二区三区在线播放| 国产精品国产三级国产| 中文av一区二区| 亚洲欧美激情在线| 夜夜嗨av一区二区三区| 亚洲成a人在线观看| 日韩精品五月天| 美腿丝袜亚洲一区| 国产精品白丝jk黑袜喷水| 国产成人高清视频| 91免费观看视频| 欧美日韩亚洲丝袜制服| 精品三级av在线| 国产精品蜜臀在线观看| 中文字幕制服丝袜一区二区三区| 亚洲精品乱码久久久久久久久| 亚洲成精国产精品女| 久久电影网站中文字幕| 国产黄色精品网站| 色综合天天综合在线视频| 91麻豆精品国产| 久久综合九色欧美综合狠狠| 国产精品美女一区二区三区| 亚洲国产成人av| 国产精品一区不卡| 欧美色网一区二区| 欧美精品一区二区三区蜜桃| 亚洲免费在线看| 久久国产欧美日韩精品| 不卡的av电影在线观看| 欧美日韩中文字幕一区| 久久综合久久久久88| 亚洲精品国产一区二区三区四区在线| 日韩精品一级二级| 大胆亚洲人体视频| 欧美美女直播网站| 中文字幕亚洲区| 国内成人精品2018免费看| 一本高清dvd不卡在线观看| 欧美va亚洲va香蕉在线| 一区二区三区毛片| 国产不卡视频在线观看| 亚洲丝袜美腿综合| 奇米色一区二区| 亚洲婷婷综合色高清在线| 色综合天天狠狠| 久久蜜桃av一区二区天堂| 亚洲香蕉伊在人在线观| 91亚洲精品久久久蜜桃网站 | 韩国理伦片一区二区三区在线播放| 麻豆国产一区二区| 欧洲激情一区二区| 最好看的中文字幕久久| 欧美高清一级片在线| 青青草一区二区三区| 在线精品视频免费播放| 国产精品污网站| 国内久久精品视频| 欧美三级电影在线看| 日韩久久一区二区| 国产盗摄女厕一区二区三区| 精品欧美乱码久久久久久1区2区| 五月天丁香久久| 在线免费观看日本欧美| 国产精品不卡一区二区三区| 国产一区二区三区不卡在线观看| 91精品国产手机| 偷偷要91色婷婷| 欧美三级日韩三级国产三级| 综合电影一区二区三区| 成人国产免费视频| 国产丝袜欧美中文另类| 国产激情视频一区二区在线观看 | 欧美变态tickle挠乳网站| 五月天丁香久久| 欧美日韩二区三区| 天堂成人免费av电影一区| 欧美日韩成人综合在线一区二区|