RAVE中TRvCustomConnection组件介绍
TRvCustomConnection组件
描述:
通过数据连接组件的事件,你可以定制数据以何种方式送到你的Rave报表.对于使用
TRvCustomConnection的非数据库数据,你会想要通过这些事件得到可以使用的所有数据。
对于数据库数据连接组件象TRvDataSetConnection,你仅仅想要覆盖OnValidateRow事件.
注意: TRvCustomConnection组件有一个整型的DataIndex和DataRows属性.他们用于自定
义连接器事件,可以和OnFirst, OnNext和OnEOF事件一起使用. DataIndex用作
数据指针位置,它以0为首行. DataRows指明数据的行数.例如,如果你为内存数组定义一个
自定义数据连接,你仅需要初始化Connection.DataRows属性为内存数组中的元素数量
然后让Rave处理OnFirst, OnNext 和 OnEOF事件.在OnGetRow事件中,你将存取
Connection.DataIndex属性区确定哪个数据被传回来(记住对于首行DataIndex为0).
事件:
OnGetCols
这个事件当Rave要检索数据的元数据信息时被调用,在该事件中你可为你的数据中的每
个字段(列)调用Connection.WriteField方法。WriteField定义如下:
procedure WriteField(Name: string;DataType: TRpDataType;Width:
integer;FullName: string;Description: string);
Name是该字段的短名称,它只能包含文字和数字字符。DataType是下列所示的数据类型
之一:dtString,dtInteger, dtBoolean, dtFloat, dtCurrency, dtBCD,
dtDate, dtTime, dtDateTime, dtBlob, dtMemo 或 dtGraphic。Width是和该字段宽度
相关的字符。Full name是字段名称的更详细的描述,它可以包括空格和其他
非字母数字字符。如果Full name为空白,那么Name将用作字段的full
name。Description是一个完整的字段描述,由于它用memo组件来编辑所以可以包含多行内
容。使用
description属性来说明字段如何被使用以及关于字段数据的其他信息。
举例:
procedure TDataForm.CustomCXNGetCols(Connection: TRvCustomConnection);
begin
With Connection do begin
WriteField('Index',dtInteger,8,'Index Field','Description 1');
WriteField('Name',dtString,30,'Name Field','Description 2');
WriteField('Amount',dtFloat,20,'Amount Field','Description 3');
end; { with }
end;
OnOpen
进行数据会话的初始化工作调用该事件。在这个事件中你可以打开数据文件,初始化变
量以及为在数据会话结束时引发的OnRestore事件保存当前的数据状态
举例:
procedure TDataForm.CustomCXNOpen(Connection: TRvCustomConnection);
begin
AssignFile(DataFile,'DATAFILE.DAT');
Reset(DataFile,1);
end;
OnFirst
定位数据指针到首行的时候调用该事件
举例:
procedure TDataForm.CustomCXNFirst(Connection: TRvCustomConnection);
begin
Seek(DataFile,0);
BlockRead(DataFile,DataRecord,SizeOf(DataRecord),DataRead);
end;
OnNext
移动数据指针到下一行的时候被调用
举例:
procedure TDataForm.CustomCXNNext(Connection: TRvCustomConnection);
begin
BlockRead(DataFile,DataRecord,SizeOf(DataRecord),DataRead);
end;
OnEOF
判断数据指针是否超过文件的结尾处,如果没有行或者在OnNext事件中已经移到最后
一行时触发该事件。
举例:
procedure TMainForm.CustomCXNEOF(Connection: TRvCustomConnection;var EOF:
Boolean);
begin
EOF := DataRead OnGetRow
检索当前行数据时触发该事件。Rave有好几种方法用来写数据到指定的缓冲区。字段
的顺序和类型必须完全匹配在OnGetCols事件中提供的字段的定义。
下面是Connection对象提供的用来写数据到数据缓冲区的函数列表
procedure WriteStrData(FormatData: string;NativeData: string); { dtString
}
procedure WriteIntData(FormatData: string;NativeData: integer); {
dtInteger }
procedure WriteBoolData(FormatData: string;NativeData: boolean); {
dtBoolean }
procedure WriteFloatData(FormatData: string;NativeData: extended); {
dtFloat }
procedure WriteCurrData(FormatData: string;NativeData: currency); {
dtCurrency }
procedure WriteBCDData(FormatData: string;NativeData: currency); { dtBCD }
procedure WriteDateTimeData(FormatData: string;NativeData: TDateTime); {
dtDate, dtTime and dtDateTime }
procedure WriteBlobData(var Buffer;Len: longint); { dtBlob, dtMemo
anddtGraphic }
有个特别的方法WriteNullData (no parameters),可以用于包含未初始化或null数
据的任何字段的调用。FormatData参数常用于为该字段传递预先格式化的字符数据。
NativeData参数用于传递字段的未格式化的或Raw数据,如果特定的格式在Rave报表
中定义,那么格式将应用到NativeData。如果没有特定的格式在Rave报表中定义,那么
FormatData将被用来打印。
举例:
procedure TDataForm.CustomCXNGetRow(Connection: TRvCustomConnection);
begin
With Connection do begin
WriteIntData('',DataRecord.IntField);
WriteStrData('',DataRecord.StrField);
WriteFloatData('',DataRecord.FloatField);
end; { with }
end;
OnValidateRow
这个事件用来控制是否你允许当前的行包括在报表中。
举例:
procedure TDataForm.CustomCXNValidateRow(Connection:
TRvCustomConnection;var ValidRow: Boolean);
begin
ValidRow := DataRecord.FloatField >= 0.0;
end;
OnRestore
中止并恢复数据会话到先前状态时触发该事件。在这个事件中你可以关闭数据文
件,释放资源以及恢复数据到OnOpen事件触发时的状态
举例:
procedure TDataForm.CustomCXNRestore(Connection: TRvCustomConnection);
begin
CloseFile(DataFile);
end;