12 KiB
Midas/DataSnap packet format
Offset | Size (bytes) | Content |
0 | 4 | Signature = [$96, $19, $E0, $BD] - Ñèãíàòóðà ïàêåòà MIDAS/DataSnap |
4 | 4 | Int32, îáû÷íî ðàâíî 1 |
8 | 4 | Int32, îáû÷íî ðàâíî 18 |
12 | 2 | FieldCount: UInt16 - êîëè÷åñòâî ïîëåé |
14 | 4 | RecordCount: Int32 - êîëè÷åñòâî çàïèñåé â ïàêåòå |
18 | 4 | Int32, îáû÷íî ðàâíî 3 |
22 | 2 | HeaderSize: UInt16 - âåðîÿòíî, ðàçìåð âñåãî çàãîëîâêà âêëþ÷àÿ îïèñàíèÿ ïîëåé è ñâîéñòâ. |
24 | X | FieldList: FieldList - Ñòðóêòóðà îïèñàíèÿ ïîëåé. |
X + 24 | 2 | DSPropCount: UInt16 - êîëè÷åñòâî ñâîéñòâ |
X + 26 | Y | DSProps: Prop[DSPropCount] - ñâîéñòâà íàáîðà. |
HeaderSize | Varing | RecordList: RecordList - äàííûå çàïèñåé. |
Îïèñàíèå ïîëåé (FieldList)
Ïîñëåäîâàòåëüíûé ñïèñîê èç îäèíàêîâûõ îïèñàòåëåé ïîëÿ ïðèâåäåííûõ íèæå. Êîëè÷åñòâî â ñïèñêå çàäàíî ñîîòâåòñòâóþùèì çíà÷åíèåì çàãîëîâêà.
array [0..FieldCount - 1] of
Offset | Size (bytes) | Content |
0 | 1 | Len: UInt8 - Äëèíà èìåíè ïîëÿ |
1 | Len | FieldName: Char[Len] - Èìÿ ïîëÿ |
Len + 1 | 2 | FieldSize: Int16, äëÿ ñòðîê - äëèíà ôèêñèðîâàííîé ÷àñòè, òå ðàçìåðà |
Len + 3 | 2 | FieldType: Int16 |
Len + 5 | 2 | FieldAttrs: Int16 - àòðèáóòû (ôëàãè) ïîëÿ. |
Len + 7 | 2 | FieldPropCount: UInt16 - êîëè÷åñòâî ñâîéñòâ ïîëÿ |
Len + 9 | P | FieldProps: Prop[FieldPropCount] - ñâîéñòâà ïîëÿ. |
Îïèñàíèå ñâîéñòâà (Prop)
Offset | Size (bytes) | Content |
0 | 1 | Len: UInt8 - Äëèíà èìåíè ñâîéñòâà |
1 | Len | PropName: Char[Len] - Èìÿ ñâîéñòâà |
Len+1 | 2 | PropSize: Int16 |
Len+3 | 2 | PropType: Int16 (FieldType) |
Len + 4 | PropSize | Data: Byte[PropSize] - Äàííûå ñâîéñòâà |
Îïèñàíèå çàïèñåé (RecordList)
Ïîñëåäîâàòåëüíûé ñïèñîê îïèñàòåëåé çàïèñè, ïðèâåäåííûõ íèæå. Êîëè÷åñòâî â ñïèñêå çàäàíî ñîîòâåòñòâóþùèì çíà÷åíèåì çàãîëîâêà.
array [0..RecordCount - 1] of
Offset | Size (bytes) | Content |
0 | 1 | RecordStatus: UInt8 |
1 | S | StatusBits: Byte[FieldCount / 4] - íà
êàæäîå ïîëå â ìàññèâå ñòàòóñíûõ áèòîâ îòâîäèòñÿ 2 áèòà
îò ìëàäøåãî ê ñòàðøåìó. Äàííûå ïîëåé
ñîäåðæàùèõ Null èëè
NotChanged â çàïèñü íå ïîïàäàþò. BLANK_NULL = 1; { 'real' NULL } BLANK_NOTCHANGED = 2; { Not changed , compared to original value } |
S+1 | X | FieldData[] - ïèøóòñÿ òîëüêî
not null & changed çíà÷åíèÿ. Äëÿ ïîëåé ôèêñèðîâàííîãî ðàçìåðà: FixedFieldData = Byte[FieldSize] Äëÿ ïîëåé ïåðåìåííîãî ðàçìåðà: VarFieldData = (DataLen: UInt(of FieldSize)) Byte[DataLen] - òå îáû÷íî äàííûå ïðåäâàðÿþòñÿ 1-2 áàéòàìè ðàçìåðà. |
FieldType
dsfldUNKNOWN = 0; { Unknown }
dsfldINT = 1; { signed integer }
dsfldUINT = 2; { Unsigned integer }
dsfldBOOL = 3; { Boolean }
dsfldFLOATIEEE = 4; { IEEE float }
dsfldBCD = 5; { BCD }
dsfldDATE = 6; { Date (32 bit) }
dsfldTIME = 7; { Time (32 bit) }
dsfldTIMESTAMP = 8; { Time-stamp (64 bit) }
dsfldZSTRING = 9; { Multi-byte string }
dsfldUNICODE = 10; { unicode string }
dsfldBYTES = 11; { bytes }
dsfldADT = 12; { ADT (Abstract Data Type) }
dsfldARRAY = 13; { Array type (not attribute) }
dsfldEMBEDDEDTBL = 14; { Embedded (nested table type) }
dsfldREF = 15; { Reference }
MaskFieldType = $3F; { mask to retrieve
Field Type }
MaskVaryingFld = $40; { Varying attribute type. }
MaskArrayFld = $80; { Array attribute type. }
- Äàííûå ìàññèâà ïðåäâàðÿþòñÿ äëèíîé Len: Int32, çà
êîòîðîé ñëåäóþò åãî ýëåìåíòû
Data[Len].
Àòðèáóòû ïîëÿ (FieldAttrs)
fldAttrHIDDEN = $0001; { Field is hidden }
fldAttrREADONLY = $0002; { Field is readonly }
fldAttrREQUIRED = $0004; { Field value required }
fldAttrLINK = $0008; { Linking field }
Ñâîéñòâà ïîëÿ (FieldProps)
- WIDTH: UInt16 - äëÿ ïîëåé ïåðåìåííîãî ðàçìåðà, íàïðèìåð ñòðîê, ðàâíî Field.Size. Òå ýòî ïðåäåëüíûé ðàçìåð äàííûõ, õðàíèìûõ â ïîëå.
Ñâîéñòâà íàáîðà (DataSetProps)
- CHANGE_LOG: UInt32[] - ìàññèâ èç öåëûõ ÷èñåë.
- DATASET_DELTA: UInt32 = 1, åñëè â ïàêåòå ïåðåäàåòñÿ delta-íàáîð (íàáîð èçìåíåíèé).
Ñòàòóñ çàïèñè (RecordStatus)
dsRecUnmodified = $0000; { Unmodified record }
dsRecOrg = $0001; { Original record (was changed) }
dsRecDeleted = $0002; { Record was deleted }
dsRecNew = $0004; { Record was inserted }
dsRecModified = $0008; { Record was changed }
dsUnused = $0020; { Record not used anymore (hole) }
dsDetUpd = $0040; { Detail modification Ins/Del/Mod. }{ Can be combined with
other status. }