📄 datastore.pas
字号:
function SetKeyFields(const KeyFields:string;const IsKeyField:boolean=true):integer;
function SetKeyFieldNums(const KeyFieldNums:string;const IsKeyField:boolean=true):integer;
function IsKeyField(const ColNum:integer):boolean;overload;
function IsKeyField(const ColName:string):boolean;overload;
function SetRecKeyField(const ColNum:integer;const IsRecKeyField:boolean=true):integer;overload;
function SetRecKeyField(const ColName:string;const IsRecKeyField:boolean=true):integer;overload;
function SetRecKeyFields(const RecKeyFields:string;const IsRecKeyField:boolean=true):integer;
function SetRecKeyFieldNums(const RecKeyFieldNums:string;const IsRecKeyField:boolean=true):integer;
function IsRecKeyField(const ColNum:integer):boolean;overload;
function IsRecKeyField(const ColName:string):boolean;overload;
function SetFieldTableName(const ColNum:integer;const TableName:string):integer;overload;
function SetFieldTableName(const ColName:string;const TableName:string):integer;overload;
function SetFieldsTableName(const Fields:string;const TableName:string):integer;
function SetFieldNumsTableName(const FieldNums:string;const TableName:string):integer;
function GetFieldTableName(const ColNum:integer):string;overload;
function GetFieldTableName(const ColName:string):string;overload;
function SetFieldOriginName(const ColNum:integer;const OriginName:string):integer;overload;
function SetFieldOriginName(const ColName:string;const OriginName:string):integer;overload;
function SetFieldsOriginName(const Fields:string;const OriginNames:string):integer;overload;
function SetFieldNumsOriginName(const FieldNums:string;const OriginNames:string):integer;overload;
function GetFieldOriginName(const ColNum:integer):string;overload;
function GetFieldOriginName(const ColName:string):string;overload;
function SetFieldUpdatable(const ColNum:integer;const IsUpdatable:boolean=true):integer;overload;
function SetFieldUpdatable(const ColName:string;const IsUpdatable:boolean=true):integer;overload;
function SetFieldsUpdatable(const Fields:string;const IsUpdatable:boolean=true):integer;
function SetFieldNumsUpdatable(const FieldNums:string;const IsUpdatable:boolean=true):integer;
function IsFieldUpdatable(const ColNum:integer):boolean;overload;
function IsFieldUpdatable(const ColName:string):boolean;overload;
//field display Alignment property series
function SetFieldAlignment(const ColNum:integer;const Alignment:TAlignment):integer;overload;
function SetFieldAlignment(const ColName:string;const Alignment:TAlignment):integer;overload;
function SetFieldsAlignment(const Fields:string;const Alignments:string):integer;overload;
function SetFieldNumsAlignment(const FieldNums:string;const Alignments:string):integer;overload;
function GetFieldAlignment(const ColNum:integer):TAlignment;overload;
function GetFieldAlignment(const ColName:string):TAlignment;overload;
function GetFieldNumsAlignment(const ColNums:string):string;
function GetFieldsAlignment(const ColNames:string):string;
//field display DisplayLabel property series
function SetFieldDisplayLabel(const ColNum:integer;const DisplayLabel:string):integer;overload;
function SetFieldDisplayLabel(const ColName:string;const DisplayLabel:string):integer;overload;
function SetFieldsDisplayLabel(const Fields:string;const DisplayLabels:string):integer;overload;
function SetFieldNumsDisplayLabel(const FieldNums:string;const DisplayLabels:string):integer;overload;
function GetFieldDisplayLabel(const ColNum:integer):string;overload;
function GetFieldDisplayLabel(const ColName:string):string;overload;
function GetFieldNumsDisplayLabel(const ColNums:string):string;overload;
function GetFieldsDisplayLabel(const ColNames:string):string;overload;
//field display EditMask property series
function SetFieldEditMask(const ColNum:integer;const EditMask:string):integer;overload;
function SetFieldEditMask(const ColName:string;const EditMask:string):integer;overload;
function SetFieldsEditMask(const Fields:string;const EditMasks:string):integer;overload;
function SetFieldNumsEditMask(const FieldNums:string;const EditMasks:string):integer;overload;
function GetFieldEditMask(const ColNum:integer):string;overload;
function GetFieldEditMask(const ColName:string):string;overload;
function GetFieldNumsEditMask(const ColNums:string):string;overload;
function GetFieldsEditMask(const ColNames:string):string;overload;
//field display DisplayWidth property series
function SetFieldDisplayWidth(const ColNum:integer;const DisplayWidth:integer):integer;overload;
function SetFieldDisplayWidth(const ColName:string;const DisplayWidth:integer):integer;overload;
function SetFieldsDisplayWidth(const Fields:string;const DisplayWidths:string):integer;overload;
function SetFieldNumsDisplayWidth(const FieldNums:string;const DisplayWidths:string):integer;overload;
function GetFieldDisplayWidth(const ColNum:integer):integer;overload;
function GetFieldDisplayWidth(const ColName:string):integer;overload;
function GetFieldNumsDisplayWidth(const ColNums:string):string;overload;
function GetFieldsDisplayWidth(const ColNames:string):string;overload;
//field display Visible property series
function SetFieldVisible(const ColNum:integer;const Visible:boolean):integer;overload;
function SetFieldVisible(const ColName:string;const Visible:boolean):integer;overload;
function SetFieldsVisible(const Fields:string;const Visibles:string):integer;overload;
function SetFieldNumsVisible(const FieldNums:string;const Visibles:string):integer;overload;
function GetFieldVisible(const ColNum:integer):boolean;overload;
function GetFieldVisible(const ColName:string):boolean;overload;
function GetFieldNumsVisible(const ColNums:string):string;overload;
function GetFieldsVisible(const ColNames:string):string;overload;
//update series
function PrepareUpdateSQL(const UpdateTable:string):integer;
function UpdatesPending:boolean;
function ApplyUpdates:integer;
function CancelUpdates:integer;
function CommitUpdates:integer;
published
end;
TTbcDSSortRec=record
ds:TTbcDataStore;
row:TTbcDwRow;
end;
function gFTbcDSSortCompare(const E1, E2) : Integer;
function gFTbcIntSortCompare(const E1, E2) : Integer;
function gFTbcInt64SortCompare(const E1, E2) : Integer;
function gFTbcExtendedSortCompare(const E1, E2) : Integer;
//find,sort filter中表达式的书写方法以及规范
//1,表达式逻辑表达式
//2. 列名必须以[]括起
implementation
const iCstRowBufReserved:integer=350;
const iCstItemStatus:array[0..4] of TTbcDwItemStatus=(isUnknown,isDataModified,isNew,isNewModified,isNotModified);
const iCstFieldClass:array[0..25] of string=(
'TADTField',
'TAggregateField',
'TArrayField',
'TAutoIncField',
'TBCDField',
'TBlobField',
'TBooleanField',
'TBytesField',
'TCurrencyField',
'TDateField',
'TDateTimeField',
'TFloatField',
'TGraphicField',
'TGuidField',
'TIDispatchField',
'TIntegerField',
'TLargeIntField',
'TMemoField',
'TReferenceField',
'TSmallIntField',
'TStringField',
'TTimeField',
'TVarBytesField',
'TVariantField',
'TWideStringField',
'TWordField'
);
const iCstFieldType:array[0..25] of TFieldType=(
ftADT,
ftUnknown,//'TAggregateField',
ftArray,
ftAutoInc,
ftBCD,
ftBlob,
ftBoolean,
ftBytes,
ftCurrency,
ftDate,
ftDateTime,
ftFloat,
ftGraphic,
ftGuid,
ftIDispatch,
ftInteger,
ftLargeInt,
ftMemo,
ftReference,
ftSmallInt,
ftString,
ftTime,
ftVarBytes,
ftVariant,
ftWideString,
ftWord
);
{ TTbcDataStore }
function TTbcDataStore.AcceptText: integer;
begin
result:=1;
end;
function TTbcDataStore.ClearValues(Column: string): integer;
begin
result:=1;
end;
function TTbcDataStore.ClearValues(Column: integer): integer;
begin
result:=1;
end;
constructor TTbcDataStore.Create(ADSType:TTbcDataStoreType);
var i:integer;
begin
FDSType:=ADSType;
FUpdateMode:=dwuWhereKeyAndUpdatable;
FSaveOriginValue:=false;
FRetrieveArgs:=TTbcRetrieveArgs.Create;
FQuery:=TSDQuery.Create(nil);
FRowsAffected:=0;
FEnableUpdateKinds:=[ukModify, ukInsert, ukDelete];
FUpdateSQL:=TSDUpdateSQL.Create(nil);
FQuery.UpdateObject:=FUpdateSQL;
FFieldDefs:=TTbcDwFieldDefs.Create;//各列描述
FFieldDefsSave:=TTbcDwFieldDefs.Create;//各列描述保存
FFieldNames:=TStringList.Create;//各列名称
FFieldNames.Sorted:=false;
FHashFieldNames:=TStringHashTrie.Create;
FHashFieldNames.AutoFreeObjects:=false;
FHashFieldNames.CaseSensitive:=true;
FFieldSrv:=TTbcTFieldSrv.Create;
FExternalFieldSrv:=TTbcExternalFieldSrv.Create;
FNextRowID:=1;
FPrimaryBuf:=TObjectList.Create(false); //primary buffer 数据
FDeleteBuf:=TObjectList.Create(false); //delete buffer 数据
FFilterBuf:=TObjectList.Create(false); //filter buffer 数据
FDiscardBuf:=TObjectList.Create(false); //discard row buffer
FCurRow:=0;FCurCol:=0;
FRowCount:=0;FColCount:=0;
FSortExpr:='';//sort 表达式
FSortColList:=TStringList.Create;
FSortColList.Sorted:=false;
FSortOrderList:=TStringList.Create;
FSortOrderList.Sorted:=false;
FFilterExpr:=''; //Filter 表达式
FFilterElemList:=TObjectList.Create(false);
FFindExpr:=''; //查找表达式
FFindCurPos:=-1; //存放下一个开始查找记录位置
FFindElemList:=TObjectList.Create(false);//为FindFirst,FindLast,FindNext,FindPrior 函数服务
FTmpFindElemList:=TObjectList.Create(false);//为Find 函数服务
FHashFindList:=TObjectList.Create(false);
FHashFindName:=TStringList.Create;
FHashFindName.Sorted:=false;
FEnableTime:=false;
FItemData1:=TTbcDwItemData.Create;
FItemData2:=TTbcDwItemData.Create;
FStringSrv:=TTbcStringSrv.Create;
FExprEval:=TTbcExprEval.Create;
FSQLSrv:=TTbcSQLSrv.Create;
FTmpSQLSrv:=TTbcSQLSrv.Create;
FTmpStrList:=TStringList.Create;
FTmpStrList.sorted:=false;
FTmpStrList2:=TStringList.Create;
FTmpStrList2.sorted:=false;
for i:=0 to MaxTbcDwColumn - 1 do
begin
FFieldTypes[i]:=ftUnknown;//各列数据类型
//drop down datawindow or drop down codetable object
FDropDownList[i]:=nil;
end;
end;
function TTbcDataStore.DeletedCount: integer;
begin
result:=FDeleteBuf.Count;
end;
function TTbcDataStore.DeleteRow(row: integer): integer;
var RowObj:TTbcDwRow;
begin
result:=-1;
//endstart Add 2007-11-2
CheckQueryActive;
//endstart Add/End
//if row=0 then row:=FCurRow;
try
ChkRowParams(FPrimaryBuf,row);
except
raise;
exit;
end;
RowObj:=TTbcDwRow(FPrimaryBuf[row - 1]);
if DbDS then
begin
try
FQuery.GotoBookmark(RowObj.Bookmark);
FQuery.Delete;
except
raise;
exit;
end;
end;
FPrimaryBuf.Delete(row - 1);
FDeleteBuf.Add(RowObj);
result:=1;
FQuery.UpdateRecordTypes:=[rtModified, rtInserted, rtDeleted, rtUnmodified];
end;
destructor TTbcDataStore.Destroy;
begin
RetrieveReset;
InternalResetHashFind;
InternalResetDropDownList;
FRetrieveArgs.Free;
FQuery.CloseDatabase(Self.FDatabase);
FQuery.Close;
FUpdateSQL.Free;
FQuery.Free;
FFieldDefs.Free;
FFieldDefsSave.Free;
FFieldNames.Free;
FHashFieldNames.Free;
FFieldSrv.Free;
FExternalFieldSrv.Free;
FPrimaryBuf.Free;
FDeleteBuf.Free;
FFilterBuf.Free;
FDiscardBuf.Free;
FSortColList.Free;
FSortOrderList.Free;
ExprElemListFree(FFilterElemList);
FFilterElemList.Free;
ExprElemListFree(FFindElemList);
ExprElemListFree(FTmpFindElemList);
FFindElemList.Free;//为FindFirst,FindLast,FindNext,FindPrior 函数服务
FTmpFindElemList.Free;//为Find 函数服务
FHashFindList.Free;
FHashFindName.Free;
FItemData1.Free;
FItemData2.Free;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -