问一个数据库输入界面的技巧问题,欢迎大家多多讨论(一定给分)
问一个数据库输入界面的技巧问题,欢迎大家多多讨论(一定给分)
楼主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
-
相关文章
2秒记住本站域名
玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的ReadyGo.com.cn
