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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? myldbtempengine.pas

?? 一個(gè)本地database引擎,支持中文T_Sql查詢(xún),兼容DELPHI標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)控件
?? PAS
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
 end; // GetRecordMode
end; // GetRecordFromFirstPosition


//------------------------------------------------------------------------------
// return result for attempt of getting record relatively to last position
// and set RecordID to new record ID
//------------------------------------------------------------------------------
function TMYLDBTemporaryRecordManager.GetRecordFromLastPosition(
        GetRecordMode: TMYLDBGetRecordMode;
        var RecordID:  TMYLDBRecordNo
                                  ): TMYLDBGetRecordResult;
begin
 Result := grrError;
 case GetRecordMode of
  grmPrior:
   begin
    RecordID := FRecordCount-1;
    Result := grrOK;
   end;
  grmCurrent:
   begin
    Result := grrError;
   end;
  grmNext:
   begin
    Result := grrEOF;
   end;
 end; // GetRecordMode
end; // GetRecordFromLastPosition


//------------------------------------------------------------------------------
// return result for attempt of getting record relatively any position
// and set RecordID to new record ID
//------------------------------------------------------------------------------
function TMYLDBTemporaryRecordManager.GetRecordFromAnyPosition(
        GetRecordMode: TMYLDBGetRecordMode;
        var RecordID:  TMYLDBRecordNo
                                  ): TMYLDBGetRecordResult;
begin
 Result := grrError;
 case GetRecordMode of
  grmPrior:
   begin
    Result := grrBOF;
    if (RecordID > 0) then
     begin
      Dec(RecordID);
      Result := grrOK;
     end; // RecordID > 0
   end;
  grmCurrent:
   begin
    if ((RecordID >= FRecordCount) or (RecordID < 0)) then
     // current record does not exist
     Result := grrError
    else
     Result := grrOK;
   end;
  grmNext:
   begin
    Result := grrEOF;
    if (RecordID < FRecordCount-1) then
     begin
      Inc(RecordID);
      Result := grrOK;
     end;
   end;
 end; // GetRecordMode
end; // GetRecordFromAnyPosition


//------------------------------------------------------------------------------
// create
//------------------------------------------------------------------------------
constructor TMYLDBTemporaryRecordManager.Create(
                        RecordBufferSize:     Integer;
                        RecordsPerPage:       Integer;
                        AllocRecordsBy:       Integer;
                        DisableTempFiles:     Boolean
                      );
begin
 if (RecordBufferSize = 0) then
  raise EMYLDBException.Create(10124,ErrorLInvalidRecordSize);
 FRecordCount := 0;
 FRecordBufferSize := RecordBufferSize;
 FRecordsPerPage := RecordsPerPage;
 if (FRecordsPerPage = 0) then
  FRecordsPerPage := 1;
 FMaxCachedRecordCount := ((MemoryManager.GetFreeMemorySize div 10) div
                          FRecordBufferSize);
 FPageSize := FRecordsPerPage * FRecordBufferSize;
 FTempPage := MemoryManager.GetMem(FPageSize);
 FTempPageRecordCount := 0;
 FCachedRecordCount := 0;
 FCache := nil;
 FAllocRecordsBy := AllocRecordsBy;
 FTempPageFile := nil;
 FDisableTempFiles := DisableTempFiles;
end; // Create;


//------------------------------------------------------------------------------
// destroy
//------------------------------------------------------------------------------
destructor TMYLDBTemporaryRecordManager.Destroy;
begin
 Empty(SYSTEM_SESSION_ID);
 MemoryManager.FreeAndNillMem(FTempPage);
 inherited Destroy;
end; // Destroy


//------------------------------------------------------------------------------
// Empty
//------------------------------------------------------------------------------
procedure TMYLDBTemporaryRecordManager.Empty(SessionID: TMYLDBSessionID);
begin
 FRecordCount := 0;
 FTempPageRecordCount := 0;
 if (FCache <> nil) then
  MemoryManager.FreeAndNillMem(FCache);
 FCachedRecordCount := 0;
 FAllocatedRecordCount := 0;
 if (FTempPageFile <> nil) then
   FreeAndNil(FTempPageFile);
end; // Empty


//------------------------------------------------------------------------------
// add record and return its number
//------------------------------------------------------------------------------
function TMYLDBTemporaryRecordManager.AddRecord(
                                              SessionID: TMYLDBSessionID;
                                              RecordBuffer: TMYLDBRecordBuffer;
                                              var RecordID: TMYLDBRecordID
                                              ): Boolean;
