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

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

?? myldbmemengine.pas

?? 一個本地database引擎,支持中文T_Sql查詢,兼容DELPHI標準數據庫控件
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
procedure TMYLDBMemoryTableData.SaveTableHeader(
              Stream:             TStream;
              var BLOBDescriptor: TMYLDBBLOBDescriptor
              );
var FileHeader: TMYLDBMemoryTableFileHeader;
    DatabaseID: TMYLDBSequenceValue;
    i:integer;
begin
//  FileHeader.Signature := MYLDBSignature;
  for i:=0 to 3 do
    FileHeader.Signature[i] := MYLDBSignature[i+1];
  FileHeader.Version := MYLDBVersion;
  FileHeader.RecordCount := FRecordManager.RecordCount;
  FileHeader.UncompressedSize := BLOBDescriptor.UncompressedSize;
  FileHeader.NumBlocks := BLOBDescriptor.NumBlocks;
  FileHeader.BlockSize := BLOBDescriptor.BlockSize;
  FileHeader.CompressionAlgorithm := BLOBDescriptor.CompressionAlgorithm;
  FileHeader.CompressionMode := BLOBDescriptor.CompressionMode;
  FileHeader.NameLength := Length(FTableName);
  SaveDataToStream(FileHeader,sizeof(FileHeader),Stream,10156);
  SaveDataToStream(PChar(@FTableName[1])^,FileHeader.NameLength,Stream,10157);
  DatabaseID := TMYLDBMemoryDatabaseData(FDatabaseData).FLastObjectID;
  SaveDataToStream(DatabaseID,sizeof(DatabaseID),Stream,10416);
  BLOBDescriptor.StartPosition := Stream.Position;
end; // SaveTableHeader


//------------------------------------------------------------------------------
// load blob data
//------------------------------------------------------------------------------
procedure TMYLDBMemoryTableData.LoadBLOBDataFromStream(
        RecordBuffer: TMYLDBRecordBuffer;
        FieldNo:      Integer;
        Stream:       TStream
                             );
var Buffer:                 PChar;
    FBLOBPosition:          Int64;
    Offset,Offset2:         Integer;
    BLOBPartialDescriptor:  TMYLDBPartialTemporaryBLOBDescriptor;
begin
  Offset := FFieldManager.FieldDefs[FieldNo].MemoryOffset;
  Move(PChar(RecordBuffer + Offset)^,FBLOBPosition,sizeof(FBLOBPosition));
  // load disk blob descriptor
  SetStreamPosition(Stream,FBLOBPosition,10202);
  LoadDataFromStream(BLOBPartialDescriptor,sizeof(BLOBPartialDescriptor),
    Stream,10203);
  Offset2 := sizeof(TMYLDBPartialBLOBDescriptor);
  Buffer := MemoryManager.GetMem(BLOBPartialDescriptor.CompressedSize + Offset2);
  PMYLDBPartialBLOBDescriptor(Buffer)^.NumBlocks :=
    BLOBPartialDescriptor.NumBlocks;
  PMYLDBPartialBLOBDescriptor(Buffer)^.UncompressedSize :=
    BLOBPartialDescriptor.UncompressedSize;
  // load compresse blob data
  LoadDataFromStream(PChar(Buffer + Offset2)^,
    BLOBPartialDescriptor.CompressedSize,Stream,10204);
  Move(Buffer,PChar(RecordBuffer + Offset)^,sizeof(Buffer));
end; // LoadBLOBDataFromStream


//------------------------------------------------------------------------------
// load record
//------------------------------------------------------------------------------
procedure TMYLDBMemoryTableData.LoadRecordFromStream(
            RecordBuffer: TMYLDBRecordBuffer;
            Stream:       TStream
                                                  );
var i:                        Integer;
begin
  LoadDataFromStream(RecordBuffer^,GetRecordBufferSize,Stream,10201);
  if (FFieldManager.BlobFieldsPresent) then
   begin
     for i := 0 to FFieldManager.FieldDefs.Count - 1 do
      if (IsBLOBFieldType(FFieldManager.FieldDefs[i].BaseFieldType)) then
        if (not CheckNullFlag(i,RecordBuffer)) then
         begin
          // load blob
          LoadBLOBDataFromStream(RecordBuffer,i,Stream);
         end; // blob field not null
   end;
end; // LoadRecord


//------------------------------------------------------------------------------
// prepare record buffer for save
//------------------------------------------------------------------------------
procedure TMYLDBMemoryTableData.PrepareRecordBufferForSave(
            RecordBuffer:             TMYLDBRecordBuffer;
            BLOBDescriptorList:       TList;
            BLOBDataList:             TList;
            BLOBPosition:             Int64
                                                );
