Delphi 如何将字段添加到TfrxDBDataset
你好, 我有TfrxDBDataset组件。我可以像上面那样从表中添加字段。但我也希望在运行时手动添加字段和值 我有这样的文本文件: 身份证 1个样本 2样本 我想阅读此文本文件并将注释插入frxDst\U Multi。这可能吗 我不想在tbl中创建一个新列作为注释。因为,我有太多的mysql服务器Delphi 如何将字段添加到TfrxDBDataset,delphi,Delphi,你好, 我有TfrxDBDataset组件。我可以像上面那样从表中添加字段。但我也希望在运行时手动添加字段和值 我有这样的文本文件: 身份证 1个样本 2样本 我想阅读此文本文件并将注释插入frxDst\U Multi。这可能吗 我不想在tbl中创建一个新列作为注释。因为,我有太多的mysql服务器 感谢您的建议,在数据集打开时,您不能将字段添加到数据集中,因此您必须先添加字段 它以代码或使用TDataSet字段编辑器打开。如果你是 在代码中执行此操作时,可以在数据集的打开之前添加字段 事件 下
感谢您的建议,在数据集打开时,您不能将字段添加到数据集中,因此您必须先添加字段 它以代码或使用TDataSet字段编辑器打开。如果你是 在代码中执行此操作时,可以在数据集的
打开之前添加字段
事件
下一个问题是,您不希望字段绑定到表
数据集访问时,需要将其添加为计算字段并设置其值
在数据集的“OnCalcFields”事件中-请参见下面的示例
理想情况下,添加的字段应该是TMemoField,但不幸的是,它是TMemoField
不能是计算字段(FieldKind
=ftMemo
)。因此,可能您可以做的最好的事情是将其设置为字符串字段,但接下来您需要
给它一个固定的最大大小,并在计算其值时截断该大小的字段值
顺便说一句,我不知道您的TfrxDBDataset
是否支持fkInternalCalc
fieldkind,但是如果它支持,那么您可以尝试将note字段添加为TMemoField,而不是TStringField
有一件事我还不能做,那就是从中加载字段的值
一个外部文件,因为您在q中没有说明如何确定
要读取的文件的名称
显然,frxDst\u multicalfields
事件中的IsNull
检查是为了避免在文件内容已被读取时重新加载文件的开销
if Length(idStrArray)>0 then
begin
with DataModule4.ADQueryTemp do
begin
Close;
SQL.Clear;
SQL.Add('SELECT id, pato, ftest, res FROM tbl ');
SQL.Add('WHERE id IN ('+idStrArray+')');
Open;
(rprMasterDataFish as Tfrxmasterdata).DataSet := frxDst_Multi;
(rprMasterDataFish as Tfrxmasterdata).DataSetName := 'Multi';
end;
end;
无法在数据集打开时向其添加字段,因此必须先添加字段
它以代码或使用TDataSet字段编辑器打开。如果你是
在代码中执行此操作时,可以在数据集的打开之前添加字段
事件
下一个问题是,您不希望字段绑定到表
数据集访问时,需要将其添加为计算字段并设置其值
在数据集的“OnCalcFields”事件中-请参见下面的示例
理想情况下,添加的字段应该是TMemoField,但不幸的是,它是TMemoField
不能是计算字段(FieldKind
=ftMemo
)。因此,可能您可以做的最好的事情是将其设置为字符串字段,但接下来您需要
给它一个固定的最大大小,并在计算其值时截断该大小的字段值
顺便说一句,我不知道您的TfrxDBDataset
是否支持fkInternalCalc
fieldkind,但是如果它支持,那么您可以尝试将note字段添加为TMemoField,而不是TStringField
有一件事我还不能做,那就是从中加载字段的值
一个外部文件,因为您在q中没有说明如何确定
要读取的文件的名称
显然,frxDst\u multicalfields
事件中的IsNull
检查是为了避免在文件内容已被读取时重新加载文件的开销
if Length(idStrArray)>0 then
begin
with DataModule4.ADQueryTemp do
begin
Close;
SQL.Clear;
SQL.Add('SELECT id, pato, ftest, res FROM tbl ');
SQL.Add('WHERE id IN ('+idStrArray+')');
Open;
(rprMasterDataFish as Tfrxmasterdata).DataSet := frxDst_Multi;
(rprMasterDataFish as Tfrxmasterdata).DataSetName := 'Multi';
end;
end;
Hello@MartynA它会删除其他字段。唯一值得注意的是,这个领域似乎是。你知道吗?你的其他字段是持久的(在IDE中创建的),还是在数据集打开时由数据集创建?如果我不使用AddNoteField方法,我的数据集有id、pato、ftest和res(表列)。但若我使用AddNoteField方法,我的数据集只有一个Note。frxDst\U Multi使用AdQueryTmp作为数据源,因此我在AddNoteField中将frxDst\U Multi更改为AdQueryTmp。我调用AdQueryTmp的before和calcfields方法,因为frxDst_Multi没有,并且它绑定到AdQueryTmp对不起,如果没有整个项目和代码,我建议您创建一个只包含frxDst_Multi的新项目,看看是否正确添加了Note字段。试试看,请让我知道..什么数据类型是adquerytmp,您是否尝试在新项目中添加注释字段而不是frxDST_Multi?Hello@MartynA它删除了其他字段。唯一值得注意的是,这个领域似乎是。你知道吗?你的其他字段是持久的(在IDE中创建的),还是在数据集打开时由数据集创建?如果我不使用AddNoteField方法,我的数据集有id、pato、ftest和res(表列)。但若我使用AddNoteField方法,我的数据集只有一个Note。frxDst\U Multi使用AdQueryTmp作为数据源,因此我在AddNoteField中将frxDst\U Multi更改为AdQueryTmp。我调用AdQueryTmp的before和calcfields方法,因为frxDst_Multi没有,并且它绑定到AdQueryTmp对不起,如果没有整个项目和代码,我建议您创建一个只包含frxDst_Multi的新项目,看看是否正确添加了Note字段。试试看,让我知道,请..什么数据类型是adquerytmp,您是否尝试在新项目中添加注释字段而不是frxDST_Multi?