var SaveToTemp: Boolean;
begin
 try
   SaveToTemp := False;
   if (FCachedRecordCount >= FAllocatedRecordCount) then
    begin
     // need extending cache or writing to temporary file
     if (FDisableTempFiles or (FAllocatedRecordCount < FMaxCachedRecordCount)) then
      begin
       // create or extend cache
       if (FDisableTempFiles) then
        Inc(FAllocatedRecordCount,FAllocRecordsBy)
       else
         if (FAllocatedRecordCount + FAllocRecordsBy <= FMaxCachedRecordCount) then
          Inc(FAllocatedRecordCount,FAllocRecordsBy)
         else
          FAllocatedRecordCount := FMaxCachedRecordCount;
       if (FCache = nil) then
        FCache := MemoryManager.GetMem(FAllocatedRecordCount * FRecordBufferSize)
       else
        MemoryManager.ReallocMem(FCache,(FAllocatedRecordCount * FRecordBufferSize));
       Inc(FCachedRecordCount);
      end
     else
      begin
       SaveToTemp := True;
       // need writing to temporary file
       if (FTempPageFile = nil) then
        FTempPageFile := TMYLDBFileStream.Create(GetTempFileName,fmCreate,True);
       SaveTempPage;
       Move(RecordBuffer^,(FTempPage + FTempPageRecordCount * FRecordBufferSize)^,
         FRecordBufferSize);
       Inc(FTempPageRecordCount);
      end;
    end
   else
    begin
     // no need in extending
     Inc(FCachedRecordCount);
    end;
   if (not SaveToTemp) then
    Move(RecordBuffer^,(FCache + FRecordCount * FRecordBufferSize)^,
         FRecordBufferSize);
   Move(FRecordCount,RecordID,sizeof(RecordID));
   Inc(FRecordCount);
   Result := True;
 except
   Result := False;
 end;
end; // AddRecord


//------------------------------------------------------------------------------
// update record, return true if record was updated, false if record was deleted
//------------------------------------------------------------------------------
function TMYLDBTemporaryRecordManager.UpdateRecord(SessionID: TMYLDBSessionID; RecordBuffer: TMYLDBRecordBuffer; RecordID: TMYLDBRecordID): Boolean;
begin
  Result := False;
end;// UpdateRecord


//------------------------------------------------------------------------------
// delete record, return true if record was deleted, false if record was deleted earlier
//------------------------------------------------------------------------------
function TMYLDBTemporaryRecordManager.DeleteRecord(SessionID: TMYLDBSessionID; var RecordID: TMYLDBRecordID): Boolean;
begin
  Result := False;
end;// DeleteRecord


//------------------------------------------------------------------------------
// get record
//------------------------------------------------------------------------------
procedure TMYLDBTemporaryRecordManager.GetRecordBuffer(SessionID: TMYLDBSessionID;
                                        var NavigationInfo: TMYLDBNavigationInfo);
var RecordNo: TMYLDBRecordNo;
begin
 RecordNo := 0;
 Move(NavigationInfo.RecordID,RecordNo,sizeof(NavigationInfo.RecordID));
 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,
                                        RecordNo
                                                               );
   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,
                                        RecordNo
                                                               );
   if (NavigationInfo.GetRecordResult = grrOK) then
    NavigationInfo.LastPosition := False;
  end
 else
  NavigationInfo.GetRecordResult := GetRecordFromAnyPosition(
                                        NavigationInfo.GetRecordMode,
                                        RecordNo
                                                               );
 if (NavigationInfo.GetRecordResult = grrOK) then
  begin
   NavigationInfo.GetRecordResult := grrError;
   if (ReadRecord(NavigationInfo.RecordBuffer,RecordNo)) then
    NavigationInfo.GetRecordResult := grrOK;
  end; // record retrieved successfully
 Move(RecordNo,NavigationInfo.RecordID,sizeof(NavigationInfo.RecordID));
end; // GetRecordBuffer


//------------------------------------------------------------------------------
// return 0,1, or -1 if (1 = 2), (1 > 2) or (1 < 2)
//------------------------------------------------------------------------------
function TMYLDBTemporaryRecordManager.CompareRecordID(RecordID1: TMYLDBRecordID; RecordID2: TMYLDBRecordID): Integer;
var RecordNo1, RecordNo2: TMYLDBRecordNo;
begin
 RecordNo1 := 0;
 RecordNo2 := 0;
 Move(RecordID1,RecordNo1,Sizeof(RecordID1));
 Move(RecordID2,RecordNo2,Sizeof(RecordID2));
 if (RecordNo1 = RecordNo2) then
  Result := 0
 else
 if (RecordNo1 > RecordNo2) then
  Result := 1
 else
  Result := -1;
end; // CompareRecordID


//------------------------------------------------------------------------------
// return record no
//------------------------------------------------------------------------------
function TMYLDBTemporaryRecordManager.GetApproximateRecNo(SessionID: TMYLDBSessionID;
                                          RecordID: TMYLDBRecordID): TMYLDBRecordNo;