var FBLOBPosition:            Int64;
    i:                        Integer;
    BLOBDataSize:             Integer;
    Offset:                   Integer;
    Buffer:                   PChar;
    PBLOBPartialDescriptor:   PMYLDBPartialTemporaryBLOBDescriptor;
begin
 FBLOBPosition := BLOBPosition;
 for i := 0 to FFieldManager.FieldDefs.Count - 1 do
  if (IsBLOBFieldType(FFieldManager.FieldDefs[i].BaseFieldType)) then
    if (not CheckNullFlag(i,RecordBuffer)) then
     begin
      // save blob field data
      Offset := FFieldManager.FieldDefs[i].MemoryOffset;
      Move(PChar(RecordBuffer + Offset)^,Buffer,Sizeof(Buffer));
      if (Buffer = nil) then
        raise EMYLDBException.Create(10196,ErrorLNilPointer);
      // calculate size of blob data
      BLOBDataSize := MemoryManager.GetMemoryBufferSize(Buffer) -
        sizeof(TMYLDBPartialBLOBDescriptor) +
        sizeof(TMYLDBPartialTemporaryBLOBDescriptor);
      PBLOBPartialDescriptor :=
        MemoryManager.GetMem(sizeof(TMYLDBPartialTemporaryBLOBDescriptor));
      PBLOBPartialDescriptor^.NumBlocks :=
        PMYLDBPartialBLOBDescriptor(Buffer)^.NumBlocks;
      PBLOBPartialDescriptor^.UncompressedSize :=
        PMYLDBPartialBLOBDescriptor(Buffer)^.UncompressedSize;
      PBLOBPartialDescriptor^.CompressedSize := BLOBDataSize -
        sizeof(TMYLDBPartialTemporaryBLOBDescriptor);
      BLOBDataList.Add(Buffer);
      BLOBDescriptorList.Add(PBLOBPartialDescriptor);
      // store offset to blob data instead of pointer to memory buffer
      Move(FBLOBPosition,PChar(RecordBuffer + Offset)^,Sizeof(FBLOBPosition));
      Inc(FBLOBPosition,BLOBDataSize);
     end; // not null blob field
end;


//------------------------------------------------------------------------------
// save record
//------------------------------------------------------------------------------
procedure TMYLDBMemoryTableData.SaveRecordToStream(
            RecordBuffer: TMYLDBRecordBuffer;
            Stream:       TStream
                                                );
var i:                        Integer;
    BLOBDataSize:             Integer;
    Buffer:                   PChar;
    PBLOBPartialDescriptor:   PMYLDBPartialTemporaryBLOBDescriptor;
    BLOBDescriptorList:       TList;
    BLOBDataList:             TList;
begin
 if (FFieldManager.BlobFieldsPresent) then
  begin
   BLOBDescriptorList := TList.Create;
   BLOBDataList := TList.Create;
   try
     PrepareRecordBufferForSave(RecordBuffer,BLOBDescriptorList,
        BLOBDataList,Int64(Stream.Position + Int64(GetRecordBufferSize)));
     SaveDataToStream(RecordBuffer^,GetRecordBufferSize,Stream,10197);
     // save blob fields
     for i := 0 to BLOBDataList.Count - 1 do
      begin
       PBLOBPartialDescriptor := BLOBDescriptorList.Items[i];
       SaveDataToStream(PBLOBPartialDescriptor^,
        sizeof(TMYLDBPartialTemporaryBLOBDescriptor),Stream,10198);
       Buffer := BLOBDataList.Items[i];
       BLOBDataSize := PBLOBPartialDescriptor^.CompressedSize;
       SaveDataToStream(PChar(Buffer + sizeof(TMYLDBPartialBLOBDescriptor))^,BLOBDataSize,Stream,10199);
       MemoryManager.FreeAndNillMem(PBLOBPartialDescriptor);
      end; // not null blob field
   finally
    BLOBDescriptorList.Free;
    BLOBDataList.Free;
   end;
  end // blob fields
 else
  // no blob fields
  SaveDataToStream(RecordBuffer^,GetRecordBufferSize,Stream,10200);
end; // SaveRecord

