tempad
ReadyGo!技术成就梦想 >>PHP技术 >> 问一个数据库输入界面的技巧问题,欢迎大家多多讨论(一定给分)

问一个数据库输入界面的技巧问题,欢迎大家多多讨论(一定给分)

ReadyGo!技术成就梦想 网络搜索 efish 2008-1-14 16:25:58

问一个数据库输入界面的技巧问题,欢迎大家多多讨论(一定给分)

楼主waterweed(小王)2002-07-21 19:43:09 在 PowerBuilder / 控件与界面 提问

一个access数据库的表有许多个字段,  
  如果每次输入时要根据情况选择一部分字段输入数据,  
  选择的程序已经实现,  
  想跟大家讨论一下,如何做一个漂亮的输入界面实现向数据库中输入不定数目的数据  
  因为每次选择的要输入的字段数目都不同,  
  一般是用什么控件或方法实现?  
   
  问题点数:0、回复次数:50Top

1 楼Kivic(享受·生活)回复于 2002-07-21 19:54:55 得分 0

我一般用ADO控件+SQL语言Top

2 楼waterweed(小王)回复于 2002-07-21 19:59:41 得分 0

能详细点说么,给个例子  
  那些数目不确定的输入框如何实现的?Top

3 楼daehappy(追求120%结贴)回复于 2002-07-21 20:30:41 得分 0

up!gz!Top

4 楼tomhuang(春城)回复于 2002-07-21 20:49:07 得分 0

在界面上放上所有字段,根据情况改变其可视属性就可以了Top

5 楼waterweed(小王)回复于 2002-07-21 21:08:12 得分 0

问题中已经说了,有很多字段,一百多吧  
  有时可能要全部输入,有时可能只输入一两个而已  
   
  如果全部摆在界面,显然很不方便  
   
  依然感谢你的建议  
   
  继续讨论好么  
  Top

6 楼zpf88_66(zpf88_66)回复于 2002-07-21 21:45:21 得分 0

用ADO   与字段变量选择Top

7 楼zpf88_66(zpf88_66)回复于 2002-07-21 21:46:03 得分 0

用ADO   与字段变量选择Top

8 楼waterweed(小王)回复于 2002-07-21 22:01:27 得分 0

大家能详细说说么  
   
  我想知道具体的方法Top

9 楼dolphin11(放心去飞)回复于 2002-07-21 22:06:45 得分 0

用带滚动条做容器或者用WIZARD(向导)把这么多的东西分解一下,毕竟一百多个  
  输入框实在是不少啊!Top

10 楼zyb_8022(紫光)回复于 2002-07-21 22:33:51 得分 0

用分页控件Top

11 楼fuxc(Michael(继续迷茫))回复于 2002-07-21 22:45:22 得分 0

用控件数组,先控制visible,然后用循环语句排列位置。Top

12 楼waterweed(小王)回复于 2002-07-22 09:28:11 得分 0

考虑过控件数组,但一百多个放上去很难排列不说,而且容易内存溢出  
   
  我考虑了一晚,想用个什么网格控件实现,但界面不好看  
   
  欢迎继续讨论Top

13 楼matboy()回复于 2002-07-22 09:38:36 得分 0

还是用网格控件吧,你要做的是:根据前面选择的列,动态生成网格控件的列,然后使用文本框覆盖单元格输入的方式,保存时一一对应就行了,用的资源也不多。  
  如果每次只输入一条记录就保存,那么你可以将字段作为行头,只需两列就可以了,这样可能会好看点。Top

14 楼remanwang(玩玩儿)回复于 2002-07-22 09:46:00 得分 0

用tab控件,把最常用的控件放在第一页Top

15 楼waterweed(小王)回复于 2002-07-22 09:51:48 得分 0

如何动态生成网格控件的列?  
  如何用文本框文本框覆盖单元格?  
  说说好么?Top

16 楼phoenixlin(phoenix)回复于 2002-07-22 09:54:01 得分 0

用SSTab控件吧,让用户一页一页的输入,就好像向导一样。Top

17 楼matboy()回复于 2002-07-22 10:15:51 得分 0

