Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何将字段添加到TfrxDBDataset_Delphi - Fatal编程技术网

Delphi 如何将字段添加到TfrxDBDataset

Delphi 如何将字段添加到TfrxDBDataset,delphi,Delphi,你好, 我有TfrxDBDataset组件。我可以像上面那样从表中添加字段。但我也希望在运行时手动添加字段和值 我有这样的文本文件: 身份证 1个样本 2样本 我想阅读此文本文件并将注释插入frxDst\U Multi。这可能吗 我不想在tbl中创建一个新列作为注释。因为,我有太多的mysql服务器 感谢您的建议,在数据集打开时,您不能将字段添加到数据集中,因此您必须先添加字段 它以代码或使用TDataSet字段编辑器打开。如果你是 在代码中执行此操作时,可以在数据集的打开之前添加字段 事件 下

你好,

我有TfrxDBDataset组件。我可以像上面那样从表中添加字段。但我也希望在运行时手动添加字段和值

我有这样的文本文件:

身份证

1个样本

2样本

我想阅读此文本文件并将注释插入frxDst\U Multi。这可能吗

我不想在tbl中创建一个新列作为注释。因为,我有太多的mysql服务器


感谢您的建议,

在数据集打开时,您不能将字段添加到数据集中,因此您必须先添加字段 它以代码或使用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?