{"id":626,"date":"2014-09-16T16:10:23","date_gmt":"2014-09-16T08:10:23","guid":{"rendered":"http:\/\/blog.qdac.cc\/?p=626"},"modified":"2015-02-28T10:27:48","modified_gmt":"2015-02-28T02:27:48","slug":"delphi%e4%b8%addb-pas%e5%8e%86%e5%8f%b2%e7%bb%8f%e7%ba%ac","status":"publish","type":"post","link":"https:\/\/blog.qdac.cc\/?p=626","title":{"rendered":"Delphi\u4e2dDB.PAS\u53d8\u8fc1\u6982\u7565"},"content":{"rendered":"<p>\u4e3a\u4e86\u5199QDB\uff0c\u6211\u5728\u7fa4\u91cc\u6536\u96c6\u4e86\u5927\u5bb6\u63d0\u4f9b\u7684\u4ece2007~XE7\u7248\u7684[Data.]DB.PAS\u6587\u4ef6\uff0c\u5e76\u8fdb\u884c\u4e00\u4e9b\u5bf9\u6bd4\uff0c\u4ee5\u8bd5\u56fe\u627e\u51fa\u5b83\u7684\u53d8\u8fc1\u5386\u53f2\uff0c\u6211\u4eec\u4ee52007\u7248\uff08VER180,VER185)\u4e3a\u57fa\u51c6\uff0c\u8bb0\u5f55\u4e0b\u53d8\u66f4\u7684\u5185\u5bb9\uff1a<\/p>\n<h4>\u3010RAD Studio 2009-VER200\u3011<\/h4>\n<p>+ TFieldType \u65b0\u589e\u4ee5\u4e0b\u7c7b\u578b\uff1a<\/p>\n<pre class=\"lang:delphi decode:true\">ftLongWord, ftShortint, ftByte, ftExtended, ftConnection, ftParams, ftStream<\/pre>\n<p>*\u00a0WideString\u6539\u4e3aUnicodeString<\/p>\n<p>+ TFieldDefs\u589e\u52a0\u4e86\u4e00\u4e2a\u4fdd\u62a4\u7684\u6210\u5458\u51fd\u6570\u6765\u83b7\u53d6\u5b57\u6bb5\u5b9a\u4e49\u7c7b\uff1a<\/p>\n<pre class=\"lang:delphi decode:true\">function GetFieldDefClass: TFieldDefClass; virtual;<\/pre>\n<p>* TFieldDefs\u6784\u9020\u51fd\u6570\u6539\u6210\u4e86\u865a\u65b9\u6cd5<\/p>\n<p>*\u00a0TIndexDef\u6784\u9020\u51fd\u6570\u6539\u6210\u4e86\u865a\u65b9\u6cd5<\/p>\n<p>+\u00a0TIndexDefs\u52a0\u5165\u4e86\u4e00\u4fdd\u62a4\u7684\u6210\u5458\u51fd\u6570\u6765\u83b7\u53d6\u7d22\u5f15\u5b9a\u4e49\u7c7b\uff1a<\/p>\n<pre class=\"lang:delphi decode:true \">function GetIndexDefClass: TIndexDefClass; virtual;<\/pre>\n<p>* TFlatList\u7684\u6784\u9020\u65b9\u6cd5\u53d8\u6210\u865a\u65b9\u6cd5<\/p>\n<p>* TFields\u7684\u6784\u9020\u65b9\u6cd5\u53d8\u6210\u865a\u65b9\u6cd5<\/p>\n<p>* TLookupList\u7684\u6784\u9020\u65b9\u6cd5\u53d8\u6210\u865a\u65b9\u6cd5<\/p>\n<p>+ TField\u52a0\u5165AsExtended\u3001AsAnsiString\u3001AsBytes\u5c5e\u6027\u53caGetLookupListClass\u51fd\u6570\uff0cGetData\u548cSetData\u52a0\u5165\u4e86overload\uff0c\u5f53\u7136\u5176\u5b50\u7c7b\u4e5f\u5c31\u52a0\u5165\u4e86\u76f8\u5e94\u7684\u5b9e\u73b0\uff0c\u5c31\u7565\u8fc7\u4e0d\u8868\u3002<\/p>\n<pre class=\"lang:delphi decode:true\">function GetLookupListClass: TLookupListClass; virtual;<\/pre>\n<p>+ \u65b0\u589eTLongwordField\u7ee7\u627f\u81eaTNumericField\uff1bTByteField\u7ee7\u627f\u81eaTIntegerField\uff1bTExtendedField\u7ee7\u627f\u81eaTNumericField\uff1b<\/p>\n<p>* TCheckConstraints\u7684\u6784\u9020\u65b9\u6cd5\u53d8\u6210\u865a\u65b9\u6cd5<\/p>\n<p><strong>* TBlobData\u7531String\u66ff\u6362\u4e3aTBytes<\/strong><\/p>\n<p>+ TParam\u65b0\u589e\u4ee5\u4e0b\u51fd\u6570\u548c\u5c5e\u6027\uff1a<\/p>\n<pre class=\"lang:delphi decode:true \">procedure SetDataSet(Dataset: TDataSet; AInstanceOwner: Boolean);\r\nprocedure SetParams(Params: TParams; AInstanceOwner: Boolean);\r\nprocedure SetStream(Stream: TStream; AInstanceOwner: Boolean);\r\nproperty AsShortInt: LongInt read GetAsInteger write SetAsShortInt;\r\nproperty AsByte: LongInt read GetAsInteger write SetAsByte;\r\nproperty AsLongWord: LongWord read GetAsLongWord write SetAsLongWord;\r\nproperty AsLargeInt: LargeInt read GetAsLargeInt write SetAsLargeInt;\r\nproperty AsWideString: UnicodeString read GetAsWideString write SetAsWideString;\r\nproperty AsAnsiString: AnsiString read GetAsAnsiString write SetAsAnsiString;\r\nproperty AsBytes: TBytes read GetAsBytes write SetAsBytes;\r\nproperty AsDataSet: TDataSet read GetAsDataSet write SetAsDataSet;\r\nproperty AsParams: TParams read GetAsParams write SetAsParams;\r\nproperty AsStream: TStream read GetAsStream write SetAsStream;\r\n<\/pre>\n<p>+\u00a0TParams\u52a0\u5165\u4e86\u4e00\u4fdd\u62a4\u7684\u6210\u5458\u51fd\u6570\u6765\u83b7\u53d6\u53c2\u6570\u7c7b\uff1a<\/p>\n<pre class=\"lang:delphi decode:true \">function GetParamClass: TParamClass; virtual;<\/pre>\n<p>+\u00a0IParamImplementation\u3001TParamObject\u3001TParamDataSetObject\u3001TParamParamsObject\u3001TParamStreamObject<\/p>\n<p>+\u00a0TPSCommandType\u65b0\u589ectServerMethod<\/p>\n<p>*\u00a0IProviderSupport2\u88ab\u6807\u8bb0\u4e3a\u4f5c\u5e9f<\/p>\n<p><strong>* TBookmark\u7531AnsiString\u6539\u4e3aTBytes<\/strong><\/p>\n<p><strong>+ \u65b0\u589eTRecordBuffer \uff0c\u7c7b\u578b\u5bf9\u5e94\u4e8e PByte<\/strong><\/p>\n<p>*\u00a0TBufferList\u7531array of PChar\u6539\u4e3a array of \u00a0TRecordBuffer<\/p>\n<p>*\u00a0TBlobByteData\u7531array of Byte\u6539\u4e3aTBytes<\/p>\n<p><strong>* TDataSet\u7684CalcBuffer\u7b49\u8bb0\u5f55\u7f13\u51b2\u533a\u7c7b\u578b\u7531PChar\u6539\u53d8\u4e86TRecordBuffer\uff0cBookmark\u7531TBookmarkStr\u6539\u4e3aTBookmark<\/strong><\/p>\n<p>+ TDataSet.GetFieldClass\u52a0\u5165\u4e86\u4e00\u4e2a\u91cd\u8f7d<\/p>\n<p>+ TDataSet\u589e\u52a0\u4ee5\u4e0b\u865a\u62df\u65b9\u6cd5<\/p>\n<pre class=\"lang:delphi decode:true \">function GetFieldDefsClass: TFieldDefsClass; virtual;\r\nfunction GetFieldDefListClass: TFieldDefListClass; virtual;\r\nfunction GetFieldsClass: TFieldsClass; virtual;\r\nfunction GetFieldListClass: TFieldListClass; virtual;\r\nfunction GetCheckConstraintsClass: TCheckConstraintsClass; virtual;\r\nfunction GetAggFieldsClass: TFieldsClass; virtual;\r\nfunction GetIndexDefsClass: TIndexDefsClass; virtual;\r\nfunction GetParamsClass: TParamsClass; virtual;<\/pre>\n<p>+\u00a0ftFixedSizeTypes\u96c6\u5168\u65b0\u589e[ftLongWord, ftShortInt, ftByte, ftExtended]<\/p>\n<p>+\u00a0DefaultFieldClasses\u65b0\u589e[TStringField,TLongWordField,\u00a0TShortintField,\u00a0TByteField,\u00a0TExtendedField],Interval\u7c7b\u578b\u88ab\u6620\u5c04\u5230TStringField\u4e86<\/p>\n<p>+\u00a0FieldTypeNames\u548cFieldTypeVarMap\u65b0\u589e\u65b0\u7c7b\u578b\u7684\u540d\u79f0<\/p>\n<h4>\u3010RAD Studio 2010-VER210\u3011<\/h4>\n<p>+ TFieldType\u65b0\u589e\u7c7b\u578b[ftTimeStampOffset, ftObject, ftSingle]<\/p>\n<p>+\u00a0TNamedItem\u65b0\u589e\u54c8\u5e0c<\/p>\n<pre class=\"lang:delphi decode:true \">class function HashName(const Name: string): Cardinal; static;<\/pre>\n<p>+ \u65b0\u589eInt64\u522b\u540dLargeint\u5b9a\u4e49<\/p>\n<p>+ TField\u65b0\u589e\u4ee5\u4e0b\u5c5e\u6027\uff0c\u5e76\u4e14\u6709\u4e9b\u51fd\u6570\u6539\u6210\u4e86\u5185\u8054<\/p>\n<pre class=\"lang:delphi decode:true\">property AsSQLTimeStampOffset: TSQLTimeStampOffset read GetAsSQLTimeStampOffset write SetAsSQLTimeStampOffset;\r\nproperty AsSingle: Single read GetAsSingle write SetAsSingle;\r\nproperty AsLargeInt: Largeint read GetAsLargeInt write SetAsLargeInt;<\/pre>\n<p>+ \u65b0\u589eTSingleField\u3001TSQLTimeStampOffsetField\u5b9e\u73b0<\/p>\n<p>+ TParam\u4e5f\u52a0\u5165\u4e86AsSQLTimeStampOffset\u3001AsSingle\u3001AsLargeInt\u5c5e\u6027<\/p>\n<p>*\u00a0TParamObject\u3001TParamStreamObject\u53ca\u76f8\u5173\u5b9a\u4e49\u5b8c\u5168\u53d8\u4e86<\/p>\n<p>+\u00a0ftFixedSizeTypes\u65b0\u589eftTimeStampOffset, ftSingle\uff0c\u540c\u6837DefaultFieldClasses\u3001FieldTypeNames\u548cFieldTypeVarMap\u90fd\u589e\u52a0\u4e86\u65b0\u7c7b\u578b<\/p>\n<h4>\u3010RadStudio XE-VER220\u3011<\/h4>\n<p>* \u57fa\u672c\u53ef\u4ee5\u8ba4\u4e3a\u65e0\u53d8\u5316\uff0c\u4f60\u662f\u5c06Windows\u5355\u5143\u7684\u5f15\u7528\u6539\u4e3a\u6761\u4ef6\u7f16\u8bd1\u9009\u9879\u4e86\u3002<\/p>\n<h4>\u3010RadStudio XE2-VER230\u3011<\/h4>\n<p>* \u5f88\u591a\u51fd\u6570\u7684\u6574\u6570\u7c7b\u578b\u53c2\u6570\u88ab\u6362\u6210\u4e86NativeInt\uff0c\u4e5f\u5c31\u662f\u8bf4NativeInt\u6b63\u5f0f\u8fdb\u5165DB.PAS\u7684\u89c6\u91ce\u3002<\/p>\n<pre class=\"lang:delphi decode:true\">TDataLink\/TDataSet\/TDataSource\/TDataSetDesigner.DataEvent\u7684Info\u53c2\u6570\r\nTDataSource.NotifyDataLinks\u3001NotifyLinkTypes\u7684Info\u53c2\u6570<\/pre>\n<p>+ \u65b0\u589eTDataSetCommandStates \u679a\u4e3e\u7c7b\u578b\u548cIDataSetCommandSupport\u63a5\u53e3<\/p>\n<h4>\u3010RadStudio XE3-VER240\u3011<\/h4>\n<p>* TList\u76f8\u5173\u7684\u6210\u5458\u5168\u90e8\u6539\u4e3a\u4e86\u6cdb\u578bTList&lt;\u7c7b\u578b&gt;<\/p>\n<p>*\u00a0TFieldChars\u5728\u79fb\u52a8\u5e73\u53f0\u6807\u8bb0\u4e3a\u4f5c\u5e9f\u4e86\u3002<\/p>\n<p>+\u00a0ISubDataSet\u63a5\u53e3\u53caTValueBuffer\u7c7b\u578b\uff08\u6620\u5c04\u5230TArray&lt;Byte&gt;\uff09<\/p>\n<p>*\u00a0TField\u7684FValueBuffer\u7531Pointer\u6539\u4e3aTValueBuffer\uff0c\u76f8\u5173\u7684\u51fd\u6570\u4e5f\u90fd\u6539\u6210TValueBuffer\u7684\u91cd\u8f7d\u4e86\uff1a<\/p>\n<pre class=\"lang:delphi decode:true \">procedure CopyData(Source, Dest: TValueBuffer); overload; virtual;\r\nfunction GetData(Buffer: TValueBuffer; NativeFormat: Boolean = True): Boolean; overload;\r\nprocedure SetData(Buffer: TValueBuffer; NativeFormat: Boolean = True); overload;\r\nprocedure Validate(Buffer: TValueBuffer); overload;<\/pre>\n<p>+ TField\u52a0\u5165AsLongWord\u5c5e\u6027<\/p>\n<p>* TBlobField\u7684Value\u7531TBytes\u6539\u6210\u4e86TArray&lt;Byte&gt;<\/p>\n<p>*\u00a0TAggregateField\u7684Handle\u7c7b\u578b\u7531Pointer\u6539\u6210\u4e86TAggHandle\uff08\u6620\u5c04\u5230TObject\uff09\uff0c\u5e76\u4e14\u53d1\u5e03\u4e86\u4e00\u4e2aHandle\u5c5e\u6027\u3002<\/p>\n<p>+ \u65b0\u589e\u4e86TBitConverter<\/p>\n<p>*\u00a0TBlobData\u3001TBookmark\u7c7b\u578b\u518d\u6b21\u6539\u4e3a\u4e86TArray&lt;Byte&gt;<\/p>\n<p>+\u00a0TBlobByteData\u6620\u5c04\u5230TArray&lt;Byte&gt;<\/p>\n<p>* TDataSet.DataConvert\u51fd\u6570\u91cd\u8f7d\u4e3a\uff08\u597d\u5427\uff0c\u53c8\u662fTValueBuffer\uff09\uff1a<\/p>\n<pre class=\"lang:delphi decode:true \">procedure DataConvert(Field: TField; Source, Dest: TValueBuffer; ToNative: Boolean); overload; virtual;<\/pre>\n<p><strong>\u00a0* TBookmark\u5f00\u59cb\u771f\u6b63\u5927\u663e\u795e\u5a01<\/strong><\/p>\n<pre class=\"lang:delphi decode:true \">procedure GetBookmarkData(Buffer: TRecordBuffer; Data: TBookmark); overload; virtual;\/\/Data:Pointer-&gt;TBookmark\r\nprocedure InternalAddRecord(Buffer: TRecordBuffer; Append: Boolean); overload; virtual;\/\/Buffer:Pointer-&gt;TRecordBuffer\r\nprocedure InternalGotoBookmark(Bookmark: TBookmark); overload; virtual;\/\/Bookmark:Pointer-&gt;TBookmark\r\nprocedure SetBookmarkData(Buffer: TRecordBuffer; Data: TBookmark); overload; virtual;\/\/Data:Pointer-&gt;TBookmark\r\nprocedure SetFieldData(Field: TField; Buffer: TValueBuffer); overload; virtual;\/\/Buffer:Pointer-&gt;TValueBuffer\r\nprocedure SetFieldData(Field: TField; Buffer: TValueBuffer; NativeFormat: Boolean); overload; virtual;\/\/Buffer:Pointer-&gt;TValueBuffer\r\nfunction GetFieldData(Field: TField; Buffer: TValueBuffer): Boolean; overload; virtual;\/\/\/Buffer:Pointer-&gt;TValueBuffer\r\nfunction GetFieldData(FieldNo: Integer; Buffer: TValueBuffer): Boolean; overload; virtual;\/\/Buffer:Pointer-&gt;TValueBuffer\r\nfunction GetFieldData(Field: TField; Buffer: TValueBuffer; NativeFormat: Boolean): Boolean; overload; virtual;;\/\/Buffer:Pointer-&gt;TValueBuffer\r\n<\/pre>\n<p><strong>\u00a0* TWideDataSet\u88ab\u5220\u9664\u4e86<\/strong><\/p>\n<h4>\u3010RADStudio XE4-VER250\u3011<\/h4>\n<p>* \u8bb8\u591a\u5185\u90e8\u6210\u5458\u88ab\u6807\u8bb0\u4e3aWeak\uff0c\u4ee5\u89e3\u51b3\u5faa\u73af\u5f15\u7528\u8ba1\u6570\u95ee\u9898<\/p>\n<p>* TField\u589e\u52a0\u4e86\u4e00\u4e2aFValueBufferPtr\u7684Pointer\u7c7b\u578b\u6210\u5458\uff08\u6298\u817e\uff09<\/p>\n<p>+\u52a0\u5165TRecBuf\u7c7b\u578b\u5b9a\u4e49\uff0c\u6620\u5c04\u5230\uff08 NativeInt\uff09\uff0c\u7136\u540eTBufList\u6620\u5c04\u4e3a TArray&lt;NativeInt&gt;;\u4e25\u91cd\u6000\u7591\u56de\u5934\u6620\u5c04\u5230TArray&lt;TRecBuf&gt;<\/p>\n<p>* TDataSet\u5927\u53d8\u52a8\uff1a<\/p>\n<pre class=\"lang:delphi decode:true \">FBuffers:TBufferList-&gt;TBufList;\r\nFCalcBuffer: TRecordBuffer-&gt;NativeInt;\r\nGetBuffer: \u8fd4\u56de\u503cTRecordBuffer-&gt;TRecBuf;\r\nprocedure CalculateFields(Buffer: NativeInt); overload; virtual;\/\/Buffer:TRecordBuffer-&gt;NativeInt\r\nprocedure ClearCalcFields(Buffer: NativeInt); overload; virtual;\/\/Buffer:TRecordBuffer-&gt;NativeInt\r\nprocedure DataConvert(Field: TField; Source: TValueBuffer; var Dest: TValueBuffer; ToNative: Boolean); overload; virtual;\/\/Dest\u6539\u4e3avar\r\nprocedure GetCalcFields(Buffer: TRecBuf); overload; virtual;\/\/Buffer:TRecordBuffer-&gt;TRecBuf\r\nprocedure InitRecord(Buffer: TRecBuf); overload; virtual;\/\/Buffer:TRecordBuffer-&gt;TRecBuf\r\nprocedure RefreshInternalCalcFields(Buffer: TRecBuf); overload; virtual;\/\/Buffer:TRecordBuffer-&gt;TRecBuf\r\nfunction TempBuffer: TRecBuf; inline;\/\/\u8fd4\u56de\u503c:TRecordBuffer-&gt;TRecBuf\r\nproperty Buffers:\/\/TRecordBuffer-&gt;TRecBuf;\r\nproperty CalcBuffer:\/\/TRecordBuffer-&gt;NativeInt;\r\nprocedure GetBookmarkData(Buffer: TRecBuf; Data: TBookmark); overload; virtual;\/\/Buffer:TRecordBuffer-&gt;TRecBuf\r\nfunction GetBookmarkFlag(Buffer: TRecBuf): TBookmarkFlag; overload; virtual;\/\/Buffer:TRecordBuffer-&gt;TRecBuf\r\nprocedure InternalAddRecord(Buffer: TRecBuf; Append: Boolean); overload; virtual;\/\/Buffer:TRecordBuffer-&gt;TRecBuf\r\nprocedure InternalInitRecord(Buffer: TRecBuf); overload; virtual;\/\/Buffer:TRecordBuffer-&gt;TRecBuf\r\nprocedure InternalSetToRecord(Buffer: TRecBuf); overload; virtual;\/\/Buffer:TRecordBuffer-&gt;TRecBuf\r\nprocedure SetBookmarkFlag(Buffer: TRecBuf; Value: TBookmarkFlag); overload; virtual;\/\/Buffer:TRecordBuffer-&gt;TRecBuf\r\nprocedure SetBookmarkData(Buffer: TRecBuf; Data: TBookmark); overload; virtual;\/\/Buffer:TRecordBuffer-&gt;TRecBuf\r\nfunction GetRecord(Buffer: TRecBuf; GetMode: TGetMode; DoCheck: Boolean): TGetResult; overload; virtual; \/\/Buffer:TRecordBuffer-&gt;TRecBuf\r\nfunction ActiveBuffer: TRecBuf; inline; \/\/Buffer:TRecordBuffer-&gt;TRecBuf\r\nfunction GetCurrentRecord(Buffer: TRecBuf): Boolean; overload; virtual;\/\/Buffer:TRecordBuffer-&gt;TRecBuf\r\nfunction GetFieldData(Field: TField; var Buffer: TValueBuffer): Boolean; overload; virtual;\/\/Buffer\u52a0\u589evar\r\nfunction GetFieldData(FieldNo: Integer; var Buffer: TValueBuffer): Boolean; overload; virtual;\/\/Buffer\u52a0\u589evar\r\nfunction GetFieldData(Field: TField; var Buffer: TValueBuffer; NativeFormat: Boolean): Boolean; overload; virtual;\/\/Buffer\u52a0\u589evar\r\n\r\n\u79fb\u52a8\u5e73\u53f0\u4e0b\u589e\u52a0\u4e0b\u9762\u4e24\u4e2a\u51fd\u6570\r\nfunction AllocRecBuf: TRecBuf; virtual;\r\nprocedure FreeRecBuf(var Buffer: TRecBuf); virtual;\r\n<\/pre>\n<h4>\u3010RadStudio XE5-VER260\u3011<\/h4>\n<p>+ \u52a0\u4e86\u4e2aPDateTimeRec\u5b9a\u4e49\uff0c\u5269\u4e0b\u7684\u5b9a\u4e49\u57fa\u672c\u6ca1\u53d8\uff0c\u53ea\u662f\u4fee\u6539Bug<\/p>\n<h4>\u3010RadStudio XE6-VER270\u3011<\/h4>\n<p>+ \u589e\u52a0\u7c7b\u578bTFieldsAutoCreationMode\u3001TFieldsPositionMode\u3001TFieldLifeCycle\u3001TFieldLifeCycles<\/p>\n<p>+ TFields\u589e\u52a0ClearAutomatic\u51fd\u6570\u548cLifeCycles\u5c5e\u6027<\/p>\n<p>+ TField\u589e\u52a0\u4e24\u4e2a\u865a\u62df\u51fd\u6570\u548cLifeCycle\u3001Validating\u3001AutoGenerateValue\u5c5e\u6027<\/p>\n<pre class=\"lang:delphi decode:true \">procedure SetFieldProps(FieldDef: TFieldDef); virtual;\r\nprocedure SetFieldDefProps(FieldDef: TFieldDef); virtual;\r\n<\/pre>\n<p>+\u00a0TFieldOptions\u7c7b<\/p>\n<p>+ TDataSet\u589e\u52a0CanRefresh\u5c5e\u6027\u53ca\u4e00\u4e9b\u65b0\u7684\u4fdd\u62a4\u51fd\u6570<\/p>\n<p>+ \u589e\u52a0ftCalcFieldTypes\u96c6\u5408\u6765\u6807\u8bb0\u5141\u8bb8\u8bbe\u7f6e\u4e3a\u8ba1\u7b97\u5b57\u6bb5\u7684\u7c7b\u578b<\/p>\n<h4>\u3010RadStudio XE7-VER280\u3011<\/h4>\n<p>+ TFieldTypes\u96c6\u5408\u7c7b\u578b<\/p>\n<p>*\u00a0TParamStreamObject\u63a5\u53e3\u53c8\u53d8\u4e86\uff0c\u597d\u5728\u6211\u597d\u8c61\u7528\u4e0d\u5230<\/p>\n<p>&#8211;\u00a0ftCalcFieldTypes\u5c06ftVariant\u7ed9\u5220\u9664\u4e86<\/p>\n<p>* DefaultFields \u5df2\u7ecf\u88ab\u6807\u8bb0\u4e3a\u4f5c\u5e9f<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e3a\u4e86\u5199QDB\uff0c\u6211\u5728\u7fa4\u91cc\u6536\u96c6\u4e86\u5927\u5bb6\u63d0\u4f9b\u7684\u4ece [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[8,9],"tags":[59,450,61,60,62,63],"class_list":["post-626","post","type-post","status-publish","format-standard","hentry","category-delphi","category-qdac","tag-db-pas","tag-delphi","tag-61","tag-60","tag-62","tag-63"],"views":6082,"_links":{"self":[{"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/posts\/626","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=626"}],"version-history":[{"count":6,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/posts\/626\/revisions"}],"predecessor-version":[{"id":2063,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/posts\/626\/revisions\/2063"}],"wp:attachment":[{"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=626"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=626"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=626"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}