1 {
2     This file is part of the Free Pascal Class Library SDO Implementation
3     Copyright (c) 2012 by Inoussa OUEDRAOGO
4     Free Pascal development team
5 
6     This unit implements basic SDO Field definitions
7 
8     See the file COPYING.FPC, included in this distribution,
9     for details about the copyright.
10 
11     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14 
15  **********************************************************************}
16 {$INCLUDE sdo_global.inc}
17 unit sdo_field_imp;
18 
19 interface
20 uses SysUtils, Classes,
21      sdo_types, sdo, sdo_type;
22 
23 const
24   BIT_ORDER_SET  = 1;
25   BIT_ORDER_NULL = 2;
26   BIT_ORDER_BUFFER = 3;
27 
28 type
29 
30   ISDOField = interface
31     ['{BD6E436E-0274-4B55-8346-593BA9FD5F4F}']
getVariantnull32     function getVariant(
33       const ABuffer : TSDOFieldBuffer;
34       const AOffset : PtrUInt
35     ) : TSDOVariant;
36     procedure setVariant(
37       const ABuffer : TSDOFieldBuffer;
38       const AOffset : PtrUInt;
39       const AValue  : TSDOVariant
40     );
41 
getBooleannull42     function getBoolean(
43       const ABuffer : TSDOFieldBuffer;
44       const AOffset : PtrUInt
45     ) : TSDOBoolean;
46     procedure setBoolean(
47       const ABuffer : TSDOFieldBuffer;
48       const AOffset : PtrUInt;
49       const AValue  : TSDOBoolean
50     );
51 
getBytenull52     function getByte(
53       const ABuffer : TSDOFieldBuffer;
54       const AOffset : PtrUInt
55     ) : TSDOByte;
56     procedure setByte(
57       const ABuffer : TSDOFieldBuffer;
58       const AOffset : PtrUInt;
59       const AValue  : TSDOByte
60     );
61 
62 {$IFDEF HAS_SDO_BYTES}
getBytesnull63     function getBytes(
64       const ABuffer : TSDOFieldBuffer;
65       const AOffset : PtrUInt
66     ) : TSDOBytes;
67     procedure setBytes(
68       const ABuffer : TSDOFieldBuffer;
69       const AOffset : PtrUInt;
70             AValue  : TSDOBytes
71     );
72 {$ENDIF HAS_SDO_BYTES}
73 
getCharacternull74     function getCharacter(
75       const ABuffer : TSDOFieldBuffer;
76       const AOffset : PtrUInt
77     ) : TSDOChar;
78     procedure setCharacter(
79       const ABuffer : TSDOFieldBuffer;
80       const AOffset : PtrUInt;
81       const AValue  : TSDOChar
82     );
83 
84 {$IFDEF HAS_SDO_CURRENCY}
getCurrencynull85     function getCurrency(
86       const ABuffer : TSDOFieldBuffer;
87       const AOffset : PtrUInt
88     ) : TSDOCurrency;
89     procedure setCurrency(
90       const ABuffer : TSDOFieldBuffer;
91       const AOffset : PtrUInt;
92       const AValue  : TSDOCurrency
93     );
94 {$ENDIF HAS_SDO_CURRENCY}
95 
getDatenull96     function getDate(
97       const ABuffer : TSDOFieldBuffer;
98       const AOffset : PtrUInt
99     ) : TSDODate;
100     procedure setDate(
101       const ABuffer : TSDOFieldBuffer;
102       const AOffset : PtrUInt;
103       const AValue  : TSDODate
104     );
105 
106 {$IFDEF HAS_SDO_DOUBLE}
getDoublenull107     function getDouble(
108       const ABuffer : TSDOFieldBuffer;
109       const AOffset : PtrUInt
110     ) : TSDODouble;
111     procedure setDouble(
112       const ABuffer : TSDOFieldBuffer;
113       const AOffset : PtrUInt;
114       const AValue  : TSDODouble
115     );
116 {$ENDIF HAS_SDO_DOUBLE}
117 
118 {$IFDEF HAS_SDO_FLOAT}
getFloatnull119     function getFloat(
120       const ABuffer : TSDOFieldBuffer;
121       const AOffset : PtrUInt
122     ) : TSDOFloat;
123     procedure setFloat(
124       const ABuffer : TSDOFieldBuffer;
125       const AOffset : PtrUInt;
126       const AValue  : TSDOFloat
127     );
128 {$ENDIF HAS_SDO_FLOAT}
129 
getIntegernull130     function getInteger(
131       const ABuffer : TSDOFieldBuffer;
132       const AOffset : PtrUInt
133     ) : TSDOInteger;
134     procedure setInteger(
135       const ABuffer : TSDOFieldBuffer;
136       const AOffset : PtrUInt;
137       const AValue  : TSDOInteger
138     );
139 
getLongnull140     function getLong(
141       const ABuffer : TSDOFieldBuffer;
142       const AOffset : PtrUInt
143     ) : TSDOLong;
144     procedure setLong(
145       const ABuffer : TSDOFieldBuffer;
146       const AOffset : PtrUInt;
147       const AValue  : TSDOLong
148     );
149 
getShortnull150     function getShort(
151       const ABuffer : TSDOFieldBuffer;
152       const AOffset : PtrUInt
153     ) : TSDOShort;
154     procedure setShort(
155       const ABuffer : TSDOFieldBuffer;
156       const AOffset : PtrUInt;
157       const AValue  : TSDOShort
158     );
159 
getStringnull160     function getString(
161       const ABuffer : TSDOFieldBuffer;
162       const AOffset : PtrUInt
163     ) : TSDOString;
164     procedure setString(
165       const ABuffer : TSDOFieldBuffer;
166       const AOffset : PtrUInt;
167       const AValue  : TSDOString
168     );
169 
getDataObjectnull170     function getDataObject(
171       const ABuffer : TSDOFieldBuffer;
172       const AOffset : PtrUInt
173     ) : ISDODataObject;
174     procedure setDataObject(
175       const ABuffer : TSDOFieldBuffer;
176       const AOffset : PtrUInt;
177       const AValue  : ISDODataObject
178     );
179 
getChangeSummarynull180     function getChangeSummary(
181       const ABuffer : TSDOFieldBuffer;
182       const AOffset : PtrUInt
183     ) : ISDOChangeSummary;
184     procedure setChangeSummary(
185       const ABuffer : TSDOFieldBuffer;
186       const AOffset : PtrUInt;
187       const AValue  : ISDOChangeSummary
188     );
189 
isSetnull190     function isSet(
191       const ABuffer : TSDOFieldBuffer;
192       const AOffset : PtrUInt
193     ) : Boolean;
194     procedure unset(
195       const ABuffer : TSDOFieldBuffer;
196       const AOffset : PtrUInt
197     );
isNullnull198     function isNull(
199       const ABuffer : TSDOFieldBuffer;
200       const AOffset : PtrUInt
201     ) : Boolean;
202     procedure setNull(
203       const ABuffer : TSDOFieldBuffer;
204       const AOffset : PtrUInt
205     );
206   end;
207 
208   TSDOBaseField = class(TInterfacedObject,IInterface,ISDOField)
209   protected
getVariantnull210     function getVariant(
211       const ABuffer : TSDOFieldBuffer;
212       const AOffset : PtrUInt
213     ) : TSDOVariant; virtual;
214     procedure setVariant(
215       const ABuffer : TSDOFieldBuffer;
216       const AOffset : PtrUInt;
217       const AValue  : TSDOVariant
218     ); virtual;
219 
getBooleannull220     function getBoolean(
221       const ABuffer : TSDOFieldBuffer;
222       const AOffset : PtrUInt
223     ) : TSDOBoolean; virtual;
224     procedure setBoolean(
225       const ABuffer : TSDOFieldBuffer;
226       const AOffset : PtrUInt;
227       const AValue  : TSDOBoolean
228     ); virtual;
229 
getBytenull230     function getByte(
231       const ABuffer : TSDOFieldBuffer;
232       const AOffset : PtrUInt
233     ) : TSDOByte; virtual;
234     procedure setByte(
235       const ABuffer : TSDOFieldBuffer;
236       const AOffset : PtrUInt;
237       const AValue  : TSDOByte
238     ); virtual;
239 
240 {$IFDEF HAS_SDO_BYTES}
getBytesnull241     function getBytes(
242       const ABuffer : TSDOFieldBuffer;
243       const AOffset : PtrUInt
244     ) : TSDOBytes; virtual;
245     procedure setBytes(
246       const ABuffer : TSDOFieldBuffer;
247       const AOffset : PtrUInt;
248             AValue  : TSDOBytes
249     ); virtual;
250 {$ENDIF HAS_SDO_BYTES}
251 
getCharacternull252     function getCharacter(
253       const ABuffer : TSDOFieldBuffer;
254       const AOffset : PtrUInt
255     ) : TSDOChar; virtual;
256     procedure setCharacter(
257       const ABuffer : TSDOFieldBuffer;
258       const AOffset : PtrUInt;
259       const AValue  : TSDOChar
260     ); virtual;
261 
262 {$IFDEF HAS_SDO_CURRENCY}
getCurrencynull263     function getCurrency(
264       const ABuffer : TSDOFieldBuffer;
265       const AOffset : PtrUInt
266     ) : TSDOCurrency; virtual;
267     procedure setCurrency(
268       const ABuffer : TSDOFieldBuffer;
269       const AOffset : PtrUInt;
270       const AValue  : TSDOCurrency
271     ); virtual;
272 {$ENDIF HAS_SDO_CURRENCY}
273 
getDatenull274     function getDate(
275       const ABuffer : TSDOFieldBuffer;
276       const AOffset : PtrUInt
277     ) : TSDODate;virtual;
278     procedure setDate(
279       const ABuffer : TSDOFieldBuffer;
280       const AOffset : PtrUInt;
281       const AValue  : TSDODate
282     ); virtual;
283 
284 {$IFDEF HAS_SDO_DOUBLE}
getDoublenull285     function getDouble(
286       const ABuffer : TSDOFieldBuffer;
287       const AOffset : PtrUInt
288     ) : TSDODouble; virtual;
289     procedure setDouble(
290       const ABuffer : TSDOFieldBuffer;
291       const AOffset : PtrUInt;
292       const AValue  : TSDODouble
293     ); virtual;
294 {$ENDIF HAS_SDO_DOUBLE}
295 
296 {$IFDEF HAS_SDO_FLOAT}
getFloatnull297     function getFloat(
298       const ABuffer : TSDOFieldBuffer;
299       const AOffset : PtrUInt
300     ) : TSDOFloat; virtual;
301     procedure setFloat(
302       const ABuffer : TSDOFieldBuffer;
303       const AOffset : PtrUInt;
304       const AValue  : TSDOFloat
305     ); virtual;
306 {$ENDIF HAS_SDO_FLOAT}
307 
getIntegernull308     function getInteger(
309       const ABuffer : TSDOFieldBuffer;
310       const AOffset : PtrUInt
311     ) : TSDOInteger; virtual;
312     procedure setInteger(
313       const ABuffer : TSDOFieldBuffer;
314       const AOffset : PtrUInt;
315       const AValue  : TSDOInteger
316     ); virtual;
317 
getLongnull318     function getLong(
319       const ABuffer : TSDOFieldBuffer;
320       const AOffset : PtrUInt
321     ) : TSDOLong; virtual;
322     procedure setLong(
323       const ABuffer : TSDOFieldBuffer;
324       const AOffset : PtrUInt;
325       const AValue  : TSDOLong
326     ); virtual;
327 
getShortnull328     function getShort(
329       const ABuffer : TSDOFieldBuffer;
330       const AOffset : PtrUInt
331     ) : TSDOShort; virtual;
332     procedure setShort(
333       const ABuffer : TSDOFieldBuffer;
334       const AOffset : PtrUInt;
335       const AValue  : TSDOShort
336     ); virtual;
337 
getStringnull338     function getString(
339       const ABuffer : TSDOFieldBuffer;
340       const AOffset : PtrUInt
341     ) : TSDOString; virtual;
342     procedure setString(
343       const ABuffer : TSDOFieldBuffer;
344       const AOffset : PtrUInt;
345       const AValue  : TSDOString
346     ); virtual;
347 
getDataObjectnull348     function getDataObject(
349       const ABuffer : TSDOFieldBuffer;
350       const AOffset : PtrUInt
351     ) : ISDODataObject; virtual;
352     procedure setDataObject(
353       const ABuffer : TSDOFieldBuffer;
354       const AOffset : PtrUInt;
355       const AValue  : ISDODataObject
356     ); virtual;
357 
getChangeSummarynull358     function getChangeSummary(
359       const ABuffer : TSDOFieldBuffer;
360       const AOffset : PtrUInt
361     ) : ISDOChangeSummary; virtual;
362     procedure setChangeSummary(
363       const ABuffer : TSDOFieldBuffer;
364       const AOffset : PtrUInt;
365       const AValue  : ISDOChangeSummary
366     ); virtual;
367 
368 
isSetnull369     function isSet(
370       const ABuffer : TSDOFieldBuffer;
371       const AOffset : PtrUInt
372     ) : Boolean;virtual;
373     procedure unset(
374       const ABuffer : TSDOFieldBuffer;
375       const AOffset : PtrUInt
376     );virtual;
isNullnull377     function isNull(
378       const ABuffer : TSDOFieldBuffer;
379       const AOffset : PtrUInt
380     ) : Boolean;virtual;
381     procedure setNull(
382       const ABuffer : TSDOFieldBuffer;
383       const AOffset : PtrUInt
384     );virtual;
385   end;
386 
387   TSDOBooleanField = class(TSDOBaseField,IInterface,ISDOField)
388   protected
getVariantnull389     function getVariant(
390       const ABuffer : TSDOFieldBuffer;
391       const AOffset : PtrUInt
392     ) : TSDOVariant; override;
393     procedure setVariant(
394       const ABuffer : TSDOFieldBuffer;
395       const AOffset : PtrUInt;
396       const AValue  : TSDOVariant
397     ); override;
398 
getBooleannull399     function getBoolean(
400       const ABuffer : TSDOFieldBuffer;
401       const AOffset : PtrUInt
402     ) : TSDOBoolean;override;
403     procedure setBoolean(
404       const ABuffer : TSDOFieldBuffer;
405       const AOffset : PtrUInt;
406       const AValue  : TSDOBoolean
407     );override;
408 
getBytenull409     function getByte(
410       const ABuffer : TSDOFieldBuffer;
411       const AOffset : PtrUInt
412     ) : TSDOByte;override;
413     procedure setByte(
414       const ABuffer : TSDOFieldBuffer;
415       const AOffset : PtrUInt;
416       const AValue  : TSDOByte
417     );override;
418 
getCharacternull419     function getCharacter(
420       const ABuffer : TSDOFieldBuffer;
421       const AOffset : PtrUInt
422     ) : TSDOChar; override;
423     procedure setCharacter(
424       const ABuffer : TSDOFieldBuffer;
425       const AOffset : PtrUInt;
426       const AValue  : TSDOChar
427     ); override;
428 
getIntegernull429     function getInteger(
430       const ABuffer : TSDOFieldBuffer;
431       const AOffset : PtrUInt
432     ) : TSDOInteger;override;
433     procedure setInteger(
434       const ABuffer : TSDOFieldBuffer;
435       const AOffset : PtrUInt;
436       const AValue  : TSDOInteger
437     );override;
438 
getLongnull439     function getLong(
440       const ABuffer : TSDOFieldBuffer;
441       const AOffset : PtrUInt
442     ) : TSDOLong; override;
443     procedure setLong(
444       const ABuffer : TSDOFieldBuffer;
445       const AOffset : PtrUInt;
446       const AValue  : TSDOLong
447     ); override;
448 
getShortnull449     function getShort(
450       const ABuffer : TSDOFieldBuffer;
451       const AOffset : PtrUInt
452     ) : TSDOShort; override;
453     procedure setShort(
454       const ABuffer : TSDOFieldBuffer;
455       const AOffset : PtrUInt;
456       const AValue  : TSDOShort
457     ); override;
458 
getStringnull459     function getString(
460       const ABuffer : TSDOFieldBuffer;
461       const AOffset : PtrUInt
462     ) : TSDOString;override;
463     procedure setString(
464       const ABuffer : TSDOFieldBuffer;
465       const AOffset : PtrUInt;
466       const AValue  : TSDOString
467     );override;
468 
469   end;
470 
471   TSDOIntegerField = class(TSDOBaseField,IInterface,ISDOField)
472   protected
getVariantnull473     function getVariant(
474       const ABuffer : TSDOFieldBuffer;
475       const AOffset : PtrUInt
476     ) : TSDOVariant; override;
477     procedure setVariant(
478       const ABuffer : TSDOFieldBuffer;
479       const AOffset : PtrUInt;
480       const AValue  : TSDOVariant
481     ); override;
482 
getBooleannull483     function getBoolean(
484       const ABuffer : TSDOFieldBuffer;
485       const AOffset : PtrUInt
486     ) : TSDOBoolean;override;
487     procedure setBoolean(
488       const ABuffer : TSDOFieldBuffer;
489       const AOffset : PtrUInt;
490       const AValue  : TSDOBoolean
491     );override;
492 
getBytenull493     function getByte(
494       const ABuffer : TSDOFieldBuffer;
495       const AOffset : PtrUInt
496     ) : TSDOByte;override;
497     procedure setByte(
498       const ABuffer : TSDOFieldBuffer;
499       const AOffset : PtrUInt;
500       const AValue  : TSDOByte
501     );override;
502 
getCharacternull503     function getCharacter(
504       const ABuffer : TSDOFieldBuffer;
505       const AOffset : PtrUInt
506     ) : TSDOChar; override;
507     procedure setCharacter(
508       const ABuffer : TSDOFieldBuffer;
509       const AOffset : PtrUInt;
510       const AValue  : TSDOChar
511     ); override;
512 
getIntegernull513     function getInteger(
514       const ABuffer : TSDOFieldBuffer;
515       const AOffset : PtrUInt
516     ) : TSDOInteger;override;
517     procedure setInteger(
518       const ABuffer : TSDOFieldBuffer;
519       const AOffset : PtrUInt;
520       const AValue  : TSDOInteger
521     );override;
522 
getLongnull523     function getLong(
524       const ABuffer : TSDOFieldBuffer;
525       const AOffset : PtrUInt
526     ) : TSDOLong; override;
527     procedure setLong(
528       const ABuffer : TSDOFieldBuffer;
529       const AOffset : PtrUInt;
530       const AValue  : TSDOLong
531     ); override;
532 
getShortnull533     function getShort(
534       const ABuffer : TSDOFieldBuffer;
535       const AOffset : PtrUInt
536     ) : TSDOShort; override;
537     procedure setShort(
538       const ABuffer : TSDOFieldBuffer;
539       const AOffset : PtrUInt;
540       const AValue  : TSDOShort
541     ); override;
542 
getStringnull543     function getString(
544       const ABuffer : TSDOFieldBuffer;
545       const AOffset : PtrUInt
546     ) : TSDOString;override;
547     procedure setString(
548       const ABuffer : TSDOFieldBuffer;
549       const AOffset : PtrUInt;
550       const AValue  : TSDOString
551     );override;
552 
553   end;
554 
555   TSDOBaseStringField = class(TSDOBaseField,IInterface,ISDOField)
556   private
557     procedure FreeBuffer(const ABuffer : TSDOFieldBuffer);
558   protected
getVariantnull559     function getVariant(
560       const ABuffer : TSDOFieldBuffer;
561       const AOffset : PtrUInt
562     ) : TSDOVariant; override;
563     procedure setVariant(
564       const ABuffer : TSDOFieldBuffer;
565       const AOffset : PtrUInt;
566       const AValue  : TSDOVariant
567     ); override;
568 
getBooleannull569     function getBoolean(
570       const ABuffer : TSDOFieldBuffer;
571       const AOffset : PtrUInt
572     ) : TSDOBoolean;override;
573     procedure setBoolean(
574       const ABuffer : TSDOFieldBuffer;
575       const AOffset : PtrUInt;
576       const AValue  : TSDOBoolean
577     );override;
578 
getBytenull579     function getByte(
580       const ABuffer : TSDOFieldBuffer;
581       const AOffset : PtrUInt
582     ) : TSDOByte;override;
583     procedure setByte(
584       const ABuffer : TSDOFieldBuffer;
585       const AOffset : PtrUInt;
586       const AValue  : TSDOByte
587     );override;
588 
getCharacternull589     function getCharacter(
590       const ABuffer : TSDOFieldBuffer;
591       const AOffset : PtrUInt
592     ) : TSDOChar; override;
593     procedure setCharacter(
594       const ABuffer : TSDOFieldBuffer;
595       const AOffset : PtrUInt;
596       const AValue  : TSDOChar
597     ); override;
598 
getIntegernull599     function getInteger(
600       const ABuffer : TSDOFieldBuffer;
601       const AOffset : PtrUInt
602     ) : TSDOInteger;override;
603     procedure setInteger(
604       const ABuffer : TSDOFieldBuffer;
605       const AOffset : PtrUInt;
606       const AValue  : TSDOInteger
607     );override;
608 
getLongnull609     function getLong(
610       const ABuffer : TSDOFieldBuffer;
611       const AOffset : PtrUInt
612     ) : TSDOLong; override;
613     procedure setLong(
614       const ABuffer : TSDOFieldBuffer;
615       const AOffset : PtrUInt;
616       const AValue  : TSDOLong
617     ); override;
618 
getShortnull619     function getShort(
620       const ABuffer : TSDOFieldBuffer;
621       const AOffset : PtrUInt
622     ) : TSDOShort; override;
623     procedure setShort(
624       const ABuffer : TSDOFieldBuffer;
625       const AOffset : PtrUInt;
626       const AValue  : TSDOShort
627     ); override;
628 
getStringnull629     function getString(
630       const ABuffer : TSDOFieldBuffer;
631       const AOffset : PtrUInt
632     ) : TSDOString;override;
633     procedure setString(
634       const ABuffer : TSDOFieldBuffer;
635       const AOffset : PtrUInt;
636       const AValue  : TSDOString
637     );override;
638 
639     procedure unset(
640       const ABuffer : TSDOFieldBuffer;
641       const AOffset : PtrUInt
642     );override;
643     procedure setNull(
644       const ABuffer : TSDOFieldBuffer;
645       const AOffset : PtrUInt
646     );override;
647   end;
648 
649   TSDOStringField = class(TSDOBaseStringField)
650   end;
651 
652   TSDOObjectField = class(TSDOBaseField,IInterface,ISDOField)
653   private
654     procedure FreeBuffer(const ABuffer : TSDOFieldBuffer);
655   protected
getDataObjectnull656     function getDataObject(
657       const ABuffer : TSDOFieldBuffer;
658       const AOffset : PtrUInt
659     ) : ISDODataObject;override;
660     procedure setDataObject(
661       const ABuffer : TSDOFieldBuffer;
662       const AOffset : PtrUInt;
663       const AValue  : ISDODataObject
664     );override;
665     procedure unset(
666       const ABuffer : TSDOFieldBuffer;
667       const AOffset : PtrUInt
668     );override;
669     procedure setNull(
670       const ABuffer : TSDOFieldBuffer;
671       const AOffset : PtrUInt
672     );override;
getVariantnull673     function getVariant(
674       const ABuffer : TSDOFieldBuffer;
675       const AOffset : PtrUInt
676     ) : TSDOVariant; override;
677     procedure setVariant(
678       const ABuffer : TSDOFieldBuffer;
679       const AOffset : PtrUInt;
680       const AValue  : TSDOVariant
681     ); override;
682   end;
683 
684   TSDOChangeSummaryField = class(TSDOBaseField,IInterface,ISDOField)
685   private
686     procedure FreeBuffer(const ABuffer : TSDOFieldBuffer);
687   protected
getChangeSummarynull688     function getChangeSummary(
689       const ABuffer : TSDOFieldBuffer;
690       const AOffset : PtrUInt
691     ) : ISDOChangeSummary;override;
692     procedure setChangeSummary(
693       const ABuffer : TSDOFieldBuffer;
694       const AOffset : PtrUInt;
695       const AValue  : ISDOChangeSummary
696     );override;
697     procedure unset(
698       const ABuffer : TSDOFieldBuffer;
699       const AOffset : PtrUInt
700     );override;
701     procedure setNull(
702       const ABuffer : TSDOFieldBuffer;
703       const AOffset : PtrUInt
704     );override;
705   end;
706 
707   TSDOByteField = class(TSDOBaseField,IInterface,ISDOField)
708   protected
getVariantnull709     function getVariant(
710       const ABuffer : TSDOFieldBuffer;
711       const AOffset : PtrUInt
712     ) : TSDOVariant; override;
713     procedure setVariant(
714       const ABuffer : TSDOFieldBuffer;
715       const AOffset : PtrUInt;
716       const AValue  : TSDOVariant
717     ); override;
718 
getBooleannull719     function getBoolean(
720       const ABuffer : TSDOFieldBuffer;
721       const AOffset : PtrUInt
722     ) : TSDOBoolean;override;
723     procedure setBoolean(
724       const ABuffer : TSDOFieldBuffer;
725       const AOffset : PtrUInt;
726       const AValue  : TSDOBoolean
727     );override;
728 
getBytenull729     function getByte(
730       const ABuffer : TSDOFieldBuffer;
731       const AOffset : PtrUInt
732     ) : TSDOByte; override;
733     procedure setByte(
734       const ABuffer : TSDOFieldBuffer;
735       const AOffset : PtrUInt;
736       const AValue  : TSDOByte
737     );override;
738 
getCharacternull739     function getCharacter(
740       const ABuffer : TSDOFieldBuffer;
741       const AOffset : PtrUInt
742     ) : TSDOChar; override;
743     procedure setCharacter(
744       const ABuffer : TSDOFieldBuffer;
745       const AOffset : PtrUInt;
746       const AValue  : TSDOChar
747     ); override;
748 
getIntegernull749     function getInteger(
750       const ABuffer : TSDOFieldBuffer;
751       const AOffset : PtrUInt
752     ) : TSDOInteger;override;
753     procedure setInteger(
754       const ABuffer : TSDOFieldBuffer;
755       const AOffset : PtrUInt;
756       const AValue  : TSDOInteger
757     );override;
758 
getLongnull759     function getLong(
760       const ABuffer : TSDOFieldBuffer;
761       const AOffset : PtrUInt
762     ) : TSDOLong; override;
763     procedure setLong(
764       const ABuffer : TSDOFieldBuffer;
765       const AOffset : PtrUInt;
766       const AValue  : TSDOLong
767     ); override;
768 
getShortnull769     function getShort(
770       const ABuffer : TSDOFieldBuffer;
771       const AOffset : PtrUInt
772     ) : TSDOShort; override;
773     procedure setShort(
774       const ABuffer : TSDOFieldBuffer;
775       const AOffset : PtrUInt;
776       const AValue  : TSDOShort
777     ); override;
778 
getStringnull779     function getString(
780       const ABuffer : TSDOFieldBuffer;
781       const AOffset : PtrUInt
782     ) : TSDOString;override;
783     procedure setString(
784       const ABuffer : TSDOFieldBuffer;
785       const AOffset : PtrUInt;
786       const AValue  : TSDOString
787     );override;
788 
789   end;
790 
791 {$IFDEF HAS_SDO_BYTES}
792   TSDOBytesField = class(TSDOBaseField,IInterface,ISDOField)
793   private
794     procedure FreeBuffer(const ABuffer : TSDOFieldBuffer);
795   protected
getVariantnull796     function getVariant(
797       const ABuffer : TSDOFieldBuffer;
798       const AOffset : PtrUInt
799     ) : TSDOVariant; override;
800     procedure setVariant(
801       const ABuffer : TSDOFieldBuffer;
802       const AOffset : PtrUInt;
803       const AValue  : TSDOVariant
804     ); override;
805 
getBytesnull806     function getBytes(
807       const ABuffer : TSDOFieldBuffer;
808       const AOffset : PtrUInt
809     ) : TSDOBytes; override;
810     procedure setBytes(
811       const ABuffer : TSDOFieldBuffer;
812       const AOffset : PtrUInt;
813             AValue  : TSDOBytes
814     );override;
815 
getStringnull816     function getString(
817       const ABuffer : TSDOFieldBuffer;
818       const AOffset : PtrUInt
819     ) : TSDOString;override;
820     procedure setString(
821       const ABuffer : TSDOFieldBuffer;
822       const AOffset : PtrUInt;
823       const AValue  : TSDOString
824     );override;
825 
826     procedure setNull(
827       const ABuffer : TSDOFieldBuffer;
828       const AOffset : PtrUInt
829     );override;
830   end;
831 {$ENDIF HAS_SDO_BYTES}
832 
833 {$IFDEF HAS_SDO_CHAR}
834   TSDOCharField = class(TSDOBaseField,IInterface,ISDOField)
835   protected
getVariantnull836     function getVariant(
837       const ABuffer : TSDOFieldBuffer;
838       const AOffset : PtrUInt
839     ) : TSDOVariant; override;
840     procedure setVariant(
841       const ABuffer : TSDOFieldBuffer;
842       const AOffset : PtrUInt;
843       const AValue  : TSDOVariant
844     ); override;
845 
getBooleannull846     function getBoolean(
847       const ABuffer : TSDOFieldBuffer;
848       const AOffset : PtrUInt
849     ) : TSDOBoolean;override;
850     procedure setBoolean(
851       const ABuffer : TSDOFieldBuffer;
852       const AOffset : PtrUInt;
853       const AValue  : TSDOBoolean
854     );override;
855 
getBytenull856     function getByte(
857       const ABuffer : TSDOFieldBuffer;
858       const AOffset : PtrUInt
859     ) : TSDOByte; override;
860     procedure setByte(
861       const ABuffer : TSDOFieldBuffer;
862       const AOffset : PtrUInt;
863       const AValue  : TSDOByte
864     );override;
865 
getCharacternull866     function getCharacter(
867       const ABuffer : TSDOFieldBuffer;
868       const AOffset : PtrUInt
869     ) : TSDOChar; override;
870     procedure setCharacter(
871       const ABuffer : TSDOFieldBuffer;
872       const AOffset : PtrUInt;
873       const AValue  : TSDOChar
874     ); override;
875 
getIntegernull876     function getInteger(
877       const ABuffer : TSDOFieldBuffer;
878       const AOffset : PtrUInt
879     ) : TSDOInteger;override;
880     procedure setInteger(
881       const ABuffer : TSDOFieldBuffer;
882       const AOffset : PtrUInt;
883       const AValue  : TSDOInteger
884     );override;
885 
getLongnull886     function getLong(
887       const ABuffer : TSDOFieldBuffer;
888       const AOffset : PtrUInt
889     ) : TSDOLong; override;
890     procedure setLong(
891       const ABuffer : TSDOFieldBuffer;
892       const AOffset : PtrUInt;
893       const AValue  : TSDOLong
894     ); override;
895 
getShortnull896     function getShort(
897       const ABuffer : TSDOFieldBuffer;
898       const AOffset : PtrUInt
899     ) : TSDOShort; override;
900     procedure setShort(
901       const ABuffer : TSDOFieldBuffer;
902       const AOffset : PtrUInt;
903       const AValue  : TSDOShort
904     ); override;
905 
getStringnull906     function getString(
907       const ABuffer : TSDOFieldBuffer;
908       const AOffset : PtrUInt
909     ) : TSDOString;override;
910     procedure setString(
911       const ABuffer : TSDOFieldBuffer;
912       const AOffset : PtrUInt;
913       const AValue  : TSDOString
914     );override;
915 
916   end;
917 {$ENDIF HAS_SDO_CHAR}
918 
919 {$IFDEF HAS_SDO_CURRENCY}
920   TSDOCurrencyField = class(TSDOBaseField,IInterface,ISDOField)
921   protected
getVariantnull922     function getVariant(
923       const ABuffer : TSDOFieldBuffer;
924       const AOffset : PtrUInt
925     ) : TSDOVariant; override;
926     procedure setVariant(
927       const ABuffer : TSDOFieldBuffer;
928       const AOffset : PtrUInt;
929       const AValue  : TSDOVariant
930     ); override;
931 
getStringnull932     function getString(
933       const ABuffer : TSDOFieldBuffer;
934       const AOffset : PtrUInt
935     ) : TSDOString;override;
936     procedure setString(
937       const ABuffer : TSDOFieldBuffer;
938       const AOffset : PtrUInt;
939       const AValue  : TSDOString
940     );override;
941 
getCurrencynull942     function getCurrency(
943       const ABuffer : TSDOFieldBuffer;
944       const AOffset : PtrUInt
945     ) : TSDOCurrency; override;
946     procedure setCurrency(
947       const ABuffer : TSDOFieldBuffer;
948       const AOffset : PtrUInt;
949       const AValue  : TSDOCurrency
950     ); override;
951 {$IFDEF HAS_SDO_DOUBLE}
getDoublenull952     function getDouble(
953       const ABuffer : TSDOFieldBuffer;
954       const AOffset : PtrUInt
955     ) : TSDODouble; override;
956     procedure setDouble(
957       const ABuffer : TSDOFieldBuffer;
958       const AOffset : PtrUInt;
959       const AValue  : TSDODouble
960     ); override;
961 {$ENDIF HAS_SDO_DOUBLE}
962 
963 {$IFDEF HAS_SDO_FLOAT}
getFloatnull964     function getFloat(
965       const ABuffer : TSDOFieldBuffer;
966       const AOffset : PtrUInt
967     ) : TSDOFloat; override;
968     procedure setFloat(
969       const ABuffer : TSDOFieldBuffer;
970       const AOffset : PtrUInt;
971       const AValue  : TSDOFloat
972     ); override;
973 {$ENDIF HAS_SDO_FLOAT}
974   end;
975 {$ENDIF HAS_SDO_CURRENCY}
976 
977   TSDODateField = class(TSDOBaseField,IInterface,ISDOField)
978   protected
getVariantnull979     function getVariant(
980       const ABuffer : TSDOFieldBuffer;
981       const AOffset : PtrUInt
982     ) : TSDOVariant; override;
983     procedure setVariant(
984       const ABuffer : TSDOFieldBuffer;
985       const AOffset : PtrUInt;
986       const AValue  : TSDOVariant
987     ); override;
988 
getDatenull989     function getDate(
990       const ABuffer : TSDOFieldBuffer;
991       const AOffset : PtrUInt
992     ) : TSDODate; override;
993     procedure setDate(
994       const ABuffer : TSDOFieldBuffer;
995       const AOffset : PtrUInt;
996       const AValue  : TSDODate
997     );override;
998 
getStringnull999     function getString(
1000       const ABuffer : TSDOFieldBuffer;
1001       const AOffset : PtrUInt
1002     ) : TSDOString;override;
1003     procedure setString(
1004       const ABuffer : TSDOFieldBuffer;
1005       const AOffset : PtrUInt;
1006       const AValue  : TSDOString
1007     );override;
1008   end;
1009 
1010 {$IFDEF HAS_SDO_LONG}
1011   TSDOLongField = class(TSDOBaseField,IInterface,ISDOField)
1012   protected
getVariantnull1013     function getVariant(
1014       const ABuffer : TSDOFieldBuffer;
1015       const AOffset : PtrUInt
1016     ) : TSDOVariant; override;
1017     procedure setVariant(
1018       const ABuffer : TSDOFieldBuffer;
1019       const AOffset : PtrUInt;
1020       const AValue  : TSDOVariant
1021     ); override;
1022 
getBooleannull1023     function getBoolean(
1024       const ABuffer : TSDOFieldBuffer;
1025       const AOffset : PtrUInt
1026     ) : TSDOBoolean;override;
1027     procedure setBoolean(
1028       const ABuffer : TSDOFieldBuffer;
1029       const AOffset : PtrUInt;
1030       const AValue  : TSDOBoolean
1031     );override;
1032 
getBytenull1033     function getByte(
1034       const ABuffer : TSDOFieldBuffer;
1035       const AOffset : PtrUInt
1036     ) : TSDOByte; override;
1037     procedure setByte(
1038       const ABuffer : TSDOFieldBuffer;
1039       const AOffset : PtrUInt;
1040       const AValue  : TSDOByte
1041     );override;
1042 
getCharacternull1043     function getCharacter(
1044       const ABuffer : TSDOFieldBuffer;
1045       const AOffset : PtrUInt
1046     ) : TSDOChar; override;
1047     procedure setCharacter(
1048       const ABuffer : TSDOFieldBuffer;
1049       const AOffset : PtrUInt;
1050       const AValue  : TSDOChar
1051     ); override;
1052 
getIntegernull1053     function getInteger(
1054       const ABuffer : TSDOFieldBuffer;
1055       const AOffset : PtrUInt
1056     ) : TSDOInteger;override;
1057     procedure setInteger(
1058       const ABuffer : TSDOFieldBuffer;
1059       const AOffset : PtrUInt;
1060       const AValue  : TSDOInteger
1061     );override;
1062 
getLongnull1063     function getLong(
1064       const ABuffer : TSDOFieldBuffer;
1065       const AOffset : PtrUInt
1066     ) : TSDOLong; override;
1067     procedure setLong(
1068       const ABuffer : TSDOFieldBuffer;
1069       const AOffset : PtrUInt;
1070       const AValue  : TSDOLong
1071     ); override;
1072 
getShortnull1073     function getShort(
1074       const ABuffer : TSDOFieldBuffer;
1075       const AOffset : PtrUInt
1076     ) : TSDOShort; override;
1077     procedure setShort(
1078       const ABuffer : TSDOFieldBuffer;
1079       const AOffset : PtrUInt;
1080       const AValue  : TSDOShort
1081     ); override;
1082 
getStringnull1083     function getString(
1084       const ABuffer : TSDOFieldBuffer;
1085       const AOffset : PtrUInt
1086     ) : TSDOString;override;
1087     procedure setString(
1088       const ABuffer : TSDOFieldBuffer;
1089       const AOffset : PtrUInt;
1090       const AValue  : TSDOString
1091     );override;
1092 
1093   end;
1094 {$ENDIF HAS_SDO_LONG}
1095 
1096 {$IFDEF HAS_SDO_SHORT}
1097   TSDOShortField = class(TSDOBaseField,IInterface,ISDOField)
1098   protected
getVariantnull1099     function getVariant(
1100       const ABuffer : TSDOFieldBuffer;
1101       const AOffset : PtrUInt
1102     ) : TSDOVariant; override;
1103     procedure setVariant(
1104       const ABuffer : TSDOFieldBuffer;
1105       const AOffset : PtrUInt;
1106       const AValue  : TSDOVariant
1107     ); override;
1108 
getBooleannull1109     function getBoolean(
1110       const ABuffer : TSDOFieldBuffer;
1111       const AOffset : PtrUInt
1112     ) : TSDOBoolean;override;
1113     procedure setBoolean(
1114       const ABuffer : TSDOFieldBuffer;
1115       const AOffset : PtrUInt;
1116       const AValue  : TSDOBoolean
1117     );override;
1118 
getBytenull1119     function getByte(
1120       const ABuffer : TSDOFieldBuffer;
1121       const AOffset : PtrUInt
1122     ) : TSDOByte; override;
1123     procedure setByte(
1124       const ABuffer : TSDOFieldBuffer;
1125       const AOffset : PtrUInt;
1126       const AValue  : TSDOByte
1127     );override;
1128 
getCharacternull1129     function getCharacter(
1130       const ABuffer : TSDOFieldBuffer;
1131       const AOffset : PtrUInt
1132     ) : TSDOChar; override;
1133     procedure setCharacter(
1134       const ABuffer : TSDOFieldBuffer;
1135       const AOffset : PtrUInt;
1136       const AValue  : TSDOChar
1137     ); override;
1138 
getIntegernull1139     function getInteger(
1140       const ABuffer : TSDOFieldBuffer;
1141       const AOffset : PtrUInt
1142     ) : TSDOInteger;override;
1143     procedure setInteger(
1144       const ABuffer : TSDOFieldBuffer;
1145       const AOffset : PtrUInt;
1146       const AValue  : TSDOInteger
1147     );override;
1148 
getLongnull1149     function getLong(
1150       const ABuffer : TSDOFieldBuffer;
1151       const AOffset : PtrUInt
1152     ) : TSDOLong; override;
1153     procedure setLong(
1154       const ABuffer : TSDOFieldBuffer;
1155       const AOffset : PtrUInt;
1156       const AValue  : TSDOLong
1157     ); override;
1158 
getShortnull1159     function getShort(
1160       const ABuffer : TSDOFieldBuffer;
1161       const AOffset : PtrUInt
1162     ) : TSDOShort; override;
1163     procedure setShort(
1164       const ABuffer : TSDOFieldBuffer;
1165       const AOffset : PtrUInt;
1166       const AValue  : TSDOShort
1167     ); override;
1168 
getStringnull1169     function getString(
1170       const ABuffer : TSDOFieldBuffer;
1171       const AOffset : PtrUInt
1172     ) : TSDOString;override;
1173     procedure setString(
1174       const ABuffer : TSDOFieldBuffer;
1175       const AOffset : PtrUInt;
1176       const AValue  : TSDOString
1177     );override;
1178 
1179   end;
1180 {$ENDIF HAS_SDO_SHORT}
1181 
1182 {$IFDEF HAS_SDO_DOUBLE}
1183   TSDODoubleField = class(TSDOBaseField,IInterface,ISDOField)
1184   protected
getVariantnull1185     function getVariant(
1186       const ABuffer : TSDOFieldBuffer;
1187       const AOffset : PtrUInt
1188     ) : TSDOVariant; override;
1189     procedure setVariant(
1190       const ABuffer : TSDOFieldBuffer;
1191       const AOffset : PtrUInt;
1192       const AValue  : TSDOVariant
1193     ); override;
1194 
getStringnull1195     function getString(
1196       const ABuffer : TSDOFieldBuffer;
1197       const AOffset : PtrUInt
1198     ) : TSDOString;override;
1199     procedure setString(
1200       const ABuffer : TSDOFieldBuffer;
1201       const AOffset : PtrUInt;
1202       const AValue  : TSDOString
1203     );override;
1204 
getCurrencynull1205     function getCurrency(
1206       const ABuffer : TSDOFieldBuffer;
1207       const AOffset : PtrUInt
1208     ) : TSDOCurrency; override;
1209     procedure setCurrency(
1210       const ABuffer : TSDOFieldBuffer;
1211       const AOffset : PtrUInt;
1212       const AValue  : TSDOCurrency
1213     ); override;
1214 
getDoublenull1215     function getDouble(
1216       const ABuffer : TSDOFieldBuffer;
1217       const AOffset : PtrUInt
1218     ) : TSDODouble; override;
1219     procedure setDouble(
1220       const ABuffer : TSDOFieldBuffer;
1221       const AOffset : PtrUInt;
1222       const AValue  : TSDODouble
1223     ); override;
1224 
getFloatnull1225     function getFloat(
1226       const ABuffer : TSDOFieldBuffer;
1227       const AOffset : PtrUInt
1228     ) : TSDOFloat; override;
1229     procedure setFloat(
1230       const ABuffer : TSDOFieldBuffer;
1231       const AOffset : PtrUInt;
1232       const AValue  : TSDOFloat
1233     ); override;
1234   end;
1235 {$ENDIF HAS_SDO_DOUBLE}
1236 
1237 {$IFDEF HAS_SDO_FLOAT}
1238   TSDOFloatField = class(TSDOBaseField,IInterface,ISDOField)
1239   protected
getVariantnull1240     function getVariant(
1241       const ABuffer : TSDOFieldBuffer;
1242       const AOffset : PtrUInt
1243     ) : TSDOVariant; override;
1244     procedure setVariant(
1245       const ABuffer : TSDOFieldBuffer;
1246       const AOffset : PtrUInt;
1247       const AValue  : TSDOVariant
1248     ); override;
1249 
getStringnull1250     function getString(
1251       const ABuffer : TSDOFieldBuffer;
1252       const AOffset : PtrUInt
1253     ) : TSDOString;override;
1254     procedure setString(
1255       const ABuffer : TSDOFieldBuffer;
1256       const AOffset : PtrUInt;
1257       const AValue  : TSDOString
1258     );override;
1259 
getCurrencynull1260     function getCurrency(
1261       const ABuffer : TSDOFieldBuffer;
1262       const AOffset : PtrUInt
1263     ) : TSDOCurrency; override;
1264     procedure setCurrency(
1265       const ABuffer : TSDOFieldBuffer;
1266       const AOffset : PtrUInt;
1267       const AValue  : TSDOCurrency
1268     ); override;
1269 
getDoublenull1270     function getDouble(
1271       const ABuffer : TSDOFieldBuffer;
1272       const AOffset : PtrUInt
1273     ) : TSDODouble; override;
1274     procedure setDouble(
1275       const ABuffer : TSDOFieldBuffer;
1276       const AOffset : PtrUInt;
1277       const AValue  : TSDODouble
1278     ); override;
1279 
getFloatnull1280     function getFloat(
1281       const ABuffer : TSDOFieldBuffer;
1282       const AOffset : PtrUInt
1283     ) : TSDOFloat; override;
1284     procedure setFloat(
1285       const ABuffer : TSDOFieldBuffer;
1286       const AOffset : PtrUInt;
1287       const AValue  : TSDOFloat
1288     ); override;
1289   end;
1290 {$ENDIF HAS_SDO_FLOAT}
1291 
getFieldnull1292   function getField(const AKind : TSDOTypeKind) : ISDOField ;{$IFDEF USE_INLINE}inline;{$ENDIF}
1293 
1294 
1295 implementation
1296 
1297 uses
1298   sdo_imp_utils, sdo_date_utils, Variants;
1299 
1300 var
1301   FieldMAP : array[TSDOTypeKind] of ISDOField;
1302 
getFieldnull1303 function getField(const AKind : TSDOTypeKind) : ISDOField ;
1304 begin
1305   Result := FieldMAP[AKind];
1306 end;
1307 
1308 procedure PrepareMap();
1309 begin
1310   FieldMAP[BooleanType] := TSDOBooleanField.Create();
1311   FieldMAP[ByteType] := TSDOByteField.Create();
1312 {$IFDEF HAS_SDO_BYTES}
1313   FieldMAP[BytesType] := TSDOBytesField.Create();
1314 {$ENDIF HAS_SDO_BYTES}
1315 {$IFDEF HAS_SDO_CHAR}
1316   FieldMAP[CharacterType] := TSDOCharField.Create();
1317 {$ENDIF HAS_SDO_CHAR}
1318 {$IFDEF HAS_SDO_CURRENCY}
1319   FieldMAP[CurrencyType] := TSDOCurrencyField.Create();
1320 {$ENDIF HAS_SDO_CURRENCY}
1321 {$IFDEF HAS_SDO_DOUBLE}
1322   FieldMAP[DoubleType] := TSDODoubleField.Create();
1323 {$ENDIF HAS_SDO_DOUBLE}
1324 {$IFDEF HAS_SDO_FLOAT}
1325   FieldMAP[FloatType] := TSDOFloatField.Create();
1326 {$ENDIF HAS_SDO_FLOAT}
1327   FieldMAP[DateTimeType] := TSDODateField.Create();
1328   FieldMAP[IntegerType] := TSDOIntegerField.Create();
1329 {$IFDEF HAS_SDO_LONG}
1330   FieldMAP[LongType] := TSDOLongField.Create();
1331 {$ENDIF HAS_SDO_LONG}
1332 {$IFDEF HAS_SDO_SHORT}
1333   FieldMAP[ShortType] := TSDOShortField.Create();
1334 {$ENDIF HAS_SDO_ShORT}
1335   FieldMAP[StringType] := TSDOStringField.Create();
1336 
1337   FieldMAP[ObjectType] := TSDOObjectField.Create();
1338   FieldMAP[ChangeSummaryType] := TSDOChangeSummaryField.Create();
1339 end;
1340 
1341 procedure UnprepareMap();
1342 var
1343   e : TSDOTypeKind;
1344 begin
1345   for e := Low(TSDOTypeKind) to High(TSDOTypeKind) do begin
1346     FieldMAP[e] := nil;
1347   end;
1348 end;
1349 
1350 { TSDOBaseField }
1351 
1352 {$WARNINGS OFF}
TSDOBaseField.getBooleannull1353 function TSDOBaseField.getBoolean(
1354   const ABuffer: TSDOFieldBuffer;
1355   const AOffset: PtrUInt
1356 ) : TSDOBoolean;
1357 begin
1358   raise ESDOInvalidConversionException.Create(ClassName);
1359 end;
1360 {$WARNINGS ON}
1361 
1362 {$WARNINGS OFF}
getBytenull1363 function TSDOBaseField.getByte(
1364   const ABuffer: TSDOFieldBuffer;
1365   const AOffset: PtrUInt
1366 ) : TSDOByte;
1367 begin
1368   raise ESDOInvalidConversionException.Create(ClassName);
1369 end;
1370 {$WARNINGS ON}
1371 
1372 {$WARNINGS OFF}
TSDOBaseField.getBytesnull1373 function TSDOBaseField.getBytes(
1374   const ABuffer: TSDOFieldBuffer;
1375   const AOffset: PtrUInt
1376 ) : TSDOBytes;
1377 begin
1378   raise ESDOInvalidConversionException.Create(ClassName);
1379 end;
1380 {$WARNINGS ON}
1381 
1382 {$WARNINGS OFF}
TSDOBaseField.getChangeSummarynull1383 function TSDOBaseField.getChangeSummary(
1384   const ABuffer: TSDOFieldBuffer;
1385   const AOffset: PtrUInt
1386 ) : ISDOChangeSummary;
1387 begin
1388   raise ESDOInvalidConversionException.Create(ClassName);
1389 end;
1390 {$WARNINGS ON}
1391 
1392 {$WARNINGS OFF}
getCharacternull1393 function TSDOBaseField.getCharacter(
1394   const ABuffer: TSDOFieldBuffer;
1395   const AOffset: PtrUInt
1396 ) : TSDOChar;
1397 begin
1398   raise ESDOInvalidConversionException.Create(ClassName);
1399 end;
1400 {$WARNINGS ON}
1401 
1402 {$WARNINGS OFF}
getDataObjectnull1403 function TSDOBaseField.getDataObject(
1404   const ABuffer: TSDOFieldBuffer;
1405   const AOffset: PtrUInt
1406 ): ISDODataObject;
1407 begin
1408   raise ESDOInvalidConversionException.Create(ClassName);
1409 end;
1410 {$WARNINGS ON}
1411 
1412 {$WARNINGS OFF}
getDatenull1413 function TSDOBaseField.getDate(
1414   const ABuffer: TSDOFieldBuffer;
1415   const AOffset: PtrUInt
1416 ) : TSDODate;
1417 begin
1418   raise ESDOInvalidConversionException.Create(ClassName);
1419 end;
1420 {$WARNINGS ON}
1421 
1422 {$WARNINGS OFF}
TSDOBaseField.getIntegernull1423 function TSDOBaseField.getInteger(
1424   const ABuffer: TSDOFieldBuffer;
1425   const AOffset: PtrUInt
1426 ) : TSDOInteger;
1427 begin
1428   raise ESDOInvalidConversionException.Create(ClassName);
1429 end;
1430 {$WARNINGS ON}
1431 
1432 {$WARNINGS OFF}
getLongnull1433 function TSDOBaseField.getLong(
1434   const ABuffer: TSDOFieldBuffer;
1435   const AOffset: PtrUInt
1436 ) : TSDOLong;
1437 begin
1438   raise ESDOInvalidConversionException.Create(ClassName);
1439 end;
1440 {$WARNINGS ON}
1441 
1442 {$WARNINGS OFF}
getShortnull1443 function TSDOBaseField.getShort(
1444   const ABuffer: TSDOFieldBuffer;
1445   const AOffset: PtrUInt
1446 ) : TSDOShort;
1447 begin
1448   raise ESDOInvalidConversionException.Create(ClassName);
1449 end;
1450 {$WARNINGS ON}
1451 
1452 {$WARNINGS OFF}
TSDOBaseField.getStringnull1453 function TSDOBaseField.getString(
1454   const ABuffer: TSDOFieldBuffer;
1455   const AOffset: PtrUInt
1456 ) : TSDOString;
1457 begin
1458   raise ESDOInvalidConversionException.Create(ClassName);
1459 end;
1460 {$WARNINGS ON}
1461 
isNullnull1462 function TSDOBaseField.isNull(const ABuffer: TSDOFieldBuffer; const AOffset: PtrUInt): Boolean;
1463 var
1464   locBuffer : PByte;
1465 begin
1466   locBuffer := ABuffer;
1467   if ( AOffset <> 0 ) then
1468     Inc(locBuffer,AOffset);
1469   Result := IsBitON(locBuffer^,BIT_ORDER_NULL);
1470 end;
1471 
isSetnull1472 function TSDOBaseField.isSet(
1473   const ABuffer: TSDOFieldBuffer;
1474   const AOffset: PtrUInt
1475 ) : Boolean;
1476 var
1477   locBuffer : PByte;
1478 begin
1479   locBuffer := ABuffer;
1480   if ( AOffset <> 0 ) then
1481     Inc(locBuffer,AOffset);
1482   Result := IsBitON(locBuffer^,BIT_ORDER_SET);
1483 end;
1484 
1485 {$WARNINGS OFF}
1486 procedure TSDOBaseField.setBoolean(
1487   const ABuffer: TSDOFieldBuffer;
1488   const AOffset: PtrUInt; const AValue: TSDOBoolean
1489 );
1490 begin
1491   raise ESDOInvalidConversionException.Create(ClassName);
1492 end;
1493 {$WARNINGS ON}
1494 
1495 {$WARNINGS OFF}
1496 procedure TSDOBaseField.setByte(
1497   const ABuffer: TSDOFieldBuffer;
1498   const AOffset: PtrUInt;
1499   const AValue: TSDOByte
1500 );
1501 begin
1502   raise ESDOInvalidConversionException.Create(ClassName);
1503 end;
1504 {$WARNINGS ON}
1505 
1506 {$WARNINGS OFF}
1507 procedure TSDOBaseField.setBytes(
1508   const ABuffer: TSDOFieldBuffer;
1509   const AOffset: PtrUInt;
1510         AValue: TSDOBytes
1511 );
1512 begin
1513   raise ESDOInvalidConversionException.Create(ClassName);
1514 end;
1515 {$WARNINGS ON}
1516 
1517 {$WARNINGS OFF}
1518 procedure TSDOBaseField.setChangeSummary(
1519   const ABuffer: TSDOFieldBuffer;
1520   const AOffset: PtrUInt;
1521   const AValue: ISDOChangeSummary
1522 );
1523 begin
1524   raise ESDOInvalidConversionException.Create(ClassName);
1525 end;
1526 {$WARNINGS ON}
1527 
1528 {$WARNINGS OFF}
1529 procedure TSDOBaseField.setCharacter(
1530   const ABuffer: TSDOFieldBuffer;
1531   const AOffset: PtrUInt;
1532   const AValue: TSDOChar
1533 );
1534 begin
1535   raise ESDOInvalidConversionException.Create(ClassName);
1536 end;
1537 {$WARNINGS ON}
1538 
1539 {$WARNINGS OFF}
1540 procedure TSDOBaseField.setDataObject(
1541   const ABuffer : TSDOFieldBuffer;
1542   const AOffset : PtrUInt;
1543   const AValue  : ISDODataObject
1544 );
1545 begin
1546   raise ESDOInvalidConversionException.Create(ClassName);
1547 end;
1548 {$WARNINGS ON}
1549 
1550 {$WARNINGS OFF}
1551 procedure TSDOBaseField.setDate(
1552   const ABuffer: TSDOFieldBuffer;
1553   const AOffset: PtrUInt;
1554   const AValue: TSDODate
1555 );
1556 begin
1557   raise ESDOInvalidConversionException.Create(ClassName);
1558 end;
1559 {$WARNINGS ON}
1560 
1561 {$WARNINGS OFF}
1562 procedure TSDOBaseField.setInteger(
1563   const ABuffer: TSDOFieldBuffer;
1564   const AOffset: PtrUInt;
1565   const AValue: TSDOInteger
1566 );
1567 begin
1568   raise ESDOInvalidConversionException.Create(ClassName);
1569 end;
1570 {$WARNINGS ON}
1571 
1572 {$WARNINGS OFF}
1573 procedure TSDOBaseField.setLong(
1574   const ABuffer: TSDOFieldBuffer;
1575   const AOffset: PtrUInt;
1576   const AValue: TSDOLong
1577 );
1578 begin
1579   raise ESDOInvalidConversionException.Create(ClassName);
1580 end;
1581 {$WARNINGS ON}
1582 
1583 procedure TSDOBaseField.setNull(const ABuffer: TSDOFieldBuffer; const AOffset: PtrUInt);
1584 var
1585   rawBuffer : PByte;
1586 begin
1587   rawBuffer := PByte(ABuffer);
1588   if ( AOffset <> 0 ) then
1589     Inc(rawBuffer,AOffset);
1590   SetBit(rawBuffer^,BIT_ORDER_SET,True);
1591   SetBit(rawBuffer^,BIT_ORDER_NULL,True);
1592 end;
1593 
1594 {$WARNINGS OFF}
1595 procedure TSDOBaseField.setShort(
1596   const ABuffer: TSDOFieldBuffer;
1597   const AOffset: PtrUInt;
1598   const AValue: TSDOShort
1599 );
1600 begin
1601   raise ESDOInvalidConversionException.Create(ClassName);
1602 end;
1603 {$WARNINGS ON}
1604 
1605 {$WARNINGS OFF}
1606 procedure TSDOBaseField.setString(
1607   const ABuffer: TSDOFieldBuffer;
1608   const AOffset: PtrUInt;
1609   const AValue: TSDOString
1610 );
1611 begin
1612   raise ESDOInvalidConversionException.Create(ClassName);
1613 end;
1614 {$WARNINGS ON}
1615 
1616 procedure TSDOBaseField.unset(const ABuffer: TSDOFieldBuffer; const AOffset: PtrUInt);
1617 var
1618   rawBuffer : PByte;
1619 begin
1620   rawBuffer := PByte(ABuffer);
1621   if ( AOffset <> 0 ) then
1622     Inc(rawBuffer,AOffset);
1623   SetBit(rawBuffer^,BIT_ORDER_SET,False);
1624 end;
1625 
1626 {$IFDEF HAS_SDO_CURRENCY}
1627 {$WARNINGS OFF}
getCurrencynull1628 function TSDOBaseField.getCurrency(
1629   const ABuffer: TSDOFieldBuffer;
1630   const AOffset: PtrUInt
1631 ) : TSDOCurrency;
1632 begin
1633   raise ESDOInvalidConversionException.Create(ClassName);
1634 end;
1635 
1636 procedure TSDOBaseField.setCurrency(
1637   const ABuffer: TSDOFieldBuffer;
1638   const AOffset: PtrUInt;
1639   const AValue: TSDOCurrency
1640 );
1641 begin
1642   raise ESDOInvalidConversionException.Create(ClassName);
1643 end;
1644 {$WARNINGS ON}
1645 {$ENDIF HAS_SDO_CURRENCY}
1646 
1647 {$IFDEF HAS_SDO_DOUBLE}
1648 {$WARNINGS OFF}
getDoublenull1649 function TSDOBaseField.getDouble(
1650   const ABuffer: TSDOFieldBuffer;
1651   const AOffset: PtrUInt
1652 ) : TSDODouble;
1653 begin
1654   raise ESDOInvalidConversionException.Create(ClassName);
1655 end;
1656 
1657 procedure TSDOBaseField.setDouble(
1658   const ABuffer: TSDOFieldBuffer;
1659   const AOffset: PtrUInt;
1660   const AValue: TSDODouble
1661 );
1662 begin
1663   raise ESDOInvalidConversionException.Create(ClassName);
1664 end;
1665 {$WARNINGS ON}
1666 {$ENDIF HAS_SDO_DOUBLE}
1667 
1668 {$IFDEF HAS_SDO_FLOAT}
1669 {$WARNINGS OFF}
getFloatnull1670 function TSDOBaseField.getFloat(
1671   const ABuffer: TSDOFieldBuffer;
1672   const AOffset: PtrUInt
1673 ) : TSDOFloat;
1674 begin
1675   raise ESDOInvalidConversionException.Create(ClassName);
1676 end;
1677 
1678 procedure TSDOBaseField.setFloat(
1679   const ABuffer: TSDOFieldBuffer;
1680   const AOffset: PtrUInt;
1681   const AValue: TSDOFloat
1682 );
1683 begin
1684   raise ESDOInvalidConversionException.Create(ClassName);
1685 end;
1686 {$WARNINGS ON}
1687 {$ENDIF HAS_SDO_FLOAT}
1688 
1689 { TSDOBooleanField }
1690 
TSDOBooleanField.getBooleannull1691 function TSDOBooleanField.getBoolean(
1692   const ABuffer: TSDOFieldBuffer;
1693   const AOffset: PtrUInt
1694 ): TSDOBoolean;
1695 var
1696   buff : PByte;
1697 begin
1698   buff := PByte(ABuffer);
1699   if ( AOffset <> 0 ) then
1700     Inc(buff,AOffset);
1701   if IsBitON(buff^,BIT_ORDER_NULL) then begin
1702     Result := False;
1703   end else begin
1704     Inc(buff);
1705     Result := ( buff^ <> 0 );
1706   end;
1707 end;
1708 
getBytenull1709 function TSDOBooleanField.getByte(
1710   const ABuffer: TSDOFieldBuffer;
1711   const AOffset: PtrUInt
1712 ) : TSDOByte;
1713 begin
1714   Result := TSDOConvertHelper.BoolToByte(getBoolean(ABuffer,AOffset));
1715 end;
1716 
TSDOBooleanField.getCharacternull1717 function TSDOBooleanField.getCharacter(
1718   const ABuffer: TSDOFieldBuffer;
1719   const AOffset: PtrUInt
1720 ) : TSDOChar;
1721 begin
1722   Result := TSDOConvertHelper.BoolToChar(getBoolean(ABuffer,AOffset));
1723 end;
1724 
getIntegernull1725 function TSDOBooleanField.getInteger(
1726   const ABuffer: TSDOFieldBuffer;
1727   const AOffset: PtrUInt
1728 ) : TSDOInteger;
1729 begin
1730   Result := TSDOConvertHelper.BoolToInteger(getBoolean(ABuffer,AOffset));
1731 end;
1732 
getLongnull1733 function TSDOBooleanField.getLong(
1734   const ABuffer: TSDOFieldBuffer;
1735   const AOffset: PtrUInt
1736 ) : TSDOLong;
1737 begin
1738   Result := TSDOConvertHelper.BoolToLong(getBoolean(ABuffer,AOffset));
1739 end;
1740 
getShortnull1741 function TSDOBooleanField.getShort(
1742   const ABuffer: TSDOFieldBuffer;
1743   const AOffset: PtrUInt
1744 ) : TSDOShort;
1745 begin
1746   Result := TSDOConvertHelper.BoolToShort(getBoolean(ABuffer,AOffset));
1747 end;
1748 
TSDOBooleanField.getStringnull1749 function TSDOBooleanField.getString(
1750   const ABuffer: TSDOFieldBuffer;
1751   const AOffset: PtrUInt
1752 ): TSDOString;
1753 begin
1754   Result := TSDOConvertHelper.BoolToString(getBoolean(ABuffer,AOffset));
1755 end;
1756 
getVariantnull1757 function TSDOBooleanField.getVariant(
1758   const ABuffer: TSDOFieldBuffer;
1759   const AOffset: PtrUInt
1760 ) : TSDOVariant;
1761 begin
1762   if isNull(ABuffer,AOffset) then
1763     Result := Null
1764   else
1765     Result := getBoolean(ABuffer,AOffset);
1766 end;
1767 
1768 procedure TSDOBooleanField.setBoolean(
1769   const ABuffer: TSDOFieldBuffer;
1770   const AOffset: PtrUInt;
1771   const AValue: TSDOBoolean
1772 );
1773 var
1774   buff : PByte;
1775 begin
1776   buff := PByte(ABuffer);
1777   if ( AOffset <> 0 ) then
1778     Inc(buff,AOffset);
1779   SetBit(buff^,BIT_ORDER_SET,True);
1780   SetBit(buff^,BIT_ORDER_NULL,False);
1781   Inc(buff);
1782   if AValue then
1783     buff^ := 1
1784   else
1785     buff^ := 0;
1786 end;
1787 
1788 procedure TSDOBooleanField.setByte(
1789   const ABuffer: TSDOFieldBuffer;
1790   const AOffset: PtrUInt;
1791   const AValue: TSDOByte
1792 );
1793 begin
1794   setBoolean(ABuffer,AOffset,( AValue <> 0 ));
1795 end;
1796 
1797 procedure TSDOBooleanField.setCharacter(
1798   const ABuffer: TSDOFieldBuffer;
1799   const AOffset: PtrUInt;
1800   const AValue: TSDOChar
1801 );
1802 begin
1803   setBoolean(ABuffer,AOffset,TSDOConvertHelper.CharToBool(AValue));
1804 end;
1805 
1806 procedure TSDOBooleanField.setInteger(
1807   const ABuffer: TSDOFieldBuffer;
1808   const AOffset: PtrUInt;
1809   const AValue: TSDOInteger
1810 );
1811 begin
1812   setBoolean(ABuffer,AOffset,TSDOConvertHelper.IntegerToBool(AValue));
1813 end;
1814 
1815 procedure TSDOBooleanField.setLong(
1816   const ABuffer: TSDOFieldBuffer;
1817   const AOffset: PtrUInt;
1818   const AValue: TSDOLong
1819 );
1820 begin
1821   setBoolean(ABuffer,AOffset,TSDOConvertHelper.LongToBool(AValue));
1822 end;
1823 
1824 procedure TSDOBooleanField.setShort(
1825   const ABuffer: TSDOFieldBuffer;
1826   const AOffset: PtrUInt;
1827   const AValue: TSDOShort
1828 );
1829 begin
1830   setBoolean(ABuffer,AOffset,TSDOConvertHelper.ShortToBool(AValue));
1831 end;
1832 
1833 procedure TSDOBooleanField.setString(
1834   const ABuffer: TSDOFieldBuffer;
1835   const AOffset: PtrUInt;
1836   const AValue: TSDOString
1837 );
1838 begin
1839   setBoolean(ABuffer,AOffset,TSDOConvertHelper.StringToBool(AValue));
1840 end;
1841 
1842 procedure TSDOBooleanField.setVariant(
1843   const ABuffer: TSDOFieldBuffer;
1844   const AOffset: PtrUInt;
1845   const AValue: TSDOVariant
1846 );
1847 begin
1848   if VarIsNull(AValue) then
1849     setNull(ABuffer,AOffset)
1850   else
1851     setBoolean(ABuffer,AOffset,AValue);
1852 end;
1853 
1854 { TSDOIntegerField }
1855 
getBooleannull1856 function TSDOIntegerField.getBoolean(
1857   const ABuffer: TSDOFieldBuffer;
1858   const AOffset: PtrUInt
1859 ): TSDOBoolean;
1860 begin
1861   Result := TSDOConvertHelper.IntegerToBool(getInteger(ABuffer,AOffset));
1862 end;
1863 
TSDOIntegerField.getBytenull1864 function TSDOIntegerField.getByte(
1865   const ABuffer: TSDOFieldBuffer;
1866   const AOffset: PtrUInt
1867 ) : TSDOByte;
1868 begin
1869   Result := getInteger(ABuffer,AOffset);
1870 end;
1871 
TSDOIntegerField.getCharacternull1872 function TSDOIntegerField.getCharacter(
1873   const ABuffer: TSDOFieldBuffer;
1874   const AOffset: PtrUInt
1875 ) : TSDOChar;
1876 begin
1877   Result := TSDOConvertHelper.IntegerToChar(getInteger(ABuffer,AOffset));
1878 end;
1879 
getIntegernull1880 function TSDOIntegerField.getInteger(
1881   const ABuffer: TSDOFieldBuffer;
1882   const AOffset: PtrUInt
1883 ) : TSDOInteger;
1884 var
1885   buff : PByte;
1886 begin
1887   buff := PByte(ABuffer);
1888   if ( AOffset <> 0 ) then
1889     Inc(buff,AOffset);
1890   if IsBitON(buff^,BIT_ORDER_NULL) then begin
1891     Result := 0;
1892   end else begin
1893     Inc(buff);
1894     Result := PSDOInteger(buff)^;
1895   end;
1896 end;
1897 
getLongnull1898 function TSDOIntegerField.getLong(
1899   const ABuffer: TSDOFieldBuffer;
1900   const AOffset: PtrUInt
1901 ) : TSDOLong;
1902 begin
1903   Result := getInteger(ABuffer,AOffset);
1904 end;
1905 
getShortnull1906 function TSDOIntegerField.getShort(
1907   const ABuffer: TSDOFieldBuffer;
1908   const AOffset: PtrUInt
1909 ) : TSDOShort;
1910 begin
1911   Result := getInteger(ABuffer,AOffset);
1912 end;
1913 
getStringnull1914 function TSDOIntegerField.getString(
1915   const ABuffer : TSDOFieldBuffer;
1916   const AOffset : PtrUInt
1917 ) : TSDOString;
1918 begin
1919   Result := TSDOConvertHelper.IntegerToString(getInteger(ABuffer,AOffset));
1920 end;
1921 
getVariantnull1922 function TSDOIntegerField.getVariant(
1923   const ABuffer: TSDOFieldBuffer;
1924   const AOffset: PtrUInt
1925 ) : TSDOVariant;
1926 begin
1927   if isNull(ABuffer,AOffset) then
1928     Result := Null
1929   else
1930     Result := getInteger(ABuffer,AOffset);
1931 end;
1932 
1933 procedure TSDOIntegerField.setBoolean(
1934   const ABuffer: TSDOFieldBuffer;
1935   const AOffset: PtrUInt; const AValue: TSDOBoolean
1936 );
1937 begin
1938   setInteger(ABuffer,AOffset,TSDOConvertHelper.BoolToInteger(AValue));
1939 end;
1940 
1941 procedure TSDOIntegerField.setByte(
1942   const ABuffer: TSDOFieldBuffer;
1943   const AOffset: PtrUInt;
1944   const AValue: TSDOByte
1945 );
1946 begin
1947   setInteger(ABuffer,AOffset,AValue);
1948 end;
1949 
1950 procedure TSDOIntegerField.setCharacter(
1951   const ABuffer: TSDOFieldBuffer;
1952   const AOffset: PtrUInt;
1953   const AValue: TSDOChar
1954 );
1955 begin
1956   setInteger(ABuffer,AOffset,TSDOConvertHelper.CharToInteger(AValue));
1957 end;
1958 
1959 procedure TSDOIntegerField.setInteger(
1960   const ABuffer: TSDOFieldBuffer;
1961   const AOffset: PtrUInt; const AValue: TSDOInteger
1962 );
1963 var
1964   buff : PByte;
1965 begin
1966   buff := PByte(ABuffer);
1967   if ( AOffset <> 0 ) then
1968     Inc(buff,AOffset);
1969   SetBit(buff^,BIT_ORDER_SET,True);
1970   SetBit(buff^,BIT_ORDER_NULL,False);
1971   Inc(buff);
1972   PSDOInteger(buff)^ := AValue;
1973 end;
1974 
1975 procedure TSDOIntegerField.setLong(
1976   const ABuffer: TSDOFieldBuffer;
1977   const AOffset: PtrUInt;
1978   const AValue: TSDOLong
1979 );
1980 begin
1981   setInteger(ABuffer,AOffset,AValue);
1982 end;
1983 
1984 procedure TSDOIntegerField.setShort(
1985   const ABuffer: TSDOFieldBuffer;
1986   const AOffset: PtrUInt;
1987   const AValue: TSDOShort
1988 );
1989 begin
1990   setInteger(ABuffer,AOffset,AValue);
1991 end;
1992 
1993 procedure TSDOIntegerField.setString(
1994   const ABuffer: TSDOFieldBuffer;
1995   const AOffset: PtrUInt; const AValue: TSDOString
1996 );
1997 begin
1998   setInteger(ABuffer,AOffset,TSDOConvertHelper.StringToInteger(AValue));
1999 end;
2000 
2001 procedure TSDOIntegerField.setVariant(
2002   const ABuffer: TSDOFieldBuffer;
2003   const AOffset: PtrUInt;
2004   const AValue: TSDOVariant
2005 );
2006 begin
2007   if VarIsNull(AValue) then
2008     setNull(ABuffer,AOffset)
2009   else
2010     setInteger(ABuffer,AOffset,AValue);
2011 end;
2012 
2013 { TSDOBaseStringField }
2014 
2015 procedure TSDOBaseStringField.FreeBuffer(const ABuffer : TSDOFieldBuffer);
2016 var
2017   rawBuffer : PByte;
2018   strBuffer : PPSDOString;
2019 begin
2020   rawBuffer := PByte(ABuffer);
2021   if IsBitON(rawBuffer^,BIT_ORDER_BUFFER) then begin
2022     Inc(rawBuffer);
2023     strBuffer := PPSDOString(rawBuffer);
2024     SetLength(strBuffer^^,0);
2025     FreeMem(strBuffer^,SizeOf(PSDOString));
2026     strBuffer^ := nil;
2027     Dec(rawBuffer);
2028     SetBit(rawBuffer^,BIT_ORDER_BUFFER,False);
2029   end;
2030 end;
2031 
TSDOBaseStringField.getBooleannull2032 function TSDOBaseStringField.getBoolean(
2033   const ABuffer: TSDOFieldBuffer;
2034   const AOffset: PtrUInt
2035 ) : TSDOBoolean;
2036 begin
2037   Result := TSDOConvertHelper.StringToBool(getString(ABuffer,AOffset));
2038 end;
2039 
TSDOBaseStringField.getBytenull2040 function TSDOBaseStringField.getByte(
2041   const ABuffer: TSDOFieldBuffer;
2042   const AOffset: PtrUInt
2043 ) : TSDOByte;
2044 begin
2045   Result := TSDOConvertHelper.StringToByte(getString(ABuffer,AOffset));
2046 end;
2047 
getCharacternull2048 function TSDOBaseStringField.getCharacter(
2049   const ABuffer: TSDOFieldBuffer;
2050   const AOffset: PtrUInt
2051 ) : TSDOChar;
2052 begin
2053   Result := TSDOConvertHelper.StringToChar(getString(ABuffer,AOffset));
2054 end;
2055 
TSDOBaseStringField.getIntegernull2056 function TSDOBaseStringField.getInteger(
2057   const ABuffer: TSDOFieldBuffer;
2058   const AOffset: PtrUInt
2059 ) : TSDOInteger;
2060 begin
2061   Result := TSDOConvertHelper.StringToInteger(getString(ABuffer,AOffset));
2062 end;
2063 
getLongnull2064 function TSDOBaseStringField.getLong(
2065   const ABuffer: TSDOFieldBuffer;
2066   const AOffset: PtrUInt
2067 ) : TSDOLong;
2068 begin
2069   Result := TSDOConvertHelper.StringToLong(getString(ABuffer,AOffset));
2070 end;
2071 
TSDOBaseStringField.getShortnull2072 function TSDOBaseStringField.getShort(
2073   const ABuffer: TSDOFieldBuffer;
2074   const AOffset: PtrUInt
2075 ) : TSDOShort;
2076 begin
2077   Result := TSDOConvertHelper.StringToShort(getString(ABuffer,AOffset));
2078 end;
2079 
getStringnull2080 function TSDOBaseStringField.getString(
2081   const ABuffer: TSDOFieldBuffer;
2082   const AOffset: PtrUInt
2083 ) : TSDOString;
2084 var
2085   buff : PByte;
2086 begin
2087   buff := PByte(ABuffer);
2088   if ( AOffset <> 0 ) then
2089     Inc(buff,AOffset);
2090   if IsBitON(buff^,BIT_ORDER_NULL) then begin
2091     Result := '';
2092   end else begin
2093     if IsBitON(buff^,BIT_ORDER_BUFFER) then begin
2094       Inc(buff);
2095       Result := PPSDOString(buff)^^
2096     end else begin
2097       Result := '';
2098     end;
2099   end;
2100 end;
2101 
getVariantnull2102 function TSDOBaseStringField.getVariant(
2103   const ABuffer: TSDOFieldBuffer;
2104   const AOffset: PtrUInt
2105 ) : TSDOVariant;
2106 begin
2107   if isNull(ABuffer,AOffset) then
2108     Result := Null
2109   else
2110     Result := getString(ABuffer,AOffset);
2111 end;
2112 
2113 procedure TSDOBaseStringField.setBoolean(
2114   const ABuffer: TSDOFieldBuffer;
2115   const AOffset: PtrUInt;
2116   const AValue: TSDOBoolean
2117 );
2118 begin
2119   setString(ABuffer,AOffset,TSDOConvertHelper.BoolToString(AValue));
2120 end;
2121 
2122 procedure TSDOBaseStringField.setByte(
2123   const ABuffer: TSDOFieldBuffer;
2124   const AOffset: PtrUInt;
2125   const AValue: TSDOByte
2126 );
2127 begin
2128   setString(ABuffer,AOffset,TSDOConvertHelper.ByteToString(AValue));
2129 end;
2130 
2131 procedure TSDOBaseStringField.setCharacter(
2132   const ABuffer: TSDOFieldBuffer;
2133   const AOffset: PtrUInt;
2134   const AValue: TSDOChar
2135 );
2136 begin
2137   setString(ABuffer,AOffset,AValue);
2138 end;
2139 
2140 procedure TSDOBaseStringField.setInteger(
2141   const ABuffer: TSDOFieldBuffer;
2142   const AOffset: PtrUInt; const AValue: TSDOInteger
2143 );
2144 begin
2145   setString(ABuffer,AOffset,TSDOConvertHelper.IntegerToString(AValue));
2146 end;
2147 
2148 procedure TSDOBaseStringField.setLong(
2149   const ABuffer: TSDOFieldBuffer;
2150   const AOffset: PtrUInt;
2151   const AValue: TSDOLong
2152 );
2153 begin
2154   setString(ABuffer,AOffset,TSDOConvertHelper.LongToString(AValue));
2155 end;
2156 
2157 procedure TSDOBaseStringField.setNull(const ABuffer: TSDOFieldBuffer; const AOffset: PtrUInt);
2158 var
2159   rawBuffer : PByte;
2160 begin
2161   rawBuffer := PByte(ABuffer);
2162   if ( AOffset <> 0 ) then
2163     Inc(rawBuffer,AOffset);
2164   if IsBitON(rawBuffer^,BIT_ORDER_BUFFER) then begin
2165     FreeBuffer(rawBuffer);
2166   end;
2167   inherited setNull(ABuffer,AOffset);
2168 end;
2169 
2170 procedure TSDOBaseStringField.setShort(
2171   const ABuffer: TSDOFieldBuffer;
2172   const AOffset: PtrUInt;
2173   const AValue: TSDOShort
2174 );
2175 begin
2176   setString(ABuffer,AOffset,TSDOConvertHelper.ShortToString(AValue));
2177 end;
2178 
2179 procedure TSDOBaseStringField.setString(
2180   const ABuffer: TSDOFieldBuffer;
2181   const AOffset: PtrUInt; const AValue: TSDOString
2182 );
2183 var
2184   rawBuffer : PByte;
2185   strBuffer : PPSDOString;
2186 begin
2187   rawBuffer := PByte(ABuffer);
2188   if ( AOffset <> 0 ) then
2189     Inc(rawBuffer,AOffset);
2190   SetBit(rawBuffer^,BIT_ORDER_SET,True);
2191   if IsBitON(rawBuffer^,BIT_ORDER_BUFFER) then begin
2192     SetBit(rawBuffer^,BIT_ORDER_NULL,False);
2193     Inc(rawBuffer);
2194     strBuffer := PPSDOString(rawBuffer);
2195   end else begin;
2196     SetBit(rawBuffer^,BIT_ORDER_NULL,False);
2197     SetBit(rawBuffer^,BIT_ORDER_BUFFER,True);
2198     Inc(rawBuffer);
2199     strBuffer := PPSDOString(rawBuffer);
2200     GetMem(strBuffer^,SizeOf(PSDOString));
2201     FillChar(strBuffer^^,SizeOf(TSDOString),#0);
2202   end;
2203   strBuffer^^ := AValue;
2204 end;
2205 
2206 procedure TSDOBaseStringField.setVariant(
2207   const ABuffer: TSDOFieldBuffer;
2208   const AOffset: PtrUInt;
2209   const AValue: TSDOVariant
2210 );
2211 begin
2212   if VarIsNull(AValue) then
2213     setNull(ABuffer,AOffset)
2214   else
2215     setString(ABuffer,AOffset,AValue);
2216 end;
2217 
2218 procedure TSDOBaseStringField.unset(const ABuffer: TSDOFieldBuffer; const AOffset: PtrUInt);
2219 //var
2220   //rawBuffer : PByte;
2221 begin
2222   {rawBuffer := PByte(ABuffer);
2223   if ( AOffset <> 0 ) then
2224     Inc(rawBuffer,AOffset);
2225   do not free the buffer, in case of a default value!
2226   if IsBitON(rawBuffer^,BIT_ORDER_BUFFER) then begin
2227     FreeBuffer(rawBuffer);
2228   end;}
2229   inherited unset(ABuffer,AOffset);
2230 end;
2231 
2232 
2233 { TSDOObjectField }
2234 
2235 procedure TSDOObjectField.FreeBuffer(const ABuffer: TSDOFieldBuffer);
2236 var
2237   rawBuffer : PByte;
2238   objBuffer : PPSDODataObject;
2239 begin
2240   rawBuffer := PByte(ABuffer);
2241   if IsBitON(rawBuffer^,BIT_ORDER_BUFFER) then begin
2242     Inc(rawBuffer);
2243     objBuffer := PPSDODataObject(rawBuffer);
2244     objBuffer^^ := nil;
2245     FreeMem(objBuffer^,SizeOf(PSDODataObject));
2246     objBuffer^ := nil;
2247     Dec(rawBuffer);
2248     SetBit(rawBuffer^,BIT_ORDER_BUFFER,False);
2249   end;
2250 end;
2251 
TSDOObjectField.getDataObjectnull2252 function TSDOObjectField.getDataObject(
2253   const ABuffer: TSDOFieldBuffer;
2254   const AOffset: PtrUInt
2255 ) : ISDODataObject;
2256 var
2257   buff : PByte;
2258   objBuffer : PPSDODataObject;
2259 begin
2260   buff := PByte(ABuffer);
2261   if ( AOffset <> 0 ) then
2262     Inc(buff,AOffset);
2263   if IsBitON(buff^,BIT_ORDER_NULL) then begin
2264     Result := nil;
2265   end else begin
2266     if IsBitON(buff^,BIT_ORDER_BUFFER) then begin
2267       Inc(buff);
2268       objBuffer := PPSDODataObject(buff);
2269       Result := objBuffer^^;
2270     end else begin
2271       Result := nil;
2272     end;
2273   end;
2274 end;
2275 
getVariantnull2276 function TSDOObjectField.getVariant(
2277   const ABuffer: TSDOFieldBuffer;
2278   const AOffset: PtrUInt
2279 ) : TSDOVariant;
2280 begin
2281   if isNull(ABuffer,AOffset) then
2282     Result := Null
2283   else
2284     Result := getDataObject(ABuffer,AOffset);
2285 end;
2286 
2287 procedure TSDOObjectField.setDataObject(
2288   const ABuffer : TSDOFieldBuffer;
2289   const AOffset : PtrUInt;
2290   const AValue  : ISDODataObject
2291 );
2292 var
2293   rawBuffer : PByte;
2294   objBuffer : PPSDODataObject;
2295 begin
2296   rawBuffer := PByte(ABuffer);
2297   if ( AOffset <> 0 ) then
2298     Inc(rawBuffer,AOffset);
2299   if IsBitON(rawBuffer^,BIT_ORDER_BUFFER) then begin
2300     SetBit(rawBuffer^,BIT_ORDER_NULL,False);
2301     Inc(rawBuffer);
2302     objBuffer := PPSDODataObject(rawBuffer);
2303   end else begin;
2304     SetBit(rawBuffer^,BIT_ORDER_SET,True);
2305     SetBit(rawBuffer^,BIT_ORDER_BUFFER,True);
2306     SetBit(rawBuffer^,BIT_ORDER_NULL,False);
2307     Inc(rawBuffer);
2308     objBuffer := PPSDODataObject(rawBuffer);
2309     GetMem(objBuffer^,SizeOf(PSDODataObject));
2310     FillChar(objBuffer^^,SizeOf(ISDODataObject),#0);
2311   end;
2312   objBuffer^^ := AValue;
2313 end;
2314 
2315 procedure TSDOObjectField.setVariant(
2316   const ABuffer : TSDOFieldBuffer;
2317   const AOffset : PtrUInt;
2318   const AValue  : TSDOVariant
2319 );
2320 var
2321   x : IInterface;
2322   obj : ISDODataObject;
2323 begin
2324   if VarIsNull(AValue) then begin
2325     setNull(ABuffer,AOffset);
2326     exit;
2327   end;
2328   if not VarIsType(AValue,varUnknown) then
2329     raise ESDOInvalidConversionException.Create(ClassName);
2330   x := AValue;
2331   if (x = nil) then begin
2332     obj := nil;
2333   end else begin
2334     if not Supports(x,ISDODataObject,obj) then
2335       raise ESDOInvalidConversionException.Create(ClassName);
2336   end;
2337   setDataObject(ABuffer,AOffset,obj);
2338 end;
2339 
2340 procedure TSDOObjectField.setNull(const ABuffer: TSDOFieldBuffer; const AOffset: PtrUInt);
2341 var
2342   rawBuffer : PByte;
2343 begin
2344   rawBuffer := PByte(ABuffer);
2345   if ( AOffset <> 0 ) then
2346     Inc(rawBuffer,AOffset);
2347   if IsBitON(rawBuffer^,BIT_ORDER_BUFFER) then begin
2348     FreeBuffer(rawBuffer);
2349   end;
2350   inherited setNull(ABuffer,AOffset);
2351 end;
2352 
2353 procedure TSDOObjectField.unset(
2354   const ABuffer: TSDOFieldBuffer;
2355   const AOffset: PtrUInt
2356 );
2357 var
2358   rawBuffer : PByte;
2359 begin
2360   rawBuffer := PByte(ABuffer);
2361   if ( AOffset <> 0 ) then
2362     Inc(rawBuffer,AOffset);
2363   if IsBitON(rawBuffer^,BIT_ORDER_BUFFER) then begin
2364     FreeBuffer(rawBuffer);
2365   end;
2366   inherited unset(ABuffer,AOffset);
2367 end;
2368 
2369 { TSDOChangeSummaryField }
2370 
2371 procedure TSDOChangeSummaryField.FreeBuffer(const ABuffer: TSDOFieldBuffer);
2372 var
2373   rawBuffer : PByte;
2374   objBuffer : PPSDOChangeSummary;
2375 begin
2376   rawBuffer := PByte(ABuffer);
2377   if IsBitON(rawBuffer^,BIT_ORDER_BUFFER) then begin
2378     Inc(rawBuffer);
2379     objBuffer := PPSDOChangeSummary(rawBuffer);
2380     objBuffer^^ := nil;
2381     FreeMem(objBuffer^,SizeOf(PPSDOChangeSummary));
2382     objBuffer^ := nil;
2383     Dec(rawBuffer);
2384     SetBit(rawBuffer^,BIT_ORDER_BUFFER,False);
2385   end;
2386 end;
2387 
TSDOChangeSummaryField.getChangeSummarynull2388 function TSDOChangeSummaryField.getChangeSummary(
2389   const ABuffer: TSDOFieldBuffer;
2390   const AOffset: PtrUInt
2391 ): ISDOChangeSummary;
2392 var
2393   buff : PByte;
2394   objBuffer : PPSDOChangeSummary;
2395 begin
2396   buff := PByte(ABuffer);
2397   if ( AOffset <> 0 ) then
2398     Inc(buff,AOffset);
2399   if IsBitON(buff^,BIT_ORDER_NULL) then begin
2400     Result := nil;
2401   end else begin
2402     if IsBitON(buff^,BIT_ORDER_BUFFER) then begin
2403       Inc(buff);
2404       objBuffer := PPSDOChangeSummary(buff);
2405       Result := objBuffer^^;
2406     end else begin
2407       Result := nil;
2408     end;
2409   end;
2410 end;
2411 
2412 procedure TSDOChangeSummaryField.setChangeSummary(
2413   const ABuffer: TSDOFieldBuffer;
2414   const AOffset: PtrUInt;
2415   const AValue: ISDOChangeSummary
2416 );
2417 var
2418   rawBuffer : PByte;
2419   objBuffer : PPSDOChangeSummary;
2420 begin
2421   rawBuffer := PByte(ABuffer);
2422   if ( AOffset <> 0 ) then
2423     Inc(rawBuffer,AOffset);
2424   if IsBitON(rawBuffer^,BIT_ORDER_BUFFER) then begin
2425     SetBit(rawBuffer^,BIT_ORDER_NULL,False);
2426     Inc(rawBuffer);
2427     objBuffer := PPSDOChangeSummary(rawBuffer);
2428   end else begin;
2429     SetBit(rawBuffer^,BIT_ORDER_SET,True);
2430     SetBit(rawBuffer^,BIT_ORDER_BUFFER,True);
2431     SetBit(rawBuffer^,BIT_ORDER_NULL,False);
2432     Inc(rawBuffer);
2433     objBuffer := PPSDOChangeSummary(rawBuffer);
2434     GetMem(objBuffer^,SizeOf(PSDOChangeSummary));
2435     FillChar(objBuffer^^,SizeOf(ISDOChangeSummary),#0);
2436   end;
2437   objBuffer^^ := AValue;
2438 end;
2439 
2440 procedure TSDOChangeSummaryField.setNull(
2441   const ABuffer: TSDOFieldBuffer;
2442   const AOffset: PtrUInt
2443 );
2444 var
2445   rawBuffer : PByte;
2446 begin
2447   rawBuffer := PByte(ABuffer);
2448   if ( AOffset <> 0 ) then
2449     Inc(rawBuffer,AOffset);
2450   if IsBitON(rawBuffer^,BIT_ORDER_BUFFER) then begin
2451     FreeBuffer(rawBuffer);
2452   end;
2453   inherited setNull(ABuffer,AOffset);
2454 end;
2455 
2456 procedure TSDOChangeSummaryField.unset(
2457   const ABuffer: TSDOFieldBuffer;
2458   const AOffset: PtrUInt
2459 );
2460 var
2461   rawBuffer : PByte;
2462 begin
2463   rawBuffer := PByte(ABuffer);
2464   if ( AOffset <> 0 ) then
2465     Inc(rawBuffer,AOffset);
2466   if IsBitON(rawBuffer^,BIT_ORDER_BUFFER) then begin
2467     FreeBuffer(rawBuffer);
2468   end;
2469   inherited unset(ABuffer,AOffset);
2470 end;
2471 
2472 { TSDOByteField }
2473 
TSDOByteField.getBooleannull2474 function TSDOByteField.getBoolean(
2475   const ABuffer: TSDOFieldBuffer;
2476   const AOffset: PtrUInt
2477 ) : TSDOBoolean;
2478 begin
2479   Result := TSDOConvertHelper.ByteToBool(getByte(ABuffer,AOffset));
2480 end;
2481 
getBytenull2482 function TSDOByteField.getByte(
2483   const ABuffer: TSDOFieldBuffer;
2484   const AOffset: PtrUInt
2485 ): TSDOByte;
2486 var
2487   buff : PByte;
2488 begin
2489   buff := PByte(ABuffer);
2490   if ( AOffset <> 0 ) then
2491     Inc(buff,AOffset);
2492   if IsBitON(buff^,BIT_ORDER_NULL) then begin
2493     Result := 0;
2494   end else begin
2495     Inc(buff);
2496     Result := buff^;
2497   end;
2498 end;
2499 
TSDOByteField.getCharacternull2500 function TSDOByteField.getCharacter(
2501   const ABuffer: TSDOFieldBuffer;
2502   const AOffset: PtrUInt
2503 ) : TSDOChar;
2504 begin
2505   Result := TSDOConvertHelper.ByteToChar(getByte(ABuffer,AOffset));
2506 end;
2507 
TSDOByteField.getIntegernull2508 function TSDOByteField.getInteger(
2509   const ABuffer: TSDOFieldBuffer;
2510   const AOffset: PtrUInt
2511 ) : TSDOInteger;
2512 begin
2513   Result := getByte(ABuffer,AOffset);
2514 end;
2515 
getLongnull2516 function TSDOByteField.getLong(
2517   const ABuffer: TSDOFieldBuffer;
2518   const AOffset: PtrUInt
2519 ) : TSDOLong;
2520 begin
2521   Result := getByte(ABuffer,AOffset);
2522 end;
2523 
TSDOByteField.getShortnull2524 function TSDOByteField.getShort(
2525   const ABuffer: TSDOFieldBuffer;
2526   const AOffset: PtrUInt
2527 ) : TSDOShort;
2528 begin
2529   Result := getByte(ABuffer,AOffset);
2530 end;
2531 
TSDOByteField.getStringnull2532 function TSDOByteField.getString(
2533   const ABuffer: TSDOFieldBuffer;
2534   const AOffset: PtrUInt
2535 ) : TSDOString;
2536 begin
2537   Result := TSDOConvertHelper.ByteToString(getByte(ABuffer,AOffset));
2538 end;
2539 
getVariantnull2540 function TSDOByteField.getVariant(
2541   const ABuffer: TSDOFieldBuffer;
2542   const AOffset: PtrUInt
2543 ) : TSDOVariant;
2544 begin
2545   if isNull(ABuffer,AOffset) then
2546     Result := Null
2547   else
2548     Result := getByte(ABuffer,AOffset);
2549 end;
2550 
2551 procedure TSDOByteField.setBoolean(
2552   const ABuffer: TSDOFieldBuffer;
2553   const AOffset: PtrUInt;
2554   const AValue: TSDOBoolean
2555 );
2556 begin
2557   setByte(ABuffer,AOffset,TSDOConvertHelper.BoolToByte(AValue));
2558 end;
2559 
2560 procedure TSDOByteField.setByte(
2561   const ABuffer: TSDOFieldBuffer;
2562   const AOffset: PtrUInt;
2563   const AValue: TSDOByte
2564 );
2565 var
2566   buff : PByte;
2567 begin
2568   buff := PByte(ABuffer);
2569   if ( AOffset <> 0 ) then
2570     Inc(buff,AOffset);
2571   SetBit(buff^,BIT_ORDER_SET,True);
2572   SetBit(buff^,BIT_ORDER_NULL,False);
2573   Inc(buff);
2574   buff^ := AValue;
2575 end;
2576 
2577 procedure TSDOByteField.setCharacter(
2578   const ABuffer: TSDOFieldBuffer;
2579   const AOffset: PtrUInt;
2580   const AValue: TSDOChar
2581 );
2582 begin
2583   setByte(ABuffer,AOffset,TSDOConvertHelper.CharToByte(AValue));
2584 end;
2585 
2586 procedure TSDOByteField.setInteger(
2587   const ABuffer: TSDOFieldBuffer;
2588   const AOffset: PtrUInt;
2589   const AValue: TSDOInteger
2590 );
2591 begin
2592   setByte(ABuffer,AOffset,AValue);
2593 end;
2594 
2595 procedure TSDOByteField.setLong(
2596   const ABuffer: TSDOFieldBuffer;
2597   const AOffset: PtrUInt;
2598   const AValue: TSDOLong
2599 );
2600 begin
2601   setByte(ABuffer,AOffset,AValue);
2602 end;
2603 
2604 procedure TSDOByteField.setShort(
2605   const ABuffer: TSDOFieldBuffer;
2606   const AOffset: PtrUInt;
2607   const AValue: TSDOShort
2608 );
2609 begin
2610   setByte(ABuffer,AOffset,AValue);
2611 end;
2612 
2613 procedure TSDOByteField.setString(
2614   const ABuffer: TSDOFieldBuffer;
2615   const AOffset: PtrUInt;
2616   const AValue: TSDOString
2617 );
2618 begin
2619   setByte(ABuffer,AOffset,TSDOConvertHelper.StringToByte(AValue));
2620 end;
2621 
2622 procedure TSDOByteField.setVariant(
2623   const ABuffer: TSDOFieldBuffer;
2624   const AOffset: PtrUInt;
2625   const AValue: TSDOVariant
2626 );
2627 begin
2628   if VarIsNull(AValue) then
2629     setNull(ABuffer,AOffset)
2630   else
2631     setByte(ABuffer,AOffset,AValue);
2632 end;
2633 
2634 { TSDODateField }
2635 
getDatenull2636 function TSDODateField.getDate(
2637   const ABuffer : TSDOFieldBuffer;
2638   const AOffset : PtrUInt
2639 ) : TSDODate;
2640 var
2641   buff : PByte;
2642 begin
2643   buff := PByte(ABuffer);
2644   if ( AOffset <> 0 ) then
2645     Inc(buff,AOffset);
2646   if IsBitON(buff^,BIT_ORDER_NULL) then begin
2647     Result := ZERO_DATE;
2648   end else begin
2649     Inc(buff);
2650     Result := PSDODate(buff)^;
2651   end;
2652 end;
2653 
getStringnull2654 function TSDODateField.getString(
2655   const ABuffer : TSDOFieldBuffer;
2656   const AOffset : PtrUInt
2657 ) : TSDOString;
2658 begin
2659   Result := TSDOConvertHelper.DateToString(getDate(ABuffer,AOffset));
2660 end;
2661 
TSDODateField.getVariantnull2662 function TSDODateField.getVariant(
2663   const ABuffer: TSDOFieldBuffer;
2664   const AOffset: PtrUInt
2665 ) : TSDOVariant;
2666 begin
2667   if isNull(ABuffer,AOffset) then
2668     Result := Null
2669   else
2670     Result := NormalizeToUTC(getDate(ABuffer,AOffset));
2671 end;
2672 
2673 procedure TSDODateField.setDate(
2674   const ABuffer : TSDOFieldBuffer;
2675   const AOffset : PtrUInt;
2676   const AValue : TSDODate
2677 );
2678 var
2679   buff : PByte;
2680 begin
2681   buff := PByte(ABuffer);
2682   if ( AOffset <> 0 ) then
2683     Inc(buff,AOffset);
2684   SetBit(buff^,BIT_ORDER_SET,True);
2685   SetBit(buff^,BIT_ORDER_NULL,False);
2686   Inc(buff);
2687   PSDODate(buff)^ := AValue;
2688 end;
2689 
2690 procedure TSDODateField.setString(
2691   const ABuffer : TSDOFieldBuffer;
2692   const AOffset : PtrUInt;
2693   const AValue : TSDOString
2694 );
2695 begin
2696   setDate(ABuffer,AOffset,TSDOConvertHelper.StringToDate(AValue));
2697 end;
2698 
2699 {$IFDEF HAS_SDO_CHAR}
2700 procedure TSDODateField.setVariant(
2701   const ABuffer: TSDOFieldBuffer;
2702   const AOffset: PtrUInt;
2703   const AValue: TSDOVariant
2704 );
2705 begin
2706   if VarIsNull(AValue) then
2707     setNull(ABuffer,AOffset)
2708   else
2709     setDate(ABuffer,AOffset,DateTimeToDateTimeRec(VarToDateTime(AValue)));
2710 end;
2711 
2712 { TSDOCharField }
2713 
getBooleannull2714 function TSDOCharField.getBoolean(
2715   const ABuffer: TSDOFieldBuffer;
2716   const AOffset: PtrUInt
2717 ) : TSDOBoolean;
2718 begin
2719   Result := TSDOConvertHelper.CharToBool(getCharacter(ABuffer,AOffset));
2720 end;
2721 
getBytenull2722 function TSDOCharField.getByte(
2723   const ABuffer: TSDOFieldBuffer;
2724   const AOffset: PtrUInt
2725 ) : TSDOByte;
2726 begin
2727   Result := TSDOConvertHelper.CharToByte(getCharacter(ABuffer,AOffset));
2728 end;
2729 
getCharacternull2730 function TSDOCharField.getCharacter(
2731   const ABuffer: TSDOFieldBuffer;
2732   const AOffset: PtrUInt
2733 ) : TSDOChar;
2734 var
2735   buff : PByte;
2736 begin
2737   buff := PByte(ABuffer);
2738   if ( AOffset <> 0 ) then
2739     Inc(buff,AOffset);
2740   if IsBitON(buff^,BIT_ORDER_NULL) then begin
2741     Result := #0;
2742   end else begin
2743     Inc(buff);
2744     Result := PSDOChar(buff)^;
2745   end;
2746 end;
2747 
getIntegernull2748 function TSDOCharField.getInteger(
2749   const ABuffer: TSDOFieldBuffer;
2750   const AOffset: PtrUInt
2751 ) : TSDOInteger;
2752 begin
2753   Result := TSDOConvertHelper.CharToInteger(getCharacter(ABuffer,AOffset));
2754 end;
2755 
getLongnull2756 function TSDOCharField.getLong(
2757   const ABuffer: TSDOFieldBuffer;
2758   const AOffset: PtrUInt
2759 ) : TSDOLong;
2760 begin
2761   Result := TSDOConvertHelper.CharToLong(getCharacter(ABuffer,AOffset));
2762 end;
2763 
TSDOCharField.getShortnull2764 function TSDOCharField.getShort(
2765   const ABuffer: TSDOFieldBuffer;
2766   const AOffset: PtrUInt
2767 ) : TSDOShort;
2768 begin
2769   Result := TSDOConvertHelper.CharToShort(getCharacter(ABuffer,AOffset));
2770 end;
2771 
TSDOCharField.getStringnull2772 function TSDOCharField.getString(
2773   const ABuffer: TSDOFieldBuffer;
2774   const AOffset: PtrUInt
2775 ) : TSDOString;
2776 begin
2777   Result := getCharacter(ABuffer,AOffset);
2778 end;
2779 
getVariantnull2780 function TSDOCharField.getVariant(
2781   const ABuffer: TSDOFieldBuffer;
2782   const AOffset: PtrUInt
2783 ) : TSDOVariant;
2784 begin
2785   if isNull(ABuffer,AOffset) then
2786     Result := Null
2787   else
2788     Result := getCharacter(ABuffer,AOffset);
2789 end;
2790 
2791 procedure TSDOCharField.setBoolean(
2792   const ABuffer: TSDOFieldBuffer;
2793   const AOffset: PtrUInt;
2794   const AValue: TSDOBoolean
2795 );
2796 begin
2797   setCharacter(ABuffer,AOffset,TSDOConvertHelper.BoolToChar(AValue));
2798 end;
2799 
2800 procedure TSDOCharField.setByte(
2801   const ABuffer: TSDOFieldBuffer;
2802   const AOffset: PtrUInt;
2803   const AValue: TSDOByte
2804 );
2805 begin
2806   setCharacter(ABuffer,AOffset,TSDOConvertHelper.ByteToChar(AValue));
2807 end;
2808 
2809 procedure TSDOCharField.setCharacter(
2810   const ABuffer: TSDOFieldBuffer;
2811   const AOffset: PtrUInt;
2812   const AValue: TSDOChar
2813 );
2814 var
2815   buff : PByte;
2816 begin
2817   buff := PByte(ABuffer);
2818   if ( AOffset <> 0 ) then
2819     Inc(buff,AOffset);
2820   SetBit(buff^,BIT_ORDER_SET,True);
2821   SetBit(buff^,BIT_ORDER_NULL,False);
2822   Inc(buff);
2823   PSDOChar(buff)^ := AValue;
2824 end;
2825 
2826 procedure TSDOCharField.setInteger(
2827   const ABuffer: TSDOFieldBuffer;
2828   const AOffset: PtrUInt;
2829   const AValue: TSDOInteger
2830 );
2831 begin
2832   setCharacter(ABuffer,AOffset,TSDOConvertHelper.IntegerToChar(AValue));
2833 end;
2834 
2835 procedure TSDOCharField.setLong(
2836   const ABuffer: TSDOFieldBuffer;
2837   const AOffset: PtrUInt;
2838   const AValue: TSDOLong
2839 );
2840 begin
2841   setCharacter(ABuffer,AOffset,TSDOConvertHelper.LongToChar(AValue));
2842 end;
2843 
2844 procedure TSDOCharField.setShort(
2845   const ABuffer: TSDOFieldBuffer;
2846   const AOffset: PtrUInt;
2847   const AValue: TSDOShort);
2848 begin
2849   setCharacter(ABuffer,AOffset,TSDOConvertHelper.ShortToChar(AValue));
2850 end;
2851 
2852 procedure TSDOCharField.setString(
2853   const ABuffer: TSDOFieldBuffer;
2854   const AOffset: PtrUInt;
2855   const AValue: TSDOString
2856 );
2857 begin
2858   setCharacter(ABuffer,AOffset,TSDOConvertHelper.StringToChar(AValue));
2859 end;
2860 {$ENDIF HAS_SDO_CHAR}
2861 
2862 
2863 {$IFDEF HAS_SDO_CURRENCY}
TSDOCurrencyField.getStringnull2864 function TSDOCurrencyField.getString(
2865   const ABuffer : TSDOFieldBuffer;
2866   const AOffset : PtrUInt
2867 ) : TSDOString;
2868 begin
2869   Result := TSDOConvertHelper.CurrencyToString(getCurrency(ABuffer,AOffset));
2870 end;
2871 
2872 procedure TSDOCurrencyField.setString(
2873   const ABuffer : TSDOFieldBuffer;
2874   const AOffset : PtrUInt;
2875   const AValue : TSDOString
2876 );
2877 begin
2878   setCurrency(ABuffer,AOffset,TSDOConvertHelper.StringToCurrency(AValue));
2879 end;
2880 
getCurrencynull2881 function TSDOCurrencyField.getCurrency(
2882   const ABuffer : TSDOFieldBuffer;
2883   const AOffset : PtrUInt
2884 ) : TSDOCurrency;
2885 var
2886   buff : PByte;
2887 begin
2888   buff := PByte(ABuffer);
2889   if ( AOffset <> 0 ) then
2890     Inc(buff,AOffset);
2891   if IsBitON(buff^,BIT_ORDER_NULL) then begin
2892     Result := 0;
2893   end else begin
2894     Inc(buff);
2895     Result := PSDOCurrency(buff)^;
2896   end;
2897 end;
2898 
2899 procedure TSDOCurrencyField.setCurrency(
2900   const ABuffer : TSDOFieldBuffer;
2901   const AOffset : PtrUInt;
2902   const AValue : TSDOCurrency
2903 );
2904 var
2905   buff : PByte;
2906 begin
2907   buff := PByte(ABuffer);
2908   if ( AOffset <> 0 ) then
2909     Inc(buff,AOffset);
2910   SetBit(buff^,BIT_ORDER_SET,True);
2911   SetBit(buff^,BIT_ORDER_NULL,False);
2912   Inc(buff);
2913   PSDOCurrency(buff)^ := AValue;
2914 end;
2915 
getDoublenull2916 function TSDOCurrencyField.getDouble(
2917   const ABuffer : TSDOFieldBuffer;
2918   const AOffset : PtrUInt
2919 ) : TSDODouble;
2920 begin
2921   Result := getCurrency(ABuffer,AOffset);
2922 end;
2923 
2924 procedure TSDOCurrencyField.setDouble(
2925   const ABuffer : TSDOFieldBuffer;
2926   const AOffset : PtrUInt;
2927   const AValue : TSDODouble
2928 );
2929 begin
2930   setCurrency(ABuffer,AOffset,AValue);
2931 end;
2932 
TSDOCurrencyField.getFloatnull2933 function TSDOCurrencyField.getFloat(
2934   const ABuffer : TSDOFieldBuffer;
2935   const AOffset : PtrUInt
2936 ) : TSDOFloat;
2937 begin
2938   Result := getCurrency(ABuffer,AOffset);
2939 end;
2940 
2941 procedure TSDOCurrencyField.setFloat(
2942   const ABuffer : TSDOFieldBuffer;
2943   const AOffset : PtrUInt;
2944   const AValue : TSDOFloat
2945 );
2946 begin
2947   setCurrency(ABuffer,AOffset,AValue);
2948 end;
2949 {$ENDIF HAS_SDO_CURRENCY}
2950 
2951 
2952 {$IFDEF HAS_SDO_LONG}
2953 procedure TSDOCharField.setVariant(
2954   const ABuffer: TSDOFieldBuffer;
2955   const AOffset: PtrUInt;
2956   const AValue: TSDOVariant
2957 );
2958 begin
2959   if VarIsNull(AValue) then begin
2960     setNull(ABuffer,AOffset)
2961   end else begin
2962     setCharacter(ABuffer,AOffset,AValue);
2963   end;
2964 end;
2965 
2966 { TSDOLongField }
2967 
getBooleannull2968 function TSDOLongField.getBoolean(
2969   const ABuffer: TSDOFieldBuffer;
2970   const AOffset: PtrUInt
2971 ) : TSDOBoolean;
2972 begin
2973   Result := TSDOConvertHelper.LongToBool(getLong(ABuffer,AOffset));
2974 end;
2975 
TSDOLongField.getBytenull2976 function TSDOLongField.getByte(
2977   const ABuffer: TSDOFieldBuffer;
2978   const AOffset: PtrUInt
2979 ) : TSDOByte;
2980 begin
2981   Result := getLong(ABuffer,AOffset);
2982 end;
2983 
getCharacternull2984 function TSDOLongField.getCharacter(
2985   const ABuffer: TSDOFieldBuffer;
2986   const AOffset: PtrUInt
2987 ) : TSDOChar;
2988 begin
2989   Result := TSDOConvertHelper.LongToChar(getLong(ABuffer,AOffset));
2990 end;
2991 
getIntegernull2992 function TSDOLongField.getInteger(
2993   const ABuffer: TSDOFieldBuffer;
2994   const AOffset: PtrUInt
2995 ) : TSDOInteger;
2996 begin
2997   Result := getLong(ABuffer,AOffset);
2998 end;
2999 
getLongnull3000 function TSDOLongField.getLong(
3001   const ABuffer: TSDOFieldBuffer;
3002   const AOffset: PtrUInt
3003 ) : TSDOLong;
3004 var
3005   buff : PByte;
3006 begin
3007   buff := PByte(ABuffer);
3008   if ( AOffset <> 0 ) then
3009     Inc(buff,AOffset);
3010   if IsBitON(buff^,BIT_ORDER_NULL) then begin
3011     Result := 0;
3012   end else begin
3013     Inc(buff);
3014     Result := PSDOLong(buff)^;
3015   end;
3016 end;
3017 
getShortnull3018 function TSDOLongField.getShort(
3019   const ABuffer: TSDOFieldBuffer;
3020   const AOffset: PtrUInt
3021 ) : TSDOShort;
3022 begin
3023   Result := getLong(ABuffer,AOffset);
3024 end;
3025 
getStringnull3026 function TSDOLongField.getString(
3027   const ABuffer: TSDOFieldBuffer;
3028   const AOffset: PtrUInt
3029 ) : TSDOString;
3030 begin
3031   Result := TSDOConvertHelper.LongToString(getLong(ABuffer,AOffset));
3032 end;
3033 
getVariantnull3034 function TSDOLongField.getVariant(
3035   const ABuffer: TSDOFieldBuffer;
3036   const AOffset: PtrUInt
3037 ) : TSDOVariant;
3038 begin
3039   if isNull(ABuffer,AOffset) then
3040     Result := Null
3041   else
3042     Result := getLong(ABuffer,AOffset);
3043 end;
3044 
3045 procedure TSDOLongField.setBoolean(
3046   const ABuffer: TSDOFieldBuffer;
3047   const AOffset: PtrUInt;
3048   const AValue: TSDOBoolean
3049 );
3050 begin
3051   setLong(ABuffer,AOffset,TSDOConvertHelper.BoolToLong(AValue));
3052 end;
3053 
3054 procedure TSDOLongField.setByte(
3055   const ABuffer: TSDOFieldBuffer;
3056   const AOffset: PtrUInt;
3057   const AValue: TSDOByte
3058 );
3059 begin
3060   setLong(ABuffer,AOffset,AValue);
3061 end;
3062 
3063 procedure TSDOLongField.setCharacter(
3064   const ABuffer: TSDOFieldBuffer;
3065   const AOffset: PtrUInt;
3066   const AValue: TSDOChar
3067 );
3068 begin
3069   setLong(ABuffer,AOffset,TSDOConvertHelper.CharToLong(AValue));
3070 end;
3071 
3072 procedure TSDOLongField.setInteger(
3073   const ABuffer: TSDOFieldBuffer;
3074   const AOffset: PtrUInt;
3075   const AValue: TSDOInteger
3076 );
3077 begin
3078   setLong(ABuffer,AOffset,AValue);
3079 end;
3080 
3081 procedure TSDOLongField.setLong(
3082   const ABuffer: TSDOFieldBuffer;
3083   const AOffset: PtrUInt;
3084   const AValue: TSDOLong
3085 );
3086 var
3087   buff : PByte;
3088 begin
3089   buff := PByte(ABuffer);
3090   if ( AOffset <> 0 ) then
3091     Inc(buff,AOffset);
3092   SetBit(buff^,BIT_ORDER_SET,True);
3093   SetBit(buff^,BIT_ORDER_NULL,False);
3094   Inc(buff);
3095   PSDOLong(buff)^ := AValue;
3096 end;
3097 
3098 procedure TSDOLongField.setShort(
3099   const ABuffer: TSDOFieldBuffer;
3100   const AOffset: PtrUInt;
3101   const AValue: TSDOShort);
3102 begin
3103   setLong(ABuffer,AOffset,AValue);
3104 end;
3105 
3106 procedure TSDOLongField.setString(
3107   const ABuffer: TSDOFieldBuffer;
3108   const AOffset: PtrUInt;
3109   const AValue: TSDOString
3110 );
3111 begin
3112   setLong(ABuffer,AOffset,TSDOConvertHelper.StringToLong(AValue));
3113 end;
3114 {$ENDIF HAS_SDO_LONG}
3115 
3116 {$IFDEF HAS_SDO_SHORT}
3117 procedure TSDOLongField.setVariant(
3118   const ABuffer: TSDOFieldBuffer;
3119   const AOffset: PtrUInt;
3120   const AValue: TSDOVariant
3121 );
3122 begin
3123   if VarIsNull(AValue) then
3124     setNull(ABuffer,AOffset)
3125   else
3126     setLong(ABuffer,AOffset,AValue);
3127 end;
3128 
3129 { TSDOShortField }
3130 
TSDOShortField.getBooleannull3131 function TSDOShortField.getBoolean(
3132   const ABuffer: TSDOFieldBuffer;
3133   const AOffset: PtrUInt
3134 ) : TSDOBoolean;
3135 begin
3136   Result := TSDOConvertHelper.ShortToBool(getShort(ABuffer,AOffset));
3137 end;
3138 
getBytenull3139 function TSDOShortField.getByte(
3140   const ABuffer: TSDOFieldBuffer;
3141   const AOffset: PtrUInt
3142 ) : TSDOByte;
3143 begin
3144   Result := getShort(ABuffer,AOffset);
3145 end;
3146 
getCharacternull3147 function TSDOShortField.getCharacter(
3148   const ABuffer: TSDOFieldBuffer;
3149   const AOffset: PtrUInt
3150 ) : TSDOChar;
3151 begin
3152   Result := TSDOConvertHelper.ShortToChar(getShort(ABuffer,AOffset));
3153 end;
3154 
TSDOShortField.getIntegernull3155 function TSDOShortField.getInteger(
3156   const ABuffer: TSDOFieldBuffer;
3157   const AOffset: PtrUInt
3158 ) : TSDOInteger;
3159 begin
3160   Result := getShort(ABuffer,AOffset);
3161 end;
3162 
getLongnull3163 function TSDOShortField.getLong(
3164   const ABuffer: TSDOFieldBuffer;
3165   const AOffset: PtrUInt
3166 ) : TSDOLong;
3167 begin
3168  Result := getShort(ABuffer,AOffset);
3169 end;
3170 
getShortnull3171 function TSDOShortField.getShort(
3172   const ABuffer: TSDOFieldBuffer;
3173   const AOffset: PtrUInt
3174 ) : TSDOShort;
3175 var
3176   buff : PByte;
3177 begin
3178   buff := PByte(ABuffer);
3179   if ( AOffset <> 0 ) then
3180     Inc(buff,AOffset);
3181   if IsBitON(buff^,BIT_ORDER_NULL) then begin
3182     Result := 0;
3183   end else begin
3184     Inc(buff);
3185     Result := PSDOShort(buff)^;
3186   end;
3187 end;
3188 
getStringnull3189 function TSDOShortField.getString(
3190   const ABuffer: TSDOFieldBuffer;
3191   const AOffset: PtrUInt
3192 ) : TSDOString;
3193 begin
3194   Result := TSDOConvertHelper.ShortToString(getShort(ABuffer,AOffset));
3195 end;
3196 
TSDOShortField.getVariantnull3197 function TSDOShortField.getVariant(
3198   const ABuffer: TSDOFieldBuffer;
3199   const AOffset: PtrUInt
3200 ) : TSDOVariant;
3201 begin
3202   if isNull(ABuffer,AOffset) then
3203     Result := Null
3204   else
3205     Result := getShort(ABuffer,AOffset);
3206 end;
3207 
3208 procedure TSDOShortField.setBoolean(
3209   const ABuffer: TSDOFieldBuffer;
3210   const AOffset: PtrUInt;
3211   const AValue: TSDOBoolean
3212 );
3213 begin
3214   setShort(ABuffer,AOffset,TSDOConvertHelper.BooltoShort(AValue));
3215 end;
3216 
3217 procedure TSDOShortField.setByte(
3218   const ABuffer: TSDOFieldBuffer;
3219   const AOffset: PtrUInt;
3220   const AValue: TSDOByte
3221 );
3222 begin
3223   setShort(ABuffer,AOffset,AValue);
3224 end;
3225 
3226 procedure TSDOShortField.setCharacter(
3227   const ABuffer: TSDOFieldBuffer;
3228   const AOffset: PtrUInt;
3229   const AValue: TSDOChar
3230 );
3231 begin
3232   setShort(ABuffer,AOffset,TSDOConvertHelper.ChartoShort(AValue));
3233 end;
3234 
3235 procedure TSDOShortField.setInteger(
3236   const ABuffer: TSDOFieldBuffer;
3237   const AOffset: PtrUInt;
3238   const AValue: TSDOInteger
3239 );
3240 begin
3241   setShort(ABuffer,AOffset,AValue);
3242 end;
3243 
3244 procedure TSDOShortField.setLong(
3245   const ABuffer: TSDOFieldBuffer;
3246   const AOffset: PtrUInt;
3247   const AValue: TSDOLong
3248 );
3249 begin
3250   setShort(ABuffer,AOffset,AValue);
3251 end;
3252 
3253 procedure TSDOShortField.setShort(
3254   const ABuffer: TSDOFieldBuffer;
3255   const AOffset: PtrUInt;
3256   const AValue: TSDOShort
3257 );
3258 var
3259   buff : PByte;
3260 begin
3261   buff := PByte(ABuffer);
3262   if ( AOffset <> 0 ) then
3263     Inc(buff,AOffset);
3264   SetBit(buff^,BIT_ORDER_SET,True);
3265   SetBit(buff^,BIT_ORDER_NULL,False);
3266   Inc(buff);
3267   PSDOShort(buff)^ := AValue;
3268 end;
3269 
3270 procedure TSDOShortField.setString(
3271   const ABuffer: TSDOFieldBuffer;
3272   const AOffset: PtrUInt;
3273   const AValue: TSDOString
3274 );
3275 begin
3276   setShort(ABuffer,AOffset,TSDOConvertHelper.StringtoShort(AValue));
3277 end;
3278 {$ENDIF HAS_SDO_SHORT}
3279 
3280 
3281 {$IFDEF HAS_SDO_BYTES}
3282 procedure TSDOShortField.setVariant(
3283   const ABuffer: TSDOFieldBuffer;
3284   const AOffset: PtrUInt;
3285   const AValue: TSDOVariant
3286 );
3287 begin
3288   if VarIsNull(AValue) then
3289     setNull(ABuffer,AOffset)
3290   else
3291     setShort(ABuffer,AOffset,AValue);
3292 end;
3293 
3294 { TSDOBytesField }
3295 
3296 procedure TSDOBytesField.FreeBuffer(const ABuffer: TSDOFieldBuffer);
3297 var
3298   rawBuffer : PByte;
3299   valBuffer : PPSDOBytes;
3300 begin
3301   rawBuffer := PByte(ABuffer);
3302   if IsBitON(rawBuffer^,BIT_ORDER_BUFFER) then begin
3303     Inc(rawBuffer);
3304     valBuffer := PPSDOBytes(rawBuffer);
3305     SetLength(valBuffer^^,0);
3306     FreeMem(valBuffer^,SizeOf(PPSDOBytes));
3307     valBuffer^ := nil;
3308     Dec(rawBuffer);
3309     SetBit(rawBuffer^,BIT_ORDER_BUFFER,False);
3310   end;
3311 end;
3312 
TSDOBytesField.getBytesnull3313 function TSDOBytesField.getBytes(
3314   const ABuffer: TSDOFieldBuffer;
3315   const AOffset: PtrUInt
3316 ) : TSDOBytes;
3317 var
3318   buff : PByte;
3319 begin
3320   buff := PByte(ABuffer);
3321   if ( AOffset <> 0 ) then
3322     Inc(buff,AOffset);
3323   if IsBitON(buff^,BIT_ORDER_NULL) then begin
3324     Result := nil;
3325   end else begin
3326     if IsBitON(buff^,BIT_ORDER_BUFFER) then begin
3327       Inc(buff);
3328       Result := Copy(PPSDOBytes(buff)^^);
3329     end else begin
3330       Result := nil;
3331     end;
3332   end;
3333 end;
3334 
TSDOBytesField.getStringnull3335 function TSDOBytesField.getString(
3336   const ABuffer: TSDOFieldBuffer;
3337   const AOffset: PtrUInt
3338 ) : TSDOString;
3339 begin
3340   Result := TSDOConvertHelper.BytesToString(getBytes(ABuffer,AOffset));
3341 end;
3342 
getVariantnull3343 function TSDOBytesField.getVariant(
3344   const ABuffer: TSDOFieldBuffer;
3345   const AOffset: PtrUInt
3346 ) : TSDOVariant;
3347 begin
3348   if isNull(ABuffer,AOffset) then
3349     Result := Null
3350   else
3351     Result := getBytes(ABuffer,AOffset);
3352 end;
3353 
3354 procedure TSDOBytesField.setBytes(
3355   const ABuffer: TSDOFieldBuffer;
3356   const AOffset: PtrUInt;
3357         AValue: TSDOBytes
3358 );
3359 var
3360   rawBuffer : PByte;
3361   valBuffer : PPSDOBytes;
3362 begin
3363   rawBuffer := PByte(ABuffer);
3364   if ( AOffset <> 0 ) then
3365     Inc(rawBuffer,AOffset);
3366   SetBit(rawBuffer^,BIT_ORDER_SET,True);
3367   if IsBitON(rawBuffer^,BIT_ORDER_BUFFER) then begin
3368     SetBit(rawBuffer^,BIT_ORDER_NULL,False);
3369     Inc(rawBuffer);
3370     valBuffer := PPSDOBytes(rawBuffer);
3371   end else begin;
3372     SetBit(rawBuffer^,BIT_ORDER_NULL,False);
3373     SetBit(rawBuffer^,BIT_ORDER_BUFFER,True);
3374     Inc(rawBuffer);
3375     valBuffer := PPSDOBytes(rawBuffer);
3376     GetMem(valBuffer^,SizeOf(PPSDOBytes));
3377     FillChar(valBuffer^^,SizeOf(TSDOBytes),#0);
3378   end;
3379   valBuffer^^ := Copy(AValue);
3380 end;
3381 
3382 procedure TSDOBytesField.setNull(const ABuffer: TSDOFieldBuffer; const AOffset: PtrUInt);
3383 var
3384   rawBuffer : PByte;
3385 begin
3386   rawBuffer := PByte(ABuffer);
3387   if ( AOffset <> 0 ) then
3388     Inc(rawBuffer,AOffset);
3389   if IsBitON(rawBuffer^,BIT_ORDER_BUFFER) then begin
3390     FreeBuffer(rawBuffer);
3391   end;
3392   inherited setNull(ABuffer,AOffset);
3393 end;
3394 
3395 procedure TSDOBytesField.setString(
3396   const ABuffer: TSDOFieldBuffer;
3397   const AOffset: PtrUInt;
3398   const AValue: TSDOString
3399 );
3400 begin
3401   setBytes(ABuffer,AOffset,TSDOConvertHelper.StringToBytes(AValue));
3402 end;
3403 {$ENDIF HAS_SDO_BYTES}
3404 
3405 {$IFDEF HAS_SDO_DOUBLE}
getStringnull3406 function TSDODoubleField.getString(
3407   const ABuffer : TSDOFieldBuffer;
3408   const AOffset : PtrUInt
3409 ) : TSDOString;
3410 begin
3411   Result := TSDOConvertHelper.FloatToString(getDouble(ABuffer,AOffset));
3412 end;
3413 
3414 procedure TSDODoubleField.setString(
3415   const ABuffer : TSDOFieldBuffer;
3416   const AOffset : PtrUInt;
3417   const AValue : TSDOString
3418 );
3419 begin
3420   setDouble(ABuffer,AOffset,TSDOConvertHelper.StringToFloat(AValue));
3421 end;
3422 
getDoublenull3423 function TSDODoubleField.getDouble(
3424   const ABuffer : TSDOFieldBuffer;
3425   const AOffset : PtrUInt
3426 ) : TSDODouble;
3427 var
3428   buff : PByte;
3429 begin
3430   buff := PByte(ABuffer);
3431   if ( AOffset <> 0 ) then
3432     Inc(buff,AOffset);
3433   if IsBitON(buff^,BIT_ORDER_NULL) then begin
3434     Result := 0;
3435   end else begin
3436     Inc(buff);
3437     Result := PSDODouble(buff)^;
3438   end;
3439 end;
3440 
3441 procedure TSDODoubleField.setDouble(
3442   const ABuffer : TSDOFieldBuffer;
3443   const AOffset : PtrUInt;
3444   const AValue : TSDODouble
3445 );
3446 var
3447   buff : PByte;
3448 begin
3449   buff := PByte(ABuffer);
3450   if ( AOffset <> 0 ) then
3451     Inc(buff,AOffset);
3452   SetBit(buff^,BIT_ORDER_SET,True);
3453   SetBit(buff^,BIT_ORDER_NULL,False);
3454   Inc(buff);
3455   PSDODouble(buff)^ := AValue;
3456 end;
3457 
getCurrencynull3458 function TSDODoubleField.getCurrency(
3459   const ABuffer : TSDOFieldBuffer;
3460   const AOffset : PtrUInt
3461 ) : TSDOCurrency;
3462 begin
3463   Result := getDouble(ABuffer,AOffset);
3464 end;
3465 
3466 procedure TSDODoubleField.setCurrency(
3467   const ABuffer : TSDOFieldBuffer;
3468   const AOffset : PtrUInt;
3469   const AValue : TSDOCurrency
3470 );
3471 begin
3472   setDouble(ABuffer,AOffset,AValue);
3473 end;
3474 
getFloatnull3475 function TSDODoubleField.getFloat(
3476   const ABuffer : TSDOFieldBuffer;
3477   const AOffset : PtrUInt
3478 ) : TSDOFloat;
3479 begin
3480   Result := getDouble(ABuffer,AOffset);
3481 end;
3482 
3483 procedure TSDODoubleField.setFloat(
3484   const ABuffer : TSDOFieldBuffer;
3485   const AOffset : PtrUInt;
3486   const AValue : TSDOFloat
3487 );
3488 begin
3489   setDouble(ABuffer,AOffset,AValue);
3490 end;
3491 {$ENDIF HAS_SDO_DOUBLE}
3492 
3493 {$IFDEF HAS_SDO_FLOAT}
TSDOFloatField.getStringnull3494 function TSDOFloatField.getString(
3495   const ABuffer : TSDOFieldBuffer;
3496   const AOffset : PtrUInt
3497 ) : TSDOString;
3498 begin
3499   Result := TSDOConvertHelper.FloatToString(getFloat(ABuffer,AOffset));
3500 end;
3501 
3502 procedure TSDOFloatField.setString(
3503   const ABuffer : TSDOFieldBuffer;
3504   const AOffset : PtrUInt;
3505   const AValue : TSDOString
3506 );
3507 begin
3508   setFloat(ABuffer,AOffset,TSDOConvertHelper.StringToFloat(AValue));
3509 end;
3510 
TSDOFloatField.getFloatnull3511 function TSDOFloatField.getFloat(
3512   const ABuffer : TSDOFieldBuffer;
3513   const AOffset : PtrUInt
3514 ) : TSDOFloat;
3515 var
3516   buff : PByte;
3517 begin
3518   buff := PByte(ABuffer);
3519   if ( AOffset <> 0 ) then
3520     Inc(buff,AOffset);
3521   if IsBitON(buff^,BIT_ORDER_NULL) then begin
3522     Result := 0;
3523   end else begin
3524     Inc(buff);
3525     Result := PSDOFloat(buff)^;
3526   end;
3527 end;
3528 
3529 procedure TSDOFloatField.setFloat(
3530   const ABuffer : TSDOFieldBuffer;
3531   const AOffset : PtrUInt;
3532   const AValue : TSDOFloat
3533 );
3534 var
3535   buff : PByte;
3536 begin
3537   buff := PByte(ABuffer);
3538   if ( AOffset <> 0 ) then
3539     Inc(buff,AOffset);
3540   SetBit(buff^,BIT_ORDER_SET,True);
3541   SetBit(buff^,BIT_ORDER_NULL,False);
3542   Inc(buff);
3543   PSDOFloat(buff)^ := AValue;
3544 end;
3545 
getCurrencynull3546 function TSDOFloatField.getCurrency(
3547   const ABuffer : TSDOFieldBuffer;
3548   const AOffset : PtrUInt
3549 ) : TSDOCurrency;
3550 begin
3551   Result := getFloat(ABuffer,AOffset);
3552 end;
3553 
3554 procedure TSDOFloatField.setCurrency(
3555   const ABuffer : TSDOFieldBuffer;
3556   const AOffset : PtrUInt;
3557   const AValue : TSDOCurrency
3558 );
3559 begin
3560   setFloat(ABuffer,AOffset,AValue);
3561 end;
3562 
getDoublenull3563 function TSDOFloatField.getDouble(
3564   const ABuffer : TSDOFieldBuffer;
3565   const AOffset : PtrUInt
3566 ) : TSDODouble;
3567 begin
3568   Result := getFloat(ABuffer,AOffset);
3569 end;
3570 
3571 procedure TSDOFloatField.setDouble(
3572   const ABuffer : TSDOFieldBuffer;
3573   const AOffset : PtrUInt;
3574   const AValue : TSDODouble
3575 );
3576 begin
3577   setFloat(ABuffer,AOffset,AValue);
3578 end;
3579 {$ENDIF HAS_SDO_FLOAT}
3580 
3581 {$WARNINGS OFF}
getVariantnull3582 function TSDOBaseField.getVariant(
3583   const ABuffer: TSDOFieldBuffer;
3584   const AOffset: PtrUInt
3585 ) : TSDOVariant;
3586 begin
3587   raise ESDOInvalidConversionException.Create(ClassName);
3588 end;
3589 
3590 procedure TSDOBaseField.setVariant(
3591   const ABuffer: TSDOFieldBuffer;
3592   const AOffset: PtrUInt;
3593   const AValue: TSDOVariant
3594 );
3595 begin
3596   raise ESDOInvalidConversionException.Create(ClassName);
3597 end;
3598 {$WARNINGS ON}
3599 
3600 procedure TSDOBytesField.setVariant(
3601   const ABuffer: TSDOFieldBuffer;
3602   const AOffset: PtrUInt;
3603   const AValue: TSDOVariant
3604 );
3605 var
3606   tempValue : TSDOBytes;
3607   i, c : Integer;
3608 begin
3609   if VarIsNull(AValue) or VarIsEmpty(AValue) then begin
3610     setNull(ABuffer,AOffset)
3611   end else begin
3612     if not VarIsArray(AValue) then
3613       raise ESDOInvalidConversionException.Create(ClassName);
3614     c := VarArrayHighBound(AValue,1) - VarArrayLowBound(AValue,1) + 1;
3615     if (c > 0) then begin
3616       SetLength(tempValue,c);
3617       for i := VarArrayLowBound(AValue,1) to VarArrayHighBound(AValue,1) do
3618         tempValue[i] := AValue[i];
3619     end else begin
3620       tempValue := nil;
3621     end;
3622     setBytes(ABuffer,AOffset,tempValue);
3623   end;
3624 end;
3625 
getVariantnull3626 function TSDOCurrencyField.getVariant(
3627   const ABuffer: TSDOFieldBuffer;
3628   const AOffset: PtrUInt
3629 ) : TSDOVariant;
3630 begin
3631   if isNull(ABuffer,AOffset) then
3632     Result := Null
3633   else
3634     Result := getCurrency(ABuffer,AOffset);
3635 end;
3636 
3637 procedure TSDOCurrencyField.setVariant(
3638   const ABuffer: TSDOFieldBuffer;
3639   const AOffset: PtrUInt;
3640   const AValue: TSDOVariant
3641 );
3642 begin
3643   if VarIsNull(AValue) then
3644     setNull(ABuffer,AOffset)
3645   else
3646     setCurrency(ABuffer,AOffset,AValue);
3647 end;
3648 
getVariantnull3649 function TSDODoubleField.getVariant(
3650   const ABuffer: TSDOFieldBuffer;
3651   const AOffset: PtrUInt
3652 ) : TSDOVariant;
3653 begin
3654   if isNull(ABuffer,AOffset) then
3655     Result := Null
3656   else
3657     Result := getDouble(ABuffer,AOffset);
3658 end;
3659 
3660 procedure TSDODoubleField.setVariant(
3661   const ABuffer: TSDOFieldBuffer;
3662   const AOffset: PtrUInt;
3663   const AValue: TSDOVariant
3664 );
3665 begin
3666  if VarIsNull(AValue) then
3667     setNull(ABuffer,AOffset)
3668   else
3669     setDouble(ABuffer,AOffset,AValue);
3670 end;
3671 
TSDOFloatField.getVariantnull3672 function TSDOFloatField.getVariant(
3673   const ABuffer: TSDOFieldBuffer;
3674   const AOffset: PtrUInt
3675 ) : TSDOVariant;
3676 begin
3677   if isNull(ABuffer,AOffset) then
3678     Result := Null
3679   else
3680     Result := getFloat(ABuffer,AOffset);
3681 end;
3682 
3683 procedure TSDOFloatField.setVariant(
3684   const ABuffer: TSDOFieldBuffer;
3685   const AOffset: PtrUInt;
3686   const AValue: TSDOVariant
3687 );
3688 begin
3689   if VarIsNull(AValue) then
3690     setNull(ABuffer,AOffset)
3691   else
3692     setFloat(ABuffer,AOffset,AValue);
3693 end;
3694 
3695 initialization
3696   PrepareMap();
3697 
3698 finalization
3699   UnprepareMap();
3700 
3701 end.
3702 
3703