我现在帮一家公司开发一个项目,主要是做会员管理(会员信息包括会员的基本信息、车辆信息、车辆保险等等),现在这家公司要求能够做到会员信息可以动态调整(即删除或增加字段),同时在做报表的时候要求可灵活调整(现在的报表是会员的基本信息(会员表的同一行的不同列数据)+保险的险种(险种表的不同行的同一列数据))
我现在考虑的是如果数据库动态调整界面架构如何搭建?
同时报表这一块也有一定的困难,由于保险的险种是动态调整的(我现在设计的是用一张表格来保存险种信息),那么如何做到上述的要求?
谢谢!!!

解决方案 »

  1.   

    动态创建列,在SQL里有相关的命令。动态创建报表是有一定的难度,但只要细心做还是没问题的。你是用的TQuickRep吗?可以在OnNeedData事件中根据条件控制显示的QLabel值,你还可以做个数据带,根据某一条件确定要显示的是哪个数据带,并为它赋值,更具体的操作只有你去亲身体验了,你只要明白OnNeedData的工作原理,一切都变得那么简单,它就是游戏手柄!
      

  2.   

    本人也正在做一个工资管理,要求动态列,自定义报表。。
    思路:用alter table动态创建,删除列。。用一个表保留动态表结构。(包括字段类型,列计算公式等)      界面用grid显示及编辑数据。grid列根据结构表动态创建。。
    以上已经完成了。接下来就是报表问题。原理同上。不过报表就不用要结果表了,用户增加一列,表结构增加2个字段,一个存数据用一个存计算公式用。还有一种方法。。
    就是把数据的列变成显示数据的行。。如
    id   属性   属性值
    1    姓名   张三
    1    年龄    21
    1    其他  。。
    2    姓名   李四
    2    年龄   22


    曾经有人说过,用第一种方法的一般是半路出家的程序员。用第二种方法的才是专业的程序员。。
    呵呵。我就是半路出家
    这只是一点建议,具体还需要自己去实现。。
      

  3.   

    我刚才和一个上海的同学沟通了一下,想采用如下方式:
    数据库系统中存在两种表:
    基本信息表:提前设置大量的字段,字段名可从Field1到Field100,字段类型全部为字符串型。
    配置表:用于指定基本信息表中的有效字段和中文含义。
    这样可解决动态调整的问题,但界面上却很难适应,如果采用 newcar(newcar)的方法用Grid来呈现和修改的话,则显得不够友好。
    请各位继续关注!
      

  4.   

    界面的自动适,你可以写个专用的过程来控制,左边用个ListView,右边可以放置一些其它的控件,比如TEdit,根据搜到的字段来确定要生成多少列、TEdit...我们公司就有这种专门的工俱(自主开发),我们用它来自动生界面、代码、存储过程等,如果说在你的软件里要实现这些功能,我提意你为用户单独做个客户工具,用户要修改表结构或其它一些操作都放到这里来统一实现,再与主应用程序挂勾...
      

  5.   

    關注,
       這種動態的確實很麻煩。
    我們公司也有一張報表是動態的寫得相當麻煩。還是用水晶 報表的特性加 SQL 費了好大的力氣才搞定的。 。
      

  6.   

    To: BigAngell(风雨英雄) 
    我们计划就是想把设置和主程序分开的。
    如果都是一般的属性,按照你的方法是可以实现的,比如人的姓名、证件号码什么的,不和其他表发生关联。
    如果出现诸如所属部门这样的必须和其他表发生关联的,怎么解决呢?
    如果大家见过这样的软件,可能把其大概的流程描述一下,也许对我们有一定的帮助!
      

  7.   

    Grid++Report - 专为管理信息系统打造的报表构件
    适用于管理信息系统软件产品的报表开发,如ERP、进销存、财务等。快速制作通用报表与动态报表,有专业的可视化设计器,使用简便。编写了VB、VC、Delphi、C++Builder下的丰富示例。安装程序中包括可执行的例子程序,马上可以体验其功能。另在中国大陆地区是完全免费的。
    主页:www.GridppReport.com
      

  8.   

    如果出现诸如所属部门这样的必须和其他表发生关联的,怎么解决呢?////////////////////////还是一样的呀,在客户工具端修改就是了呀,不过你的SQL语句就不要写在程里了,最好保存为文本,修改文本内容就可以实现新的关联了
      

  9.   

    就是把数据的列变成显示数据的行。。如
    id   属性   属性值
    1    姓名   张三
    1    年龄    21
    1    其他  。。
    2    姓名   李四
    2    年龄   22


    这个设计才是最标准的方法..记录数会很多,但是速度却并不慢.
    如果不用grid的话也可以动态创建控件,不过这样写代码就太麻烦了..
    -----------------------------------------------------------
    数据库系统中存在两种表:
    基本信息表:提前设置大量的字段,字段名可从Field1到Field100,字段类型全部为字符串型。
    配置表:用于指定基本信息表中的有效字段和中文含义。
    这个方法不科学,而且在列数据需要公式计算的话不好处理...
      

  10.   

    就是把数据的列变成显示数据的行。。如
    id   属性   属性值
    1    姓名   张三
    1    年龄    21
    1    其他  。。
    2    姓名   李四
    2    年龄   22


    这个设计才是最标准的方法..记录数会很多,但是速度却并不慢.
    如果不用grid的话也可以动态创建控件,不过这样写代码就太麻烦了..
    -----------------------------------------------------------------------
    这种方式,大家能否给段代码看看,或说的再详细点!
      

  11.   

    To:herofy(herofy.go.nease.net)
    你们是如何编辑数据属性的呢?界面是如何架构的?
      

  12.   

    To:herofy(herofy.go.nease.net)
    能否请的详细点,如果不方便可通过消息发给我
    谢谢!!!!
      

  13.   

    我现在采用配置表的方式来记录数据库表的信息,然后试用Alter Table的方式来动态调整。
    还没有看到效果,先做着再说吧!
      

  14.   

    本人倒是做了个类似的系统,称为快速开发模板,解决了数据编辑界面、查询、数据库表关联等问题。并且支持三层结构。最近想移植到.NET下,发现.NET组件少了n多的事件与属性,居然解决不了动态生成数据编辑界面模板,该死的微软!还是VCL组件好啊!适合商用开发。
      

  15.   

    1.报表,存储sql语句,条件宏(可由客户端输入,并替换,生成可执行的sql)
    2.关联表,某个报表的所有字段名称,位置,字体(包括大小颜色),是否显示
    3.在客户端生成某报表的checkboxList,供用户选择定制,并可修改位置
    4.动态生成qreportLabel,或者(TfrMemo,如果用fastreport的化)