gpt4 book ai didi

delphi - TStringList的对象自动改变

转载 作者:行者123 更新时间:2023-12-02 11:07:01 27 4
gpt4 key购买 nike

我创建了两个 stringList BookmarkedFields 和 BookmarkedRecord

BookmarkedFields 它包含数据集的列名称BookmarkedRecord 它就像 field:fieldValue 字段是 BookmarkedFields 中的列名称 fieldValue 是根据列的值

以下是将记录作为列和记录的列值存储在 stringList 中的过程。

procedure TBkmrgString.GetIQBookmark(ADataset: TDataset);
var
I : integer;
begin
ADataset.GetFieldNames(BookmarkedFields);
for I := 0 to BookmarkedFields.Count - 1 do
begin
BookmarkedRecord.AddObject(BookmarkedFields[I], ADataset.FieldByName(BookmarkedFields[I]));
end;
end;

我尝试查找已存储在字符串列表中的记录到数据集中。但是,当开始定位到数据集时,字符串列表中的值会自动发生变化,并显示数据集中指向的值。自动更改的字符串列表对象。

procedure TBkmrgString.GotoIQBookmark(ADataset: TDataset);
var
I : Integer;
a : string;
begin
ADataset.DisableControls;
ADataset.First;
while not ADataset.Eof do
begin
I := 0;
while (I < BookmarkedFields.Count) and
(ADataset.FieldByName(BookmarkedFields[ I ]).Value = TField(BookmarkedRecord.Objects[ I ]).Value) do
begin
I := I + 1;
end;
if I = BookmarkedFields.Count then
Break
else
ADataset.Next;
end;
ADataset.EnableControls;
end;

如何处理这种情况,我如何保留存储的字符串列表中的值,不想自动更改字符串列表的对象。

最佳答案

您没有将字段值存储在字符串列表中。这段代码

BookmarkedRecord.AddObject(BookmarkedFields[I], ADataset.FieldByName(BookmarkedFields[I]));

TField对象添加到TStringList。字段,而不是记录。 TField 对象不存储值。它指向字段,每次调用它时,都会返回数据集中当前记录的值。不是“记住”,只是当前。

如果你需要记住值(value),你可以这样做:

BookmarkedRecord.AddObject(BookmarkedFields[I], TObject(ADataset.FieldByName(BookmarkedFields[I]).AsInteger));

此示例适用于整数字段。

关于delphi - TStringList的对象自动改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39188925/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com