一个困饶我很久的问题,急需各位的帮助

KD007 2003-04-24 09:57:57
我开发的一个程序,使用TTable数据集,如何动态添加一个字段,ftLookup类型,使用“地区编码”找到“地区名称”,并在DBGrid中反映出来呢。
由于我的TTable动态指向不同的表(每个表都有“地区编码”字段),所以在设计时无法添加该字段。希望在指定了表名后,添加地区名称字段。

...全文
62 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangguo_god 2003-04-26
  • 打赏
  • 举报
回复
TTable* newTable=new (TTable*)(DBGridEh1->DataSource->DataSet)(this);
free1949 2003-04-25
  • 打赏
  • 举报
回复
最好使用TQuery
KD007 2003-04-25
  • 打赏
  • 举报
回复
guxiaobo@sohu.com 多谢kataboy
KD007 2003-04-25
  • 打赏
  • 举报
回复
kataboy,我等你的email
KD007 2003-04-25
  • 打赏
  • 举报
回复
以下是我写的程序
TTable* newTable=(TTable*)(DBGridEh1->DataSource->DataSet);
newTable->Active=false;
newTable->TableName="民兵综合情况表一";
newTable->FieldDefs->Update();
T = new TStringField(this);
T->FieldName = "地区名";
T->Name = "TStringFieldDistrictName";
T->Index=1;
T->DataSet=newTable;
T->FieldKind=fkLookup;
T->KeyFields ="地区编码";
T->LookupDataSet=DataModule1->TDistrict;
T->LookupKeyFields="地区编码";
T->LookupResultField="地区名称";
newTable->Fields->Add(T);
newTable->Active=true;
DBGridEh1->Columns->RebuildColumns();

这样写,在执行到newTable->Active=true时,报地区编码未找到。
如果将newTable->Active=true移到
newTable->TableName="民兵综合情况表一";
后面,则执行到T->DataSet=newTable;时报在newTable打开时不能执行此操作。
真是进退俩难啊!
he_Fly你思考了这么久,有没有好方法呀?
用TQuery可以吗?我想这个字段是lookup类型的,可以进行下拉选择。不知道如何用TQuery实现,俩位能否写详细点呢?
he_Fly 2003-04-25
  • 打赏
  • 举报
回复
TField:
Use FieldKind to determine if a field is a data field, a calculated field, or a lookup field. The value of FieldKind can be changed programmatically, but in practice FieldKind is set at design time when creating Field components with the Fields editor.

The FieldKind property can take one of the following values:
当你把所有的字段做为静态字段才能用,这个属性。。。
楼主,这也是我以前想过的问题,多说了几句。。。
he_Fly 2003-04-25
  • 打赏
  • 举报
回复
In TFieldDef

Attributes
ChildDefs
DataType
FieldClass
FieldNo
InternalCalcField
ParentDef
Precision
Required
Size

Derived from TNamedItem

DisplayName
Name

Derived from TCollectionItem

Collection
ID
Index

TFieldDef哪里有FieldKind属性呀??????????????????????????????????????????????????????????????????????????????????????????????????
gyj_china 2003-04-25
  • 打赏
  • 举报
回复
用SQL语句动态创建。
yangguo_god 2003-04-24
  • 打赏
  • 举报
回复
Table1->TableName = "CustInfo";
TFieldDef *pNewDef = Table1->AddFieldDef();
pNewDef->Name = "Field1";
pNewDef->DataType = ftInteger;
pNewDef->FieldKind=fkLookUp;
pNewDef->Required = true;
kataboy 2003-04-24
  • 打赏
  • 举报
回复
你给个E-mail,我写一个给你!
yyfzy 2003-04-24
  • 打赏
  • 举报
回复
创建字段一是对表而言的啊

例如:
Table1->TableName="aaaa";
....
Table1->FieldDefs->Add(....);
.....
这样也是给表aaaa添加了字段,而不是给什么Table1添加的字段。

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