⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datastore.pas

📁 内存数据库,用于与数据库操作上进行缓冲
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  function ClearValues(Column:integer):integer;overload;
  function FindGroupChange(row,level:integer):integer;
  function FindRequired(dwbuffer:TTbcDwBuffer;row,colnbr:integer;colname:string;updateonly:boolean):integer;


  function GetFormat(Column:integer):string;overload;
  function GetFormat(Column:string):string;overload;

  function GetValidate(Column:string):string;overload;
  function GetValidate(Column:integer):string;overload;

  function GetValue(Column:string;index:integer):string;overload;
  function GetValue(Column:integer;index:integer):string;overload;

  function  GroupCalc:integer;

  function ImportClipboard(StartRow:integer=1;EndRow:integer=2147483646;StartColumn:integer=1;EndColumn:integer=200000;DwStartColumn:integer=1):integer;
  function ImportFile(FileName:string;StartRow:integer=1;EndRow:integer=2147483646;StartColumn:integer=1;EndColumn:integer=200000;DwStartColumn:integer=1):integer;
  function Importstring(str:string;StartRow:integer=1;EndRow:integer=2147483646;StartColumn:integer=1;EndColumn:integer=200000;DwStartColumn:integer=1):integer;
  function Print:integer;

  function ReselectRow(row:integer):integer;

  function SaveAs(FileName:string;SaveAsType:TTbcDwSaveAsType;ColHeading:boolean):integer;

  function SaveAsAscii(FileName:string;Separator:string=#9;Quote:string='"';LineEnding:string=#13#10):integer;

  function SetFormat(Column:integer;AFormat:string):integer;overload;
  function SetFormat(Column:string;AFormat:string):integer;overload;

  function  SetItemStatus(row:integer;Column:string;dwBuffer:TTbcDwBuffer=dwPrimary;ItemStatus:TTbcDwItemStatus=isNotModified):integer;overload;
  function  SetItemStatus(row:integer;Column:integer;dwBuffer:TTbcDwBuffer=dwPrimary;ItemStatus:TTbcDwItemStatus=isNotModified):integer;overload;

  function SetSQLPreview(SqlSyntax:string):integer;
  function SetText(Value:string):integer;
  function SetValidate(Column:integer;ARule:string):integer;overload;
  function SetValidate(Column:string;ARule:string):integer;overload;

  function SetValue(Column:integer;Index:integer;Value:string):integer;overload;
  function SetValue(Column:string;Index:integer;Value:string):integer;overload;

  function ShareData(dsSecond:TTbcDataStore):integer;
  function ShareDataOff:integer;
  //2007_11_2 每次对FQuery进行操作前检查FQuery的连接状态,如果为False则设为True
  procedure CheckQueryActive; //2007_11_2 武磊 EndStart 添加原因 在MDI的形式下,释放一个窗口中的DataStore,会影响其他窗口的DataStore.FQuery.Activate 的状态(被自动修改为False).添加此方法用来检查每次对Query进行操作时的状态是否为True

    //没有实现的函数列表结束
  protected

    function   RowBufFree(Buf:TObjectList):integer;
    function   ExprElemListFree(ExprElemList:TObjectList):integer;

    function   ResetFieldHashTrie:integer;

    function   RetrieveReset:integer;
    function   InternalDataStructureReset:integer;

    function   internalGetColNumFromColName(const ColName:string):integer;
    function   GetColNameFromColNum(const colNum:integer):string;

    function   BuildNewExternalRow:TTbcDwRow;
    function   BuildNewDbRow:TTbcDwRow;

    function   TbcFieldDefCopy(target:TTbcDwFieldDef;source:TFieldDef):integer;

    function   ChkGetParamsAndGetBuf(row:integer;Column:string;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):TObjectList;overload;
    function   ChkGetParamsAndGetBuf(row:integer;Column:integer;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):TObjectList;overload;


    procedure  ChkRowParams(buf:TObjectList;row:integer);
    function   ChkRowParamsAndGetBuf(row:integer;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):TObjectList;

    function   ChkColParamAndGetColNum(const ColNum:integer):integer;overload;
    function   ChkColParamAndGetColNum(const ColName:string):integer;overload;

    function   ChkColParamsAndGetBuf(Column:integer;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):TObjectList;

    function   InternalRetrieve(SQL:string):integer;
    procedure   InternalSetSQL(SQL:string);
    function   InternalChkSQL(SQL:string):integer;
    procedure   InternalSetDatabase(db:TSDDatabase);

    function   ChkAndGetFieldNum(const FieldExpr:string):integer;

    function   SortCompare(row1:TTbcDwRow;row2:TTbcDwRow):integer;

    function   EvalRow(RowObj:TTbcDwRow;ExprElemList:TObjectList):boolean;

    function   GetRowHashKey(RowObj:TTbcDwRow;ExprElemList:TObjectList):string;
    function   GetRowCMHashKey(RowObj:TTbcDwRow;ColList:TStringList):string;

    function   InternalValidateExpr(const ExprElemList:TObjectList):integer;

    function   InternalSort(dwBuffer:TTbcDwBuffer):integer;

    function   InternalFind(const Buf:TObjectList;const ExprElemList:TObjectList;const StartRow,EndRow:integer;const OriginalExpr:string):integer;

    procedure  DecomposeSortExpr;
    procedure  DecomposeDwExpr(const Expr:string;ExprElemList:TObjectList);
    procedure  SetSaveOriginValue(const ASaveOriginValue:boolean);

    function   DbDs:boolean;
    function   ExternalDs:boolean;

    procedure   ChkDbDs(const ErrMsg:string);
    procedure   ChkExternalDs(const ErrMsg:string);

    procedure   ChkQueryOpen(const ErrMsg:string);
    procedure   ChkQueryClose(const ErrMsg:string);

    procedure   ChkNoData(const ErrMsg:string);
    procedure   ChkNullStr(const s:string;const ErrMsg:string);
    procedure   ChkNullStrList(List:TStrings;const ErrMsg:string);

    procedure   ChkColOverflow(const ColCount:integer;const ErrMsg:string);
    procedure   ChkNewField(const Name: string; DataType: TFieldType;
  Size: Integer; Required: Boolean);
    procedure   InternalSetItemChanged(RowObj:TTbcDwRow;const ColNum:integer);
    function    InternalRemoveRow(dwBuffer:TTbcDwBuffer;row:integer):integer;
    function    InternalRebuildDataRow:integer;
    function    InternalRebuildDataBuffer(Buf:TObjectList):integer;
    function    InternalResetHashFind:integer;

    function    InternalResetDropDownList:integer;

    function    PrepareCommitUpdates:integer;
    function    RebuildBufferAfterCommitUpdates:integer;

    function    InternalSplitFieldNames(const FieldNames:string;TargetList:TStringList):integer;
    function    InternalSplitFieldNums(const FieldNums:string;TargetList:TStringList):integer;

    function    InternalSplitFields(const Fields:string;TargetList:TStringList):integer;
    function    InternalTrimSplitFields(const Fields:string;TargetList:TStringList):integer;

    procedure sdQryUpdateError(DataSet: TDataSet; E: EDatabaseError;
  UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);

  public
  property database:TSDDatabase read FDatabase write InternalSetDatabase;
  property SQL:string read FSQL write InternalSetSQL;
  property OLDSQL:string read FOLDSQL write FOLDSQL;////段永生
  property RowsAffected: Integer read FRowsAffected;
  property EnableTime:boolean read FEnableTime write FEnableTime ;
  property RetrieveArgs:TTbcRetrieveArgs read FRetrieveArgs;

  property SaveOriginValue:boolean read FSaveOriginValue write SetSaveOriginValue;
  property DSType:TTbcDataStoreType read FDSType;


  property UpdateMode:TTbcDwUpdateMode read FUpdateMode write FUpdateMode;
  property EnableUpdateKinds:TUpdateKinds read FEnableUpdateKinds write FEnableUpdateKinds;
  property UpdateSQL:TSDUpdateSQL read FUpdateSQL;

  constructor Create(ADSType:TTbcDataStoreType=dstDB);
  destructor  Destroy;override;

  //field properties series
  function AddField(const Name: string; DataType: TFieldType; Size: Integer = 0;
      Required: Boolean = False):integer;
  function ClearFields:integer;

  function FieldInfoByName(const Name:string;var AColNum:integer;var ADataType: TFieldType):integer;
  function FieldInfoByCol(const AColNum:integer;var AColName:string;var ADataType: TFieldType):integer;

  //filter series
  function Filter:integer;
  function FilteredCount:integer;
  function SetFilter(Expr:string):integer;

  //find series
  function Find(FindExpr:string;StartRow,EndRow:integer):integer;
  function FindBack(FindExpr:string;StartRow,EndRow:integer):integer;

  function SetFind(Expr:string):integer;
  function FindFirst:integer;
  function FindNext:integer;
  function FindPrior:integer;
  function FindLast:integer;
  //hash find series

  function PrepareHashFind(const HashName:string;const HashExpr:string;const CaseSensitive:boolean=true):integer;
  function UnPrepareHashFind(const HashName:string):integer;
  function UnPrepareAllHashFind:integer;

  function HashFind(const HashName:string;const Key:string):integer;

  //current column series
  function GetColumn:integer;
  function GetColumnName:string;overload;

  function SetColumn(Column:integer):integer;overload;
  function SetColumn(Column:string):integer;overload;

  //current row series
  function SetRow(row:integer):integer;
  function GetRow:integer;

  //Column properties series
  function GetColumnName(Column:integer):string;overload;
  function GetColumnNumber(const ColName:string):integer;

  function IsBlobColumn(const Column:integer):boolean;overload;
  function IsBlobColumn(const Column:string):boolean;overload;


  //GetItem series
  function  GetItemBoolean(row:integer;Column:string;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):boolean;overload;
  function  GetItemBoolean(row:integer;Column:integer;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):boolean;overload;

  function  GetItemDate(row:integer;Column:string;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):TDate;overload;
  function  GetItemDate(row:integer;Column:integer;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):TDate;overload;

  function  GetItemDateTime(row:integer;Column:string;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):TDateTime;overload;
  function  GetItemDateTime(row:integer;Column:integer;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):TDateTime;overload;

  function  GetItemTime(row:integer;Column:string;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):TTime;overload;
  function  GetItemTime(row:integer;Column:integer;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):TTime;overload;

  function  GetItemFloat(row:integer;Column:string;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):extended;overload;
  function  GetItemFloat(row:integer;Column:integer;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):extended;overload;

  function  GetItemInteger(row:integer;Column:string;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):integer;overload;
  function  GetItemInteger(row:integer;Column:integer;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):integer;overload;

  function  GetItemLargeInt(row:integer;Column:string;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):LargeInt;overload;
  function  GetItemLargeInt(row:integer;Column:integer;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):LargeInt;overload;

  function  GetItemString(row:integer;Column:string;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):string;overload;
  function  GetItemString(row:integer;Column:integer;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):string;overload;

  function IsItemNull(row:integer;Column:integer;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false): boolean;overload;
  function IsItemNull(row:integer;Column:string;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false): boolean;overload;

  function  SaveBlobItemToFile(row:integer;Column:string;const FileName:string;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;
  function  SaveBlobItemToFile(row:integer;Column:integer;const FileName:string;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;

  function  SaveBlobItemToStream(row:integer;Column:string;Stream:TStream;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;
  function  SaveBlobItemToStream(row:integer;Column:integer;Stream:TStream;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;

  //get one row/column all data list
  function  GetColStringList(TargetList:TStrings;Column:string;IsNullList:TStrings;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):integer;overload;
  function  GetColStringList(TargetList:TStrings;Column:integer;IsNullList:TStrings;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):integer;overload;

  function  GetRowStringList(TargetList:TStrings;Row:integer;IsNullList:TStrings;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):integer;

  //get drop down series
  function NewDDCodeTable(const Column:integer):TTbcCodeTable;overload;
  function NewDDCodeTable(const Column:string):TTbcCodeTable;overload;

  function NewDDCodeTable(const Column:integer;const codes,values:string):TTbcCodeTable;overload;
  function NewDDCodeTable(const Column:string;const codes,values:string):TTbcCodeTable;overload;

  function NewDDDW(const Column:integer;const SQL,CdCol,ValCol:string;const bRetrieve:boolean=true):TTbcDataStore;overload;
  function NewDDDW(const Column:string;const SQL,CdCol,ValCol:string;const bRetrieve:boolean=true):TTbcDataStore;overload;
  function RefreshDDDWs:integer;

  function  GetItemDisplayString(row:integer;Column:string;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):string;overload;
  function  GetItemDisplayString(row:integer;Column:integer;var IsNull:boolean;dwBuffer:TTbcDwBuffer=dwPrimary;OriginalValue:boolean=false):string;overload;

  function GetDDDW(const Column:integer):TTbcDataStore;overload;
  function GetDDDW(const Column:string):TTbcDataStore;overload;

  function GetDDCodeTable(const Column:integer):TTbcCodeTable;overload;
  function GetDDCodeTable(const Column:string):TTbcCodeTable;overload;

  function  FreeDropDownObj(const Column:integer):integer;overload;
  function  FreeDropDownObj(const Column:string):integer;overload;

  //SetItem series
  function  SetItemBoolean(row:integer;Column:string;value:boolean;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;
  function  SetItemBoolean(row:integer;Column:integer;value:boolean;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;

  function  SetItemDate(row:integer;Column:string;value:TDate;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;
  function  SetItemDate(row:integer;Column:integer;value:TDate;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;

  function  SetItemDateTime(row:integer;Column:string;value:TDateTime;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;
  function  SetItemDateTime(row:integer;Column:integer;value:TDateTime;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;

  function  SetItemTime(row:integer;Column:string;value:TTime;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;
  function  SetItemTime(row:integer;Column:integer;value:TTime;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;

  function  SetItemFloat(row:integer;Column:string;value:extended;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;
  function  SetItemFloat(row:integer;Column:integer;value:extended;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;

  function  SetItemInteger(row:integer;Column:string;value:integer;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;
  function  SetItemInteger(row:integer;Column:integer;value:integer;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;

  function  SetItemLargeInt(row:integer;Column:string;value:LargeInt;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;
  function  SetItemLargeInt(row:integer;Column:integer;value:LargeInt;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;

  function  SetItemString(row:integer;Column:string;value:string;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;
  function  SetItemString(row:integer;Column:integer;value:string;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;


  function  LoadBlobItemFromFile(row:integer;Column:string;const FileName:string;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;
  function  LoadBlobItemFromFile(row:integer;Column:integer;const FileName:string;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;


  function  LoadBlobItemFromStream(row:integer;Column:string;Stream:TStream;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;
  function  LoadBlobItemFromStream(row:integer;Column:integer;Stream:TStream;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;

  function SetItemNull(row:integer;Column:integer;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;
  function SetItemNull(row:integer;Column:string;dwBuffer:TTbcDwBuffer=dwPrimary): integer;overload;

  function SetItem(row:integer;column:integer;const value:Variant;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;
  function SetItem(row:integer;column:string;const value:Variant;dwBuffer:TTbcDwBuffer=dwPrimary):integer;overload;

  //Get status series
  function  GetItemStatus(row:integer;Column:string;dwBuffer:TTbcDwBuffer=dwPrimary):TTbcDwItemStatus;overload;
  function  GetItemStatus(row:integer;Column:integer;dwBuffer:TTbcDwBuffer=dwPrimary):TTbcDwItemStatus;overload;

  function  GetRowStatus(row:integer;dwBuffer:TTbcDwBuffer=dwPrimary):TTbcDwRowStatus;
  function  GetRowBookmark(row:integer;dwBuffer:TTbcDwBuffer=dwPrimary):Tbookmark;

  function GetNextModified(row:integer;dwbuffer:TTbcDwBuffer=dwPrimary):integer;

  //row id series
  function GetRowFromRowId(rowid:integer;dwbuffer:TTbcDwBuffer=dwPrimary):integer;
  function GetRowIdFromRow(row:integer;dwbuffer:TTbcDwBuffer=dwPrimary):integer;


  //SQL series
  function GetSQLSelect:string;
  function SetSQLSelect(Sql:string):integer;

  //Database Series
  function GetDatabase:TSDDatabase;
  procedure SetDatabase(db:TSDDatabase);

  //insert series
  function InsertFirst:integer;
  function InsertBefore(row:integer):integer;
  function InsertAfter(row:integer):integer;
  function InsertLast:integer;

  //delete series
  function DeleteRow(row:integer):integer;
  //restore series
  function RestoreRow(const row:integer;const dwBuffer:TTbcDwBuffer=dwPrimary):integer;

  //rows series
  function RowsCopy(CopyBuffer:TTbcDwBuffer;StartRow,EndRow:integer;TargetBuffer:TTbcDwBuffer;BeforeRow:integer):integer;overload;
  function RowsCopy(CopyBuffer: TTbcDwBuffer; StartRow, EndRow: integer;Target: TTbcDataStore; BeforeRow: integer): integer;overload;

  function RowsMove(MoveBuffer:TTbcDwBuffer;StartRow,EndRow:integer;TargetBuffer:TTbcDwBuffer;BeforeRow:integer):integer;overload;
  function RowsMove(MoveBuffer:TTbcDwBuffer;StartRow,EndRow:integer;Target:TTbcDataStore;BeforeRow:integer):integer;overload;

  function RowsDiscard(Buffer:TTbcDwBuffer;StartRow,EndRow:integer):integer;

  //selected series
  function IsSelected(row:integer):boolean;
  function SelectRow(row:integer;select:boolean):integer;
  function GetSelectedRow(row:integer):integer;

  //count Series
  function ModifiedCount:integer;
  function DeletedCount:integer;
  function  RowCount:integer;//得到检索数据个数
  function  ColCount:integer;//得到检索列个数

  //retrieve series
  function Reset:integer;

  function  Retrieve:integer;
  function  RetrieveWithArgs:integer;

  function  Close:integer;
  function  CloseAndClearFieldDefs:integer;
  //move row Series
  function MoveRowFirst(const row:integer):integer;
  function MoveRowUp(const row:integer):integer;
  function MoveRowDown(const row:integer):integer;
  function MoveRowLast(const row:integer):integer;

  function MoveRowTo(const SourceRow,TargetRow:integer):integer;

  function ExchangeRow(const Row1,Row2:integer):integer;

  //sort series
  function SetSort(Expr:string):integer;
  function Sort:integer;
  function IsValidSortExpr(Expr:string):boolean;

  //field update properties series
  function GetFieldUpdateProp(const ColNum:integer;var FieldProp:TTbcFieldUpdateProp):integer;overload;
  function GetFieldUpdateProp(const ColName:string;var FieldProp:TTbcFieldUpdateProp):integer;overload;

  function SetFieldUpdateProp(const ColNum:integer;const FieldProp:TTbcFieldUpdateProp):integer;overload;
  function SetFieldUpdateProp(const ColName:string;const FieldProp:TTbcFieldUpdateProp):integer;overload;


  function SetKeyField(const ColNum:integer;const IsKeyField:boolean=true):integer;overload;
  function SetKeyField(const ColName:string;const IsKeyField:boolean=true):integer;overload;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -