gpt4 book ai didi

delphi - 如何在运行时创建TDataSet查找字段?

转载 作者:行者123 更新时间:2023-12-03 14:58:56 29 4
gpt4 key购买 nike

我正在使用 TADODataSet (D7)。
我不会在设计模式下使用我的数据集创建持久字段。

dsItems.CommandText := 'select ID, ItemName, UserIDCreate from Items';
dsUsers.CommandText := 'select ID, LoginName from Users'; // lookup dataset

如果我双击 dsItems 和“添加所有字段”,然后单击“新建字段”并定义我的查找字段,则一切正常。生成的 dsItems 应包含:ID、ItemName、UserIDCreate、LoginName_Lookup

如何避免在设计时执行所有这些操作,并在打开数据集之后/或之前(?不确定)添加查找字段。

换句话说:如何模拟“添加所有字段”,然后模拟“新字段”以在运行时添加查找字段?

<小时/>

注意:从 IDE 运行 John 的代码时出现异常。尝试打开数据集时发生异常:EOleException,并显示消息“发生未知错误”

函数 TCustomADODataSet.LocateRecord (ADODB.pas) 位于 if FieldCount = 1 then FLookupCursor.Find...

我接受答案,因为编译的程序正在运行。
如果有人可以验证在 IDE 中运行表单时是否出现异常,那就太好了。

最佳答案

无法在运行时打开数据集以添加查找字段。

您还需要添加您需要访问的任何其他字段作为持久字段,否则,它们将无法访问。以下程序应该有效。但是,如果可以的话,我建议您使用查询并连接表 - 在我看来,这样可以减少编码量,而且更加简洁。

procedure CreatePersistentFields(ADataset: TDataset);
Var
i: Integer;
Begin
ADataset.FieldDefs.Update;
for I := 0 to ADataset.FieldDefs.Count - 1 do
if ADataset.FindField(ADataset.FieldDefs[i].Name) = Nil then
ADataset.FieldDefs.Items[i].CreateField(ADataset);
End;

Procedure CreateLookupField( ATable: TDataSet; AFieldName: String; ALookupDataset: TDataset; AKeyfields: String; ALookupKeyfields: String; ALookupResultField : String);
Var
I : Integer;
NewField : TField;
Begin
with ATable do begin
if FieldDefs.Updated = False then
FieldDefs.Update;
If FindField(AFieldName) = Nil then
begin
NewField := TStringField.Create(ATable);
NewField.FieldName := AFieldName;
NewField.KeyFields := AKeyFields;
NewFIeld.LookupDataSet := ALookupDataset;
NewField.LookupKeyFields := ALookupKeyFields;
NewField.LookupResultField := ALookupResultField;
NewField.FieldKind := fkLookup;
NewField.Dataset := ATable;
end;
end;
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
AdoDataset1.Close;
CreatePersistentFields(TDataset(AdoDataset1));
CreateLookupField(TDataset(AdoDataset1), 'EmployeeNameLook', TDataset(EmployeeTable), 'EmployeeID', 'EmployeeID', 'EmployeeName');
end;

关于delphi - 如何在运行时创建TDataSet查找字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9064162/

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