1.根据前面的选择程序,得到需要输入的所有字段名(数据库用)和字段解释(显示用),最好存在一个二维数组里  
  2。将字段解释作为网格控件的行或列显示,通过1。中的数组与字段一一对应  
  3。输入。这里有个区别,如果你用的是MSFLEXGRID或MSHFLEXGRID控件,由于它们不支持直接输入,你只有用文本框覆盖某个单元格,然后将文本框的内容赋给这个单元格。如果你用的是VSFLEXGRID(MSHFLEXGRID的商用版本),那么它支持直接输入,不过操作我认为还是别扭。  
  4。保存。没说的,根据1。中的数组,一一对应起来,更新数据库就可以了。  
  5。用文本框覆盖单元格:  
          txtEdit.Visible   =   False  
           
          txtEdit.Top   =   MSH.CellTop   +   MSH.Top  
          txtEdit.Left   =   MSH.CellLeft   +   MSH.Left  
          txtEdit.Height   =   MSH.CellHeight  
          txtEdit.Width   =   MSH.CellWidth  
   
            txtEdit.Visible=True  
  Top

18 楼matboy()回复于 2002-07-22 10:21:43 得分 0

1.根据前面的选择程序,得到需要输入的所有字段名(数据库用)和字段解释(显示用),最好存在一个二维数组里  
  2。将字段解释作为网格控件的行或列显示,通过1。中的数组与字段一一对应  
  3。输入。这里有个区别,如果你用的是MSFLEXGRID或MSHFLEXGRID控件,由于它们不支持直接输入,你只有用文本框覆盖某个单元格,然后将文本框的内容赋给这个单元格。如果你用的是VSFLEXGRID(MSHFLEXGRID的商用版本),那么它支持直接输入,不过操作我认为还是别扭。  
  4。保存。没说的,根据1。中的数组,一一对应起来,更新数据库就可以了。  
  5。用文本框覆盖单元格:  
          txtEdit.Visible   =   False  
           
          txtEdit.Top   =   MSH.CellTop   +   MSH.Top  
          txtEdit.Left   =   MSH.CellLeft   +   MSH.Left  
          txtEdit.Height   =   MSH.CellHeight  
          txtEdit.Width   =   MSH.CellWidth  
   
            txtEdit.Visible=TrueTop

19 楼waterweed(小王)回复于 2002-07-22 10:37:46 得分 0

但要输入的单元格是第二列,而且数目不定  
  那要设置几个文本框,并实现相映的存储操作呢?Top

20 楼matboy()回复于 2002-07-22 11:04:38 得分 0

跟那列没有关系,数目不定也没关系,只要一个文本框就行,每次单击或双击单元格,用我写的那几行代码控制文本框的移动,至于你在什么事件中赋值就看你自己的意愿了Top

21 楼waterweed(小王)回复于 2002-07-22 11:12:37 得分 0

那输入的值如何立即在输入界面上显示,修改方便么?Top

22 楼waterweed(小王)回复于 2002-07-22 11:18:12 得分 0

我的qq是9062940,可以联系么?Top

23 楼littleM(小狮子)回复于 2002-07-22 11:26:27 得分 0

你的textbox也设置为控件数组,根据列数来决定其个数,应该可以的。  
  我们也是这么做的。FLEXGRID+贴TEXTBOXTop

24 楼jo_yoko(不会飞的大鸟)回复于 2002-07-22 11:27:09 得分 0

我还是建议你用控件数组,但并不是一开始就把所有的控件全都放在form上,而是在程序中动态的生成,  
  比如说你在设计时只在form上放置一个text,但要求必须做成控件数组,然后在程序中根据你的需要动态的添加或者删除,当然也可以随你意思来摆放了,你要select几个字段就生成几个,不要的话还可以删除,这样的话,对内存的消耗也不很严重Top

25 楼waterweed(小王)回复于 2002-07-22 11:44:18 得分 0

请问具体的实现方法?如果有一百多个的话,界面很难控制,并且会内存溢出的。如果以文本框在flexgrid上输入,如何实现立刻显示以及修改?Top

26 楼chi_ke(萧水寒)回复于 2002-07-22 11:46:14 得分 0

用分类和滚动条实现吧!!  
  少的时候不显示滚动条,多得时候用滚动条,而且窗体的大小不用太大!Top

27 楼Summertime()回复于 2002-07-22 11:52:20 得分 0

一个数据库有100多个字段恐怕不好管理吧,先把数据库做三级规范化。  
   
  Top

28 楼xfei(zzz^^^)回复于 2002-07-22 12:14:26 得分 0

用过delphi吗?delphi的IDE的property窗口就很好。VB好像也有啊。有的控件只有几项,有的可以有上百项啊!Top

29 楼beesoft(男人简单就好)回复于 2002-07-22 12:14:26 得分 0

