CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  数据库相关

如何动态设计数据库结构及报表

楼主wyj1974(迷茫的帅哥)2004-12-02 10:42:51 在 Delphi / 数据库相关 提问

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

1 楼BigAngell(学而不思则罔 思而不学则殆)回复于 2004-12-02 11:44:21 得分 0

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

2 楼wyj1974(迷茫的帅哥)回复于 2004-12-02 11:54:02 得分 0

那如果数据库字段随意变动的话,界面如何适应呢?Top

3 楼newcar(newcar)回复于 2004-12-02 13:04:02 得分 0

本人也正在做一个工资管理,要求动态列,自定义报表。。  
  思路:用alter   table动态创建,删除列。。用一个表保留动态表结构。(包括字段类型,列计算公式等)             界面用grid显示及编辑数据。grid列根据结构表动态创建。。  
  以上已经完成了。接下来就是报表问题。原理同上。不过报表就不用要结果表了,用户增加一列,表结构增加2个字段,一个存数据用一个存计算公式用。  
   
  还有一种方法。。  
  就是把数据的列变成显示数据的行。。如  
  id       属性       属性值  
  1         姓名       张三  
  1         年龄         21  
  1         其他     。。  
  2         姓名       李四  
  2         年龄       22  
  3   。。。  
  。。。  
  曾经有人说过,用第一种方法的一般是半路出家的程序员。用第二种方法的才是专业的程序员。。  
  呵呵。我就是半路出家。。。  
  这只是一点建议,具体还需要自己去实现。。Top

4 楼wyj1974(迷茫的帅哥)回复于 2004-12-02 13:21:10 得分 0

第一种方法我考虑过!  
  第二种方法倒是很新鲜,不知能否详细说明一下  
  Top

5 楼zdq801104(【☆这个杀手不太冷☆】)回复于 2004-12-02 13:34:58 得分 0

看起来满好的思路,好好关注一下!Top

6 楼wyj1974(迷茫的帅哥)回复于 2004-12-02 13:44:28 得分 0

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

7 楼zglwxb(假钞换贞操)回复于 2004-12-02 13:45:31 得分 0

严重关注  
  顶Top

8 楼wyj1974(迷茫的帅哥)回复于 2004-12-02 13:49:49 得分 0

就是把数据的列变成显示数据的行。。如  
  id       属性       属性值  
  1         姓名       张三  
  1         年龄         21  
  1         其他     。。  
  2         姓名       李四  
  2         年龄       22  
  3   。。。  
  。。。  
   
  ---这种方法,如果数据量很大的话,那表不是很长吗?这样检索起来。。。!Top

9 楼BigAngell(学而不思则罔 思而不学则殆)回复于 2004-12-02 14:48:49 得分 0

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

10 楼cctv1111(小子)回复于 2004-12-02 15:03:17 得分 0

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

11 楼Changefish(小翼【嘘。。。别出声!我是从80端口进来的】)回复于 2004-12-02 16:14:48 得分 0

见过这样的软件   但不知道如何实现的Top

12 楼wyj1974(迷茫的帅哥)回复于 2004-12-03 11:10:37 得分 0

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

13 楼GRWriter(重视报表开发)回复于 2004-12-03 11:34:18 得分 0

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

14 楼wyj1974(迷茫的帅哥)回复于 2004-12-03 12:41:34 得分 0

楼上的,我不是完全要报表方面的东东呀!!!Top

15 楼BigAngell(学而不思则罔 思而不学则殆)回复于 2004-12-03 12:52:38 得分 0

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

16 楼newcar(newcar)回复于 2004-12-03 14:54:24 得分 0

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

17 楼wyj1974(迷茫的帅哥)回复于 2004-12-07 10:03:44 得分 0

这两天在忙其他的事,请大家继续给予关注!Top

18 楼wyj1974(迷茫的帅哥)回复于 2004-12-07 10:05:46 得分 0

就是把数据的列变成显示数据的行。。如  
  id       属性       属性值  
  1         姓名       张三  
  1         年龄         21  
  1         其他     。。  
  2         姓名       李四  
  2         年龄       22  
  3   。。。  
  。。。  
  这个设计才是最标准的方法..记录数会很多,但是速度却并不慢.  
  如果不用grid的话也可以动态创建控件,不过这样写代码就太麻烦了..  
  -----------------------------------------------------------------------  
  这种方式,大家能否给段代码看看,或说的再详细点!Top

19 楼zzlazio(sritsb)回复于 2004-12-07 10:55:00 得分 0

说到底就是报表的地方..  
  严重关注...Top

20 楼masterjames(三月街)回复于 2004-12-07 12:52:31 得分 0

临时表Top

21 楼newcar(newcar)回复于 2004-12-07 14:47:20 得分 0

能做成那种数据库结构的软件一般是很难弄到原码的。。  
  有一个网友现在就在用这种方法作一个报表控件呢。Top

22 楼surpassable()回复于 2004-12-07 14:53:32 得分 0

