这些日子答应别人要帮忙写一个简单的管理器,理所当然的要用到数据库。我其实是不太喜欢开发那些业务管理系统的,但既然答应别人了,那就没办法了。
本来打算直接用ADO算了,但用的时候总觉得有些不太好使。于是就用dbExpress作其中间层来写,但后来却发现这个dbExpress对SQL Server中的自增变量(Auto Inc)不好处理,另外,如果要用dbExpress,则程序发布时总要带个Midas.dll之类的东西,十分的不便。所以一怒之下,决定自己写一个类似的东西。就是本文要写的一个RecordSet。
我总喜欢未介绍实现,就先演示一下结果,这个RecordSet究竟能够干些什么:请看
procedure TForm1.InitRecordSet;
var
ft : TFlexFieldType;
aRecord: TFlexRecord;
i, j : integer;
begin
// Main RS
self.FRecordSet := TFlexRecordSet.Create;
ft := TFlexFieldType.Create(TFlexFieldIntegerValue);
ft.FiledName := 'MyIntegerFieldName';
ft.Caption := 'Int Field';
ft.IsShow := true;
FRecordSet.FieldTypes.AddFiledType(ft);
ft := TFlexFieldType.Create(TFlexFieldStringValue);
ft.FiledName := 'MyStringFieldName';
ft.Caption := 'Str Field';
ft.IsShow := true;
FRecordSet.FieldTypes.AddFiledType(ft);
ft := TFlexFieldType.Create(TFlexFieldStringValue);
ft.FiledName := 'MyStringFieldName';
ft.Caption := 'Str Hide Field';
ft.IsShow := false;
FRecordSet.FieldTypes.AddFiledType(ft);
ft := TFlexFieldType.Create(TFlexFieldIntegerValue);
ft.FiledName := 'MyStringFieldName';
ft.Caption := 'Str Map Field';
ft.IsShow := true;
FRecordSet.FieldTypes.AddFiledType(ft);
ft := TFlexFieldType.Create(TFlexFieldStringValue);
ft.FiledName := 'MyStringFieldName';
ft.Caption := 'Str Show 2 Field';
ft.IsShow := true;
FRecordSet.FieldTypes.AddFiledType(ft);
for i := 0 to 99 do
begin
aRecord := FRecordSet.CreateNewRecord;
TFlexFieldIntegerValue(aRecord.FieldValues[0]).Value := i;
TFlexFieldStringValue(aRecord.FieldValues[1]).Value := 'S ' + IntToStr(i);
TFlexFieldStringValue(aRecord.FieldValues[2]).Value := 'H ' + IntToStr(i);
TFlexFieldIntegerValue(aRecord.FieldValues[3]).Value := i mod 5;
TFlexFieldStringValue(aRecord.FieldValues[4]).Value := 'V ' + IntToStr(i);
FRecordSet.AddRawData(aRecord);
end;
end;