如果是100多个控件,用控件数组,我不能输入的Enabled属性该为false  
  应该比隐含控件美观,用表格太麻烦Top

30 楼beesoft(男人简单就好)回复于 2002-07-22 12:17:19 得分 0

如果是100多个控件,用控件数组,把不能输入控件的Enabled属性该为false  
  应该比隐含控件美观,用表格太麻烦Top

31 楼beesoft(男人简单就好)回复于 2002-07-22 12:19:02 得分 0

如果是100多个控件,用控件数组,把不能输入控件的Enabled属性该为false  
  应该比隐含控件美观,用表格太麻烦Top

32 楼shortkey()回复于 2002-07-22 12:23:34 得分 0

使用控件数组,然后使用Load函数动态的添加新的控件。另外,如果控件不能在一个窗体里显示,试试用滚动条滚动窗口的客户区。在删除控件数组的每个对象时,使用Unload函数。Top

33 楼matboy()回复于 2002-07-22 12:31:31 得分 0

显示修改很简单,MSFLEXRID1。TEXTMATRIX(MSFLEXGRID1。ROW,MSFLEXGRID1。COL)=TEXT1。TEXT,你电击其他单元格,使的文本框离开当前单元格,修改就可以看到了。  
  在哪个事件中实现就随便了,看你的意思。我一般在text1_change事件中使用Top

34 楼matboy()回复于 2002-07-22 12:36:10 得分 0

不明白为什么大家喜欢用控件数组?按老王所说,几个到100多个字段,如果用控件数组,放在界面上,还要加滚动条,还要控制显示和隐藏,真的不如用FLEXGRID好了,省事的多。Top

35 楼ychxl(yc)回复于 2002-07-22 13:46:22 得分 0

用控件数组做的话可以更美观,因为可以自由控制位置;如果用FLEXGRID+TEXTBOX正如上面所说会方便一些,但可能会使界面太宽或太长。Top

36 楼MXHCXY()回复于 2002-07-22 13:59:43 得分 0

把数据库分成多个表,便于管理,界面用sstab控件,我就是这么做的。Top

37 楼limengchen(LMC)回复于 2002-07-22 14:37:37 得分 0

用一个listbox或combo来放字段的名称,然后再一个文本框来输入字段的值。  
  Top

38 楼limengchen(LMC)回复于 2002-07-22 14:39:40 得分 0

用一个listbox或combo来放字段的名称,再用一个textbox来输入字段的值。  
  Top

39 楼willzhang(潜龙有悔)回复于 2002-07-22 16:27:18 得分 0

Matboy的方法就不错啊  
  我曾经用过类似的方法,你也可以在类中写一个根据需要自动填充Flexgrid的函数以备随时调用。因为有滚动条控制,所以也不存在界面太宽或太长的问题。Top

40 楼skyweave()回复于 2002-07-22 16:37:31 得分 0

你的数据库设计有问题,一张表有100多个字段太夸张了吧。  
   
  FlexGrid+TextBox   是个解决方法。Top

41 楼waterweed(小王)回复于 2002-07-22 19:49:30 得分 0

还有新的建议么?  
   
  用datagrid如何,是可以在上面直接输入的Top

42 楼pasl(阿龙1)回复于 2002-07-22 23:10:47 得分 0

你可以使用ListView+TextBox试一试,同时定义一个数组用于存贮字段类型和数据规则Top

43 楼qiuzhongshu(不长毛的猪)回复于 2002-07-23 01:25:36 得分 0

我想是否可把字段分类分页输入那种  
  然后在每一页用控件数组如TEXTBOX动态生成,就是说还轮不到输入的那一部分字段就先不要他,要时再生成,Top

44 楼w_lion(狮子)回复于 2002-07-23 09:43:55 得分 0

用grid,编程插入需要的列Top

45 楼jz1204(皮特)回复于 2002-07-23 10:18:48 得分 0

一个原则,不要想把界面做的太灵活.这样会出问题!Top

46 楼cz716(一蓑烟雨任平生)回复于 2002-07-23 12:05:10 得分 0

我也觉得要先对数据库进行优化,分解  
  你可以用动态控件数组试一试Top

47 楼cz716(一蓑烟雨任平生)回复于 2002-07-23 12:05:34 得分 0

我也觉得要先对数据库进行优化,分解  
  你可以用动态控件数组试一试Top

48 楼sdsthgt(老菜)回复于 2002-07-23 13:13:38 得分 0