{
//------------------------------------------------------------------------------
// load all records
//------------------------------------------------------------------------------
procedure TMYLDBMemoryTableData.LoadRecordManager(Stream: TStream);
var RecordBuffer:     TMYLDBRecordBuffer;
    i:                Integer;
begin
  if (FLoadedRecordCount > 0) then
   begin
    FRecordManager.LoadFromStream(Stream);
    RecordBuffer := MemoryManager.GetMem(FRecordManager.RecordBufferSize);
    try
      for i := 0 to FLoadedRecordCount - 1 do
       begin
        LoadRecordFromStream(RecordBuffer,Stream);
        FRecordManager.AddLoadedRecord(RecordBuffer);
       end;
    finally
      MemoryManager.FreeAndNillMem(RecordBuffer);
    end;
   end;
end; // LoadRecordManager


//------------------------------------------------------------------------------
// save all records
//------------------------------------------------------------------------------
procedure TMYLDBMemoryTableData.SaveRecordManager(Stream: TStream);
var RecordBuffer:     TMYLDBRecordBuffer;
    NavigationInfo:   TMYLDBNavigationInfo;
begin
  if (FRecordManager.RecordCount > 0) then
   begin
     FRecordManager.SaveToStream(Stream);
     RecordBuffer := MemoryManager.GetMem(FRecordManager.RecordBufferSize);
     NavigationInfo.LastPosition := False;
     NavigationInfo.FirstPosition := True;
     NavigationInfo.RecordBuffer := RecordBuffer;
     NavigationInfo.GetRecordMode := grmNext;
     try
       FRecordManager.GetRecordBuffer(SYSTEM_SESSION_ID, NavigationInfo);
       if (NavigationInfo.GetRecordResult = grrOK) then
        begin
         NavigationInfo.FirstPosition := False;
         repeat
          // save record buffer and blob fields
          SaveRecordToStream(RecordBuffer,Stream);
          FRecordManager.GetRecordBuffer(SYSTEM_SESSION_ID, NavigationInfo);
         until (NavigationInfo.GetRecordResult <> grrOK);
        end;
     finally
      MemoryManager.FreeAndNillMem(RecordBuffer);
     end;
   end;
end; // SaveRecordManager
}

//------------------------------------------------------------------------------
// return filter bitmap rec count
//------------------------------------------------------------------------------
function TMYLDBMemoryTableData.GetBitmapRecordCount(SessionID: TMYLDBSessionID): TMYLDBRecordNo;
begin
  Result := FRecordManager.RecordCount;
end;// GetBitmapRecordCount


//------------------------------------------------------------------------------
// return filter bitmap rec no by record id
//------------------------------------------------------------------------------
function TMYLDBMemoryTableData.GetBitmapRecNoByRecordID(RecordID: TMYLDBRecordID): TMYLDBRecordNo;
begin
  Result := RecordID.PageNo;
end; // GetBitmapRecNoByRecordID


//------------------------------------------------------------------------------
// return filter bitmap rec no by record id
//------------------------------------------------------------------------------
function TMYLDBMemoryTableData.GetRecordIDByBitmapRecNo(RecordNo: TMYLDBRecordNo): TMYLDBRecordID;
begin
  Result.PageNo := RecordNo;
  Result.PageItemNo := 0;
end; // GetRecordIDByBitmapRecNo


//------------------------------------------------------------------------------
// create
//------------------------------------------------------------------------------
constructor TMYLDBMemoryTableData.Create(
                        aDatabaseData: TMYLDBDatabaseData;
                        AllocRecordsBy: Integer
                      );
begin
 inherited Create(aDatabaseData);
 FPageManager := TMYLDBMemoryPageManager.Create;
 FAllocRecordsBy := AllocRecordsBy;
 FDisableTempFiles := True;
end; // Create;


//------------------------------------------------------------------------------
// destroy
//------------------------------------------------------------------------------
destructor TMYLDBMemoryTableData.Destroy;
begin
 EmptyTable(nil);
 DeleteAllIndexes(nil);
 FPageManager.ApplyChanges(SYSTEM_SESSION_ID);
 FPageManager.Free;
 inherited Destroy;
end; // Destroy


//------------------------------------------------------------------------------
// create table
//------------------------------------------------------------------------------
procedure TMYLDBMemoryTableData.CreateTable(
                          Cursor: TMYLDBCursor;
                          FieldDefs: TMYLDBFieldDefs;
                          IndexDefs: TMYLDBIndexDefs;
                          ConstraintDefs: TMYLDBConstraintDefs
                                         );
