delphi – 如何在运行时创建TDataSet查找字段?
我正在使用TADODataSet(D7).
我没有使用我的DataSet在设计模式下创建持久字段. dsItems.CommandText := 'select ID,ItemName,UserIDCreate from Items'; dsUsers.CommandText := 'select ID,LoginName from Users'; // lookup dataset 如果我双击dsItems并“添加所有文件”,然后单击“新建文件”并定义我的查找字段,一切正常. 如何在设计时避免完成所有这些操作,并在打开DataSet之后(或不确定)之前添加查找字段. 换句话说:如何模拟“添加所有文件”然后“新建文件”以在运行时添加查找文件? 注意: 函数TCustomADODataSet.LocateRecord(ADODB.pas)如果FieldCount = 1则行,然后是FLookupCursor.Find …… 我接受答案,因为已编译的程序正在运行. 解决方法
无法打开数据集以在运行时添加查找字段.
您还需要添加您需要访问的任何其他字段作为持久字段,否则,它们将无法访问.以下程序应该有效.但是,如果可以的话,我建议你使用查询并加入你的表格 – 它的编码要少得多,而且我认为更清晰. 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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |