Почему бы не сделать следующее:
const len=<Длина то известна заранее>;
type
TOccurence = packed record
case boolean of
True: (
dummy:byte; // для AllInString[0]
VarOcurCount:TVarOcur;
StartDate:TDate;
FinishDate:TDate;
OcurCount:smallint;
OcurVariant:TOcur;
ocDay: TOccurenceDay;
ocWeek: TOccurenceWeek;
ocMonth: TOccurenceMounth;
ocYear: TOccurenceYear;
);
False:(
AllInString:shortstring[len];
);
end;
POccurence=^TOccurence;
...
var o:TOccurence;
begin
ADOQuery1.edit;
ADOQuery1.Fields[0].asstring:=o.AllInString;
ADOQuery1.post;
end;
длина записи нам известна, она меньше 255, можно использовать вариантную запись.
старый проверенный способ

, а в базе хранить всё в binary char, дабы не потерять информацию ненароком.