begin
 Result := 0;
 Move(RecordID,Result,Sizeof(RecordID));
 if (Result >= FRecordCount) then
  Result := -1
 else
  begin
   Inc(Result);
  end;
end; // GetApproximateRecNo


////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBTemporaryPageManager
//
////////////////////////////////////////////////////////////////////////////////


//------------------------------------------------------------------------------
// InternalAddPage
//------------------------------------------------------------------------------
procedure TMYLDBTemporaryPageManager.InternalAddPage(aPage: TMYLDBPage);
var
  PageNo: Integer;
begin
  PageNo := FAllocatedPageCount;
  if (FDisableTempFiles or (PageNo < FMaxMemoryPageCount)) then
   begin
    FMemoryPageManager.InternalAddPage(aPage);
    if (aPage.PageNo >= FAllocatedPageCount) then
     begin
      FAllocatedPageCount := aPage.PageNo +1;
      FAllocatedPageMap.Size := FAllocatedPageCount;
     end;
    FAllocatedPageMap.SetBit(aPage.PageNo, True);
    Inc(FPageCount);
   end
  else
   begin
    if (FTempPageFile = nil) then
      FTempPageFile := TMYLDBFileStream.Create(GetTempFileName,fmCreate, True);
    Inc(FAllocatedPageCount);
    FAllocatedPageMap.Size := FAllocatedPageCount;
    Inc(FPageCount);
    FAllocatedPageMap.SetBit(PageNo, True);
    if (FTempPageFile.Size < FAllocatedPageCount * FPageSize) then
      FTempPageFile.Size := FAllocatedPageCount * FPageSize * 3 div 2;
    aPage.PageNo := PageNo;
    if ((not aPage.OwnBuffer) or (aPage.PageBuffer = nil)) then
     begin
       aPage.AllocPageBuffer;
       aPage.OwnBuffer := True;
     end;
   end;
end;// InternalAddPage


//------------------------------------------------------------------------------
// InternalRemovePage
//------------------------------------------------------------------------------
procedure TMYLDBTemporaryPageManager.InternalRemovePage(PageNo: TMYLDBPageNo);
begin
  Dec(FPageCount);
  FAllocatedPageMap.SetBit(PageNo, False);
  if (FDisableTempFiles or (PageNo < FMaxMemoryPageCount)) then
   FMemoryPageManager.InternalRemovePage(PageNo)
end;// InternalRemovePage