begin
{$IFDEF DEBUG_TRACE_DATASET}
 aaWriteToLog('TMYLDBMemoryTableData.CreateTable start');
 aaWriteToLog('TMYLDBMemoryTableData.CreateTable FieldDefs.Count = '+IntToStr(FieldDefs.Count));
{$ENDIF}
 if ((FieldDefs.Count <= 0) and (not IsDesignMode)) then
   raise EMYLDBException.Create(10025, ErrorLNoFields);
 TableName := Cursor.TableName;

 //CreateSequenceManager;
 CreateFieldManager(FieldDefs);
 CreateIndexManager(IndexDefs);
 CreateConstraintManager(ConstraintDefs);
 //BuildSequences;
 CreateRecordManager;
 InitCursor(Cursor);
 FIndexManager.CreateIndexesByIndexDefs(Cursor);
 if (Cursor <> nil) then
  if (not Cursor.Session.InTransaction) then
   PageManager.ApplyChanges(Cursor.Session.SessionID);
{$IFDEF DEBUG_TRACE_DATASET}
 aaWriteToLog('TMYLDBMemoryTableData.CreateTable finish');
{$ENDIF}
end;// CreateTable


//------------------------------------------------------------------------------
// delete table
//------------------------------------------------------------------------------
procedure TMYLDBMemoryTableData.DeleteTable(Cursor: TMYLDBCursor; DesignMode: Boolean = False);
begin
 inherited DeleteTable(Cursor, DesignMode);
 if ((not DesignMode) or (FCursorList.Count = 0)) then
   Free;
end; // DeleteTable


//------------------------------------------------------------------------------
// empty table
//------------------------------------------------------------------------------
procedure TMYLDBMemoryTableData.EmptyTable(Cursor: TMYLDBCursor);
var
    NavigationInfo:   TMYLDBNavigationInfo;