亿毫Top

49 楼dgz01(打工者)回复于 2002-07-23 14:24:20 得分 0

用B/S结构来做,在ASP里面控制录入项太方便了  
   
  *****  
  打工好辛苦  
  *****  
  钞票好难赚  
  *****  
  编程好伤神  
  *****  
  光阴好易混  
  *****  
  Top

50 楼vickler(八零年代)回复于 2002-07-23 14:51:15 得分 0

FLEXGRID+TEXTBOXTop

51 楼jenny00101(小石子)回复于 2002-07-23 15:07:27 得分 0

用一个带复选框的listview控件列出你所要的所有字段名称,用复选框决定你要输入的字段数目。在用动态的textbox控件数组,或者更简单一点用一个textbox顺序输入。Top

52 楼Tan18(阿强)回复于 2002-07-25 16:38:16 得分 0

用页框控件,将字段分类  
  Top

53 楼henryfan1(http://henryfan.cnblogs.com)回复于 2002-07-25 19:00:58 得分 0

一百个字段??  
  你的数据库设计有问题吧?Top

54 楼midstone(不大不小的石头)回复于 2002-07-25 19:57:01 得分 0

SQLWKS>   select   id,name   from    
            2>   (select   name,id   from   dir_hotel   order   by   id   desc)    
            3>   where   rownum<10;  
  (select   name,id   from   dir_hotel   order   by   id   desc)    
                                                                *  
  ORA-00907:   缺少右括号  
   
  能告诉我错在什么地方么?Top

55 楼traveler_qt(刀口)回复于 2002-07-25 21:17:11 得分 0

呵呵,用StringGrid作为通用字段的输入,再查出表的构结,根据不同的数据  
  类型,出现不同的输入控件.用两维数组记录下控件的MaxLength,及Field   Type,再用一个两维数组记录下输入的值  
  再用一个Query新增修改就可以了,用户可输入一个,也可输入全部!  
  StringGrid的Row属性可设为全部的字段数。  
   
  俺刚做过:))  
  界面还不错!Top

56 楼Coolyu0916(燕赤霞)回复于 2002-07-25 21:17:28 得分 0

用spread6的FarPoint控件就可以了  
  Top

57 楼missbo()回复于 2002-07-29 19:06:02 得分 0

怎么了????Top

58 楼jenny00101(小石子)回复于 2002-08-13 13:12:51 得分 0

listview+datagrid(or   flexgrid)  
  用带复选框的listview列出所有字段名,用复选框决定要输入的字段数目,字段1,字段2,字段3...  
  dim   rst   as   new   ADODB.recordset  
  rst.open   "select   字段1,字段2...   from   ..."   ...  
  set   Datagrid.datasource=rst  
  然后再用一个文本框跟踪每个要输入的grid的cell,使其位置尺寸相等,输入需要的字段值.Top

责任编辑: efish 参与评论 查找更多:
相关文章
大侠呀,请问cloudscape数据库有没有cloudscape.db文… 大侠呀,请问cloudscape数据库有没有cloudscape.db文件啊,若有,哪儿有的下???急,在线等待,谢谢
急!!!:怎样解析出<%now()%>中的年份、月份… 急!!!:怎样解析出<%now()%>中的年份、月份、天以及时段?在线等待中……
用c#怎样实现像vs.net 一样的菜单呀,有文字又有图标… 用c#怎样实现像vs.net 一样的菜单呀,有文字又有图标,效果又好看
(CB版搞不定 DELPI版有没有高人指点?) CB程序员… (CB版搞不定 DELPI版有没有高人指点?) CB程序员 请DELPI版inforpower高手指教!!!!!!!!
头疼3天,十万火急!关于serversocket 和clientsocket… 头疼3天,十万火急!关于serversocket 和clientsocket 网络连接问题,在线等待两个小时
samba求救:能访问windows,但是windows不能访问linux samba求救:能访问windows,但是windows不能访问linux
在2000下如何做一个系统盘?我在操作系统版发了一个… 在2000下如何做一个系统盘?我在操作系统版发了一个,可是那里人太少了
有趣的问题,不知道你是否能解决。 有趣的问题,不知道你是否能解决。
谁能告诉我下面这段话的意思? 谁能告诉我下面这段话的意思?
???急,在线等待,谢谢 ???急,在线等待,谢谢
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的ReadyGo.com.cn

分类导航
ReadyGo!技术成就梦想