加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:33:55 所属栏目:大数据 来源:网络整理
导读:我正在使用TADODataSet(D7). 我没有使用我的DataSet在设计模式下创建持久字段. dsItems.CommandText := 'select ID,ItemName,UserIDCreate from Items';dsUsers.CommandText := 'select ID,LoginName from Users'; // lookup dataset 如果我双击dsItems并“
我正在使用TADODataSet(D7).
我没有使用我的DataSet在设计模式下创建持久字段.
dsItems.CommandText := 'select ID,ItemName,UserIDCreate from Items';
dsUsers.CommandText := 'select  ID,LoginName from Users'; // lookup dataset

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

如何在设计时避免完成所有这些操作,并在打开DataSet之后(或不确定)之前添加查找字段.

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

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

函数TCustomADODataSet.LocateRecord(ADODB.pas)如果FieldCount = 1则行,然后是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','EmployeeName');
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读