如何动态地进行字段编辑呢?(很急,分不是问题。。。)(100分)

  • 主题发起人 newyu_1127
  • 开始时间
N

newyu_1127

Unregistered / Unconfirmed
GUEST, unregistred user!
[?]各位师兄:
我遇到这样一个问题,我有一个adotable1,
我想动态地将tablename指定给(test1或test2)
并且我想在adotable1中增加一个虚拟的ID字段(int型)。
于是我先将adotable1的tablename指定给test1,
接着在字段编辑器中加入test1的所有字段,
然后右击选择new field进行增加一个虚拟的ID字段,最后在
DBgrid1中的columns编辑器中select all;
以此类推,我再将adotable1的tablename指定给test2,余下的
操作同上(将test1换成test2)。
最后我将adotable1的tablename清空,开始写代码了,我在窗体打开事件中,
根据一个前端参数进行判断adotable1的tablename是指向test1还是test2,
然后将adotable1.open;adotable1.edit。运行后出现了问题无法显示表,
于是我把字段编辑器中的除虚拟ID以外的其他字段全部删除了,这下好了问题更奇怪了:
表倒是显示出来了,tablename也指定的没错,但是却看不到记录(我的意思是:
比如test1中有三条,test2中有五条记录,如果tablename指向test1只显示三条
空记录,如果tablename指向test2只显示五条空记录,全部都看不到内容
)真绝。后来我把字段编辑器中的虚拟ID字段也删除了,结果记录内容全部都可
以显示了,但是在DBgrid1中却无法编辑虚拟ID字段。这可怎么办呢?
我在想是不是应该在代码中:adotable1.tablename指定后,接着用代码写加入
所有字段和增加虚拟字段,但是这些代码应该如何写呢?
请赐教,谢谢。


 
with sjtjb do begin
Active:=false;
DatabaseName := 'tnbdata';
TableName := 'sjtjb';
with FieldDefs do begin
Clear;
with AddFieldDef do begin
Name := '职业类型';
DataType := ftString;
Required := True;
end;
with AddFieldDef do begin
Name := '阳性数';
DataType := ftInteger;
Required := True;
end;
我程序里的部分代码,看看有没有帮助
 
请检查columns中FieldName属性
 
TO lanbing1400:
先谢你了,但是问题依旧,还是在DBgrid1中却无法编辑虚拟ID字段,还有一个
问题是按照你的方法是不是加入test1里的原所有字段,也要
with AddFieldDef do begin
Name := '职业类型';
DataType := ftString;
Required := True;
end;这样一个个加,没有add all fields这样的方法吗?
请赐教谢谢。
 
TO 苦中求乐:
您的意思不大清楚, DBgrid1中columns中FieldName属性?
我相应的columns[0].FieldName:='id';
这样也不行啊。
 
刚看到你的问题,不晚吧
你可以先在dbgrid里把需要的字段增加,然后在加你的ID字段就可以了
dbgrid1.Columns.Add;
dbgrid1.Columns.Items.FieldName:='id';
i值为你已经显示的字段数目
这样就会把你原来的字段和新增加的ID字段都显示出来了
 
不行啊还是问题依旧,DBgrid1中却无法编辑虚拟ID字段,
而且按照你的方法我的ID字阶段只能增加到最后一个,
这样显示不合理吧(我想ID大部分情况下都会作为表格显示的第一列的)
 
这个虚拟字段的 FieldKind=fkCalculated; 试一下!
 
dbgrid1.Columns.Insert(0);替换dbgrid1.Columns.Add; 可以放在第一列
另外的确好象不能编辑,我再试试看
 
如果表是动态创建的,那么可以对表增加记录和写值也可编辑各字段值,
但对于已经存在的表动态增加的字段无法做同样的操作,
是否可以将表改成动态创建呢?


 
这种问题似乎用adoquery更方便
 
TO lanbing1400:
动态建表可能性不大,那你原先表中的记录不是都没有了?
难道要再建一个临时表存放原先表内的记录吗?
TO lotusleaf:
能说得详细此吗?师兄
 
你要实现的功能难道非得用这样指定。
同样功能有许多实现方法,非得这样麻烦。
 
多人接受答案了。
 
顶部