学习  
  关注~~~Top

23 楼wyj1974(迷茫的帅哥)回复于 2004-12-07 15:47:59 得分 0

说说实现方式也可以或把设计思路写的详细点也行呀!!Top

24 楼wyj1974(迷茫的帅哥)回复于 2004-12-08 11:42:06 得分 0

难道大家都不关心吗?Top

25 楼herofy(雄鸡报晓)回复于 2004-12-08 12:08:11 得分 0

把数据列转变成行是一个好的方法,我也这样实现过。  
  不过有的时候就不是很方便,比如当浏览全部会员的时候,你要把行转化成列来显示出来,这样是一个很麻烦的事情,特别是当有的是两个属性有的是三个属性的时候,楼主的项目可以不设计到这个需求。Top

26 楼wyj1974(迷茫的帅哥)回复于 2004-12-08 12:55:46 得分 0

我感觉不光是这些,会员的基本属性有编号、姓名、.....,同时会员的车辆信息表还要和会员信息表发生关联,然后还有车辆保险表等等,同时针对会员还有驾驶证到期通知、车辆行驶证到期通知等等,感觉如果做成动态的实在太过麻烦了。Top

27 楼wyj1974(迷茫的帅哥)回复于 2004-12-08 12:57:59 得分 0

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

28 楼herofy(雄鸡报晓)回复于 2004-12-08 14:13:35 得分 0

我把字段的属性也做成了一个字段来处理了。Top

29 楼wyj1974(迷茫的帅哥)回复于 2004-12-08 14:17:50 得分 0

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

30 楼newcar(newcar)回复于 2004-12-09 16:50:56 得分 0

这个东西只能具体问题具体分析了,没有办法说的很详细。最终还是需要自己多多琢磨。。Top

31 楼wyj1974(迷茫的帅哥)回复于 2004-12-09 16:55:23 得分 0

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

32 楼gzlcd()回复于 2004-12-09 17:19:51 得分 0

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

33 楼wyj1974(迷茫的帅哥)回复于 2004-12-10 09:23:45 得分 0

楼上的能否大概说一下实现原理?!Top

34 楼syfan(阿帆)回复于 2004-12-11 19:15:03 得分 0

 
   
  用友的工资用的是第一种方法  
   
  金蝶的工资用的是第二种方法,  
   
   
  不过金蝶的工资在功能上比用友的差多的.Top

35 楼syfan(阿帆)回复于 2004-12-11 19:16:06 得分 0

To     newcar(newcar)Top

36 楼tetsuya(小哲)回复于 2004-12-11 19:33:11 得分 0

还是用友U8的结构看上去比较好..至少给它做外挂方便...  
  金蝶的K3.今天刚刚装好还在研究.Top

37 楼wyj1974(迷茫的帅哥)回复于 2004-12-13 08:57:27 得分 0

期待楼上的研究结果!Top

38 楼wyj1974(迷茫的帅哥)回复于 2004-12-13 11:30:42 得分 0

由于楼上的两位的提醒,我下载了用友的U8进行了测试,只是简单分析了一下工资关联部分。个人感觉和我目前采用的方法基本上差不多,但其动态的多位字符型或数字型,而我们的系统则可能会有诸如日期等等类型,不过还是很有启发。  
  现在先不结贴,欢迎各位继续讨论。  
  等我做处理后,会第一时间公布我的设计思路。Top

39 楼JavaD(一竿残照(the way of delphi))回复于 2004-12-13 11:41:55 得分 0

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

40 楼tycoonXP(剑帅)回复于 2004-12-13 12:00:59 得分 0

期待完美方案~~~Top

41 楼alonesnake(一盘菜)回复于 2004-12-13 15:44:56 得分 0

upTop

42 楼luckta(luckta)回复于 2004-12-13 16:13:53 得分 0

如果是會計系統的話建議不要隨便讓用戶加減字段,建議像U8一樣在數據庫中增加自定義項來解決,增加字段的問題,而刪除就只要直接將不需要的字段在介面上隱藏就可以Top

43 楼wyj1974(迷茫的帅哥)回复于 2004-12-13 16:46:00 得分 0

是一个管理软件不是财会系统的软件。Top

相关问题

  • 如何在VB报表中动态绑定数据库
  • 求一个思路:VB数据库动态报表生成
  • 急呀!水晶报表动态时连接数据库
  • 数据库报表
  • VB中水晶报表如何动态添加数据库表的字段
  • 有关数据库报表
  • VC 数据库报表
  • 如何动态选定数据库字段名后,实现动态生成打印报表.
  • pb6.5如何根据数据库的表结构动态生成数据窗口?
  • 在水晶报表中如何使用程序动态指定详细资料栏里的数据库字段的数据库连接属性

关键词

  • .net
  • 字段
  • 报表
  • 属性
  • 数据
  • 数据库
  • 界面
  • 结构
  • 用友
  • 控件

得分解答快速导航

  • 帖主:wyj1974

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo