一般来说,开发工具及相应的代码均假设数据库定义在运行时是不会变更的,因此,那个窗全不会自动跟着改变的。
如要改变,只能自行编程解决。当没有在设计或运行时特意指定字段时,DBGRID可以动态显示变化的字段(相应的TAble或Query等元件需Close&Open)BTW:
从来都不推荐这种用法,当然,如果你实在没有替代方案,那也只能如此了。
因为更改数据库结构是一件很费时,很可怕的工作,特别是当数据库中已有很多数据的时候。
你可以使用子表来实现,也可以使用Oracle的嵌入表或数组类型来实现。

解决方案 »

  1.   

    table,dbgrid中不要选择字段即可
      

  2.   

    我知道用DBGRID,是最简单的办法,但领导不同意。听沐枫说的,觉得有点恐惧。我的意思可能没有表达清楚。我们的软件为了通用性,假设一个表中最多的字段,由此形成一个窗体。另有一个系统设置功能,选择这个表的字段,认为有用的就选,无用的就不选,因为用户不同,所以这种情况,可以发生。对于没选的,在窗体中不显示,然后生成这个表的结构,然后在一段时间内,表的结构不会改变,如果要改变,可能要备份,再系统设置,除了没备份,上诉要求几乎完成了!现在的问题是,我们考虑的最多的字段还不够,所以另有一个窗体,添加表的字段,然后再选择,再生成。。,但是,我们那个窗体已经布置好了,这时多加了一个或者几个控件,布局就要改变了,这个是动态的,或者说首先是动态的。这个怎么解决呢?不用DBGRID。
      

  3.   

    To: tsg()
    明白了,我见过这样的例子,但是我不喜欢预设字段,何况SQL7似乎只允许300个字段。我一个朋友也是这么做的,只是动态布局实在实在是太可怕了,他后来使用了DevelopExpress公司的Inspector控件来动态显示(就象Delphi的Inspector),可以用吗?
    不可以的话,就只好自已另做一个。反正搞开发总是不得不自已做些控件的。后来那个朋友走掉后,我就把他的设计改成主从表形式,放弃预设字段,简单多了。也许不一定适合您的设计,只是提一下而已。
      

  4.   

    对于你已完成的部份,我有个建议:
    由于担心新加字段会导致布局改变,那么,干脆把最复杂的情况给考虑进去,就是假设选用所有的字段时的窗体的布局。
    然后,对于不用的字段,可将相关的元件禁止录入,或隐藏起来。
    如果隐藏起来会造成窗体有大量的空位,那么最好将这些元件用Panel或其它控件做容器包含起来,然后将Panel等容器设置为Align=top,这样,隐藏后,后面的容器就是自动向上靠拢。当然,一个窗口同时显示的元件不要太多,否则,你的系统将会极不稳定,容易死机,因为系统资源容易耗尽。
      

  5.   

    谢谢Muf!
    看来换来通用性,要付出很大代价的。