begin
 inherited EmptyTable(nil);

 if (FRecordManager <> nil) then
   if (FFieldManager.BlobFieldsPresent and (FRecordManager.RecordCount > 0)) then
    begin
     NavigationInfo.LastPosition := False;
     NavigationInfo.FirstPosition := True;
     NavigationInfo.RecordBuffer := MemoryManager.GetMem(FRecordManager.RecordBufferSize);
     NavigationInfo.GetRecordMode := grmNext;
     try
       FRecordManager.GetRecordBuffer(SYSTEM_SESSION_ID, NavigationInfo);
       if (NavigationInfo.GetRecordResult = grrOk) then
        begin

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产欧美在线| 欧美理论片在线| 美女视频免费一区| 一区二区三区中文字幕电影| 555www色欧美视频| 激情亚洲综合在线| 亚洲色图20p| 国产精品国产三级国产专播品爱网 | 免费成人在线视频观看| 国产精品久久免费看| 久久中文娱乐网| 日韩一区二区在线看| 在线观看日韩电影| 欧美综合视频在线观看| 一本久久a久久精品亚洲| 免费三级欧美电影| 三级一区在线视频先锋| 偷拍亚洲欧洲综合| 亚洲成人高清在线| 丝袜美腿亚洲色图| 日韩—二三区免费观看av| 五月婷婷综合在线| 亚洲天堂久久久久久久| 国产午夜精品一区二区三区四区| 日韩欧美国产精品一区| 日韩欧美一区中文| 正在播放一区二区| 精品免费日韩av| 久久精品夜夜夜夜久久| 久久久亚洲精华液精华液精华液| 国产人伦精品一区二区| 亚洲特级片在线| 午夜久久久影院| 亚洲国产日产av| 亚洲第一电影网| 免费观看30秒视频久久| 狠狠色丁香九九婷婷综合五月| 青娱乐精品在线视频| 激情六月婷婷久久| 风间由美中文字幕在线看视频国产欧美| 亚洲h精品动漫在线观看| 日韩va欧美va亚洲va久久| 乱中年女人伦av一区二区| 国产黄色91视频| 色悠悠久久综合| 91精品国产色综合久久久蜜香臀| 久久综合色一综合色88| 日本一区二区动态图| 亚洲一区在线观看免费| 毛片av一区二区| 成人午夜大片免费观看| 欧美久久久久免费| 中文字幕乱码久久午夜不卡 | 久久久久九九视频| 夜夜嗨av一区二区三区网页 | 欧美一级片在线看| 国产嫩草影院久久久久| 午夜精品久久久久久久| 国产一区二区视频在线播放| 91免费版pro下载短视频| 欧美电影一区二区| 亚洲精品一二三四区| 亚洲成人黄色影院| www.久久精品| 久久精品欧美日韩精品| 日韩精品电影在线| 99r精品视频| 国产婷婷色一区二区三区四区| 亚洲综合久久久| 99国产精品视频免费观看| 精品捆绑美女sm三区| 亚洲va韩国va欧美va精品| 欧美aaa在线| 精品污污网站免费看| 国产精品美女久久久久久2018 | 欧美日韩高清在线播放| 2020国产精品自拍| 麻豆一区二区三| 在线成人av影院| 亚洲国产日韩av| 色婷婷av久久久久久久| 国产精品久久久久久久久快鸭| 激情久久久久久久久久久久久久久久| 欧美性色欧美a在线播放| 中文乱码免费一区二区 | 97精品久久久久中文字幕 | 成人免费av网站| 国产三级一区二区| 国产成人夜色高潮福利影视| 国产iv一区二区三区| 国产欧美一区二区精品仙草咪| 久久99久久99精品免视看婷婷| 欧美一区二区在线视频| 另类成人小视频在线| 在线观看免费视频综合| 一区二区三区在线免费播放| 在线日韩av片| 午夜成人在线视频| 日韩欧美国产麻豆| 日韩在线a电影| 欧美哺乳videos| 国产麻豆精品久久一二三| 精品对白一区国产伦| 国产一区二区免费视频| 欧美变态tickle挠乳网站| 美女mm1313爽爽久久久蜜臀| 精品久久久久久久一区二区蜜臀| 精品一二三四区| 日本一区二区免费在线| va亚洲va日韩不卡在线观看| 国产亚洲一区二区三区| 成人h动漫精品一区二| 亚洲欧美电影一区二区| 欧美电影一区二区| 国产精品一区二区久激情瑜伽 | 蜜桃视频在线一区| 久久综合九色欧美综合狠狠| 国产寡妇亲子伦一区二区| 亚洲午夜电影网| 国产欧美一区二区精品久导航| 色婷婷av一区二区三区大白胸| 久久精品99国产精品日本| 亚洲最色的网站| 欧美国产一区二区| 欧美一级搡bbbb搡bbbb| 91亚洲精品一区二区乱码| 韩国女主播一区| 日本欧美在线看| 亚洲一区在线视频| 亚洲欧洲在线观看av| xvideos.蜜桃一区二区| 欧美乱熟臀69xxxxxx| 一本色道久久综合精品竹菊| 久久精品99国产国产精| 日韩高清中文字幕一区| 一区二区国产视频| 国产精品二区一区二区aⅴ污介绍| 日韩美一区二区三区| 欧美日韩一区成人| 欧美怡红院视频| 在线观看网站黄不卡| 99久久国产综合色|国产精品| 免费观看在线综合| 亚洲午夜久久久久中文字幕久| 国产精品少妇自拍| 国产日韩欧美激情| 国产午夜一区二区三区| www欧美成人18+| 久久久国产一区二区三区四区小说 | 亚洲第一成人在线| 亚洲自拍偷拍综合| 亚洲男人的天堂在线aⅴ视频| 中日韩免费视频中文字幕| 2020日本不卡一区二区视频| 精品久久久三级丝袜| 欧美电影免费观看高清完整版| 欧美日韩国产成人在线91| 欧美日本在线播放| 欧美一区二区三区系列电影| 欧美久久久久久久久| 欧美电影一区二区三区| 日韩一区二区精品在线观看| 欧美一二三四在线| 欧美精品一区二区三区蜜臀| 久久嫩草精品久久久久| 久久久不卡影院| 国产精品久久久久久久久免费丝袜| 国产精品亲子伦对白| 1区2区3区国产精品| 亚洲一二三区不卡| 日韩激情av在线| 国产乱码精品一区二区三区忘忧草| 国产一区 二区| 91在线看国产| 欧美日韩国产美女| 欧美tickling挠脚心丨vk| 久久久噜噜噜久噜久久综合| 国产精品伦理在线| 亚洲国产精品一区二区尤物区| 男女性色大片免费观看一区二区 | 久久99国产精品尤物| 风流少妇一区二区| 在线观看亚洲专区| 精品盗摄一区二区三区| 中文字幕在线不卡| 无吗不卡中文字幕| 国产成人啪午夜精品网站男同| 日本道免费精品一区二区三区| 91精品久久久久久久99蜜桃| 久久久久久久久久久黄色| 亚洲人妖av一区二区| 蜜桃一区二区三区四区| 91网址在线看| 欧美电影精品一区二区| 亚洲精品视频在线观看网站| 久久精品国产澳门| 欧美日韩三级在线| 欧美韩日一区二区三区四区| 天天色图综合网| 99久久er热在这里只有精品66|