//------------------------------------------------------------------------------
// InternalReadPage
//------------------------------------------------------------------------------
function TMYLDBTemporaryPageManager.InternalReadPage(aPage: TMYLDBPage): Boolean;
begin
  if (not FAllocatedPageMap.GetBit(aPage.PageNo)) then
   raise EMYLDBException.Create(10396, ErrorANotReleasedPageIsAllocated);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲女子a中天字幕| 97精品视频在线观看自产线路二 | 欧美日本免费一区二区三区| 国产欧美一区二区三区鸳鸯浴| 亚洲一级二级在线| 日韩欧美色综合网站| 日本欧美一区二区三区| 精品日韩一区二区三区 | 成人永久aaa| 亚洲国产日产av| 91小视频在线免费看| 亚洲精品视频一区| 久久伊人中文字幕| 日本伦理一区二区| 国产乱码精品1区2区3区| 国产精品美日韩| 欧美精品日韩一本| 91性感美女视频| 久久国产视频网| 亚洲小少妇裸体bbw| 亚洲国产精品高清| 欧美一区二区三区的| 成人av午夜影院| 欧美a级理论片| 中文字幕在线观看一区二区| 欧美性xxxxxxxx| eeuss鲁片一区二区三区 | 欧美xxxxxxxx| 欧美日韩在线播放| 韩国v欧美v日本v亚洲v| 亚洲妇女屁股眼交7| 亚洲欧洲99久久| 中文欧美字幕免费| 久久在线观看免费| 26uuu国产电影一区二区| 在线综合视频播放| 宅男噜噜噜66一区二区66| 九九九精品视频| 亚洲精品久久久蜜桃| 国产精品久久久久aaaa| 国产女人水真多18毛片18精品视频 | 欧美亚洲一区二区三区四区| 成人午夜激情在线| 成人久久18免费网站麻豆| 国产在线观看免费一区| 激情丁香综合五月| 韩国欧美一区二区| 国产精品自拍av| 国产精品一区二区久久精品爱涩| 紧缚奴在线一区二区三区| 美女视频黄免费的久久| 国产在线精品一区二区夜色| 麻豆精品久久久| 国产剧情一区二区| 国产a区久久久| 91成人看片片| 欧美久久高跟鞋激| 久久先锋影音av| 久久久久久久精| 国产欧美一区二区精品性| 国产精品女同一区二区三区| 亚洲精品一卡二卡| 日本系列欧美系列| 国产中文一区二区三区| 成人动漫av在线| 欧美人动与zoxxxx乱| 国产亚洲欧美日韩日本| 亚洲乱码国产乱码精品精98午夜 | 亚洲第一二三四区| 极品销魂美女一区二区三区| 不卡在线观看av| 欧美精选午夜久久久乱码6080| 久久亚洲春色中文字幕久久久| 成人欧美一区二区三区白人 | 中文字幕在线不卡国产视频| 亚洲国产另类av| 国产一区二区三区国产| 欧美午夜电影在线播放| 久久精品无码一区二区三区| 亚洲美女免费视频| 国产一级精品在线| 欧美亚洲另类激情小说| 国产欧美精品国产国产专区 | 国产一区二区三区免费看| 99麻豆久久久国产精品免费| 日韩欧美一区在线| 亚洲一区在线观看免费 | 色拍拍在线精品视频8848| 久久一二三国产| 久久er99热精品一区二区| 精品视频999| 亚洲精品高清在线| 波多野结衣中文字幕一区二区三区| 日韩亚洲电影在线| 青青草国产精品97视觉盛宴 | 日韩av网站在线观看| 日韩在线一区二区| 欧美午夜电影网| 亚洲自拍另类综合| 色综合久久久久网| 亚洲图片激情小说| 国产91精品露脸国语对白| 欧美肥胖老妇做爰| 日韩在线播放一区二区| 91精品国产综合久久精品性色| 亚洲影院免费观看| 欧美日韩精品是欧美日韩精品| 亚洲一区电影777| 欧美日韩激情一区二区| 亚洲福利视频三区| 欧美日韩精品一区视频| 首页国产欧美久久| 日韩一级免费观看| 国模一区二区三区白浆| 中文字幕乱码久久午夜不卡 | 免费观看成人鲁鲁鲁鲁鲁视频| 欧美一区在线视频| 久久国产生活片100| 久久久精品黄色| 99久久99久久免费精品蜜臀| 日韩伦理电影网| 欧美久久久久久久久久| 国产原创一区二区| 亚洲欧美欧美一区二区三区| 欧美日韩国产综合视频在线观看 | 国产精品网站在线| 色狠狠av一区二区三区| 日韩精品一区第一页| 久久众筹精品私拍模特| 91毛片在线观看| 奇米精品一区二区三区四区| 2024国产精品| 欧洲av一区二区嗯嗯嗯啊| 麻豆精品视频在线| 亚洲免费观看在线观看| 日韩三级免费观看| 91蜜桃网址入口| 国产乱码一区二区三区| 一级日本不卡的影视| 国产亚洲美州欧州综合国| 在线亚洲一区观看| 国产成人午夜99999| 亚洲影院久久精品| 中文字幕在线不卡一区| 欧美电影免费提供在线观看| 色av一区二区| 国产精品一卡二| 日韩精品亚洲一区| 亚洲男人的天堂网| 欧美极品美女视频| 精品成人佐山爱一区二区| 欧美综合天天夜夜久久| 丁香另类激情小说| 韩国v欧美v亚洲v日本v| 欧美aaaaa成人免费观看视频| 亚洲猫色日本管| 亚洲欧洲日韩一区二区三区| 国产亚洲污的网站| 日韩网站在线看片你懂的| 欧美另类高清zo欧美| 91成人免费网站| 欧美做爰猛烈大尺度电影无法无天| proumb性欧美在线观看| 成人久久久精品乱码一区二区三区| 成人免费视频caoporn| 日韩电影在线看| 亚洲国产精品久久人人爱蜜臀| 国产精品福利电影一区二区三区四区| 久久精品水蜜桃av综合天堂| 久久久久久综合| 欧美国产综合一区二区| 日韩一区二区在线观看| 成人性生交大合| 亚洲精选视频在线| 一本到高清视频免费精品| 亚洲一区二区av电影| 91福利小视频| 丝袜诱惑亚洲看片| 国精品**一区二区三区在线蜜桃| 亚洲天堂成人网| 欧美色欧美亚洲另类二区| 亚洲三级久久久| 一区二区在线电影| 中文字幕高清一区| 国产精品麻豆99久久久久久| 国产精品盗摄一区二区三区| 一二三四区精品视频| 久久久蜜臀国产一区二区| 国产欧美一区二区精品性色超碰| 自拍av一区二区三区| 亚洲高清三级视频| 精品一区二区三区视频| 成人国产亚洲欧美成人综合网| 欧美日韩综合色| 欧美www视频| 亚洲永久精品大片| 韩国中文字幕2020精品| 日本在线不卡视频| 亚洲第一久久影院| 亚洲高清免费视频|