最后9分,如何将dbedit的内容由程序指定并更新到记录集上.
最后9分,如何将dbedit的内容由程序指定并更新到记录集上. 问题点数:100、回复次数:20Top
1 楼dh9450(荡尽尘埃)回复于 2003-08-03 18:34:20 得分 0
???不明白 你是说把一个表的某一记录的某一字段换成EDIT里的东西 ?Top
2 楼tsyd(天生一对)回复于 2003-08-03 19:00:56 得分 0
dbedit的内容手工输入,数据可以在记录在数据库里。
但是在程序中用dbedit->Edit赋值,数据库记录并未按设想的改变!Top
3 楼dh9450(荡尽尘埃)回复于 2003-08-03 19:20:03 得分 0
post;Top
4 楼downsource(www.downsource.net)回复于 2003-08-03 20:26:50 得分 0
好吧!是我说的不大清楚.关于Dbedit的问题.
首先说明的是直接写sql语句插入的程序我会写.但种种原因,我觉得采用控件控制比较合适.所以请不要在本帖讨论直接写sql语句插入的问题.
sql server数据库的一个表(Table1),有三个字段(Field1,Field2,Field3),
我在程序设计窗体上放一个ADOQuery,DataSource,dbnavigator,两个dbedit.两个DbEdit对应Field1,Field2
大家知道
点击dbnavigator的填加按钮时,当在dbedit1,dbedit2里面输入数据,按dbedit的保存按钮后.输入的dbedit1,dbedit2的内容就保存在相应的表的字段中.
问题是:
在上面的过程中,如何同时让相应记录的Field3字段插入不需要用户输入的指定的内容(比如,当前系统日期)?
我的做法是:
在窗体上放另一个隐藏的dbedit3,对应Field3,因为是添加,所以在ADOQuery的afterscoll事件里面判断当前记录的field3是否为空,若是空,则将dbedit3的text赋值.
但结果是,点击dbnavigater的保存按钮后,Field3的内容依然为空.
(大家帮看看怎么回事?我不信没有人用过这种方式!)
在论坛里,会看到有人说什么dbedit等数据感知控件不好用,但我认为,没有好不好用,只是会不会用的问题.如果会用,对于大量同类的数据库程序,在控件基础上操作将远比自己写代码实现节省大量的资源.Top
5 楼Henu(守护进程)回复于 2003-08-03 21:25:02 得分 0
DBEdit 对应的有DataSource和DataField
你所用的DBnaviGater 当你浏览数据时对应的你要隐藏的 DBEidt中的数据要改变的
如你要求如果你想插入当前时间你可以赋值给DBEdit3
DBEdit3.text:=DateToStr(Now);
当你要插入数据时必须最后Post;
Top
6 楼downsource(www.downsource.net)回复于 2003-08-03 23:24:13 得分 0
呵呵,说到post,但是dbedit1,dbedit2却没有直接调用post啊!
另外,如果post可以解决问题,那么是怎么用,用在哪里呢?
Top
7 楼downsource(www.downsource.net)回复于 2003-08-04 09:23:23 得分 0
难道就没有人用过这种方法?
Top
8 楼downsource(www.downsource.net)回复于 2003-08-04 12:46:08 得分 0
100分只给解决问题的人。
Top
9 楼IORILI(眼镜)回复于 2003-08-04 13:37:54 得分 30
dbedit3.SetFocus;
adotable1.Edit ;
dbedit3.Text :='dfdfdfdbbbb';
DBNavigator1.SetFocus ;Top
10 楼IORILI(眼镜)回复于 2003-08-04 13:38:36 得分 0
这下是不是解决问题了???Top
11 楼IORILI(眼镜)回复于 2003-08-04 13:44:40 得分 0
对了 这段代码应写在 adotablebeforepost事件里。Top
12 楼zhangheaaa(无相)回复于 2003-08-04 13:57:37 得分 40
我也认为给dbedit3.text赋值的程序,不应该写在afterscroll()中,
应该写在beforepost()中,
而且不必用一个隐藏的dbedit,
可以直接在adoquery的beforepost()事件中写入:
adoquery.fields[2].value:=指定值;
可以实现同样功能。Top
13 楼li_yan_woods(彦)回复于 2003-08-04 15:36:16 得分 0
你可以这样子实现:
在adoquery的beforepost中写:
adoquery.fields[2].values:='dfdf';
adoquery.post;
基本同意 zhangheaaa(竹) 的意见,这样子肯定能够实现你想做的Top
14 楼geyobing(大地精灵)回复于 2003-08-04 16:15:09 得分 30
你可以在beforepost事件里写如代码,
adoquery.edit;
adoquery.fieldbyname('你的Dbedit3对应的字段名').asstring := '你要的值';
Top
15 楼yhzxf(木头)回复于 2003-08-04 17:37:19 得分 0
你的Field3对应的DBedit是不是没有与Datasource连接?Top
16 楼downsource(www.downsource.net)回复于 2003-08-04 18:24:54 得分 0
谢谢大家。
晚上我回家看看,通过一定给分。Top
17 楼downsource(www.downsource.net)回复于 2003-08-04 18:31:14 得分 0
不过,我想:
在adoquery的beforepost中写:
adoquery.fields[2].values:='dfdf';
adoquery.post;
基本同意 zhangheaaa(竹) 的意见,这样子肯定能够实现你想做的
的解决方法,会造成死循环。
Top
18 楼downsource(www.downsource.net)回复于 2003-08-04 18:32:37 得分 0
确认Field3对应的DBedit有与Datasource连接.
不管怎么说,还是等晚上回家测试后在看结果吧!
请大家继续关注.
Top
19 楼tsyd(天生一对)回复于 2003-08-04 22:05:06 得分 0
给楼主机会说话!Top
20 楼downsource(www.downsource.net)回复于 2003-08-04 22:37:47 得分 0
楼上的我刚才测试了一下,很不幸,一个都没成功.
geyobing(银翼天使) 的
在beforepost事件里写如代码,
adoquery.edit;
adoquery.fieldbyname('你的Dbedit3对应的字段名').asstring := '你要的值';
和
li_yan_woods(彦)
在adoquery的beforepost中写:
adoquery.fields[2].values:='dfdf';
adoquery.post;
的解决方法
导致的后果是一样的,afterpost事件都没触发(程序中我让afterpost事件触发时显示相应信息,结果使用上面两种方法,都没显示信息),这说明post根本无法执行.
IORILI(沒落的阿咎) 的
在adoquery的beforepost中写
dbedit3.SetFocus;
adotable1.Edit ;
dbedit3.Text :='dfdfdfdbbbb';
DBNavigator1.SetFocus ;
倒是可以执行,但field3的数据仍然没有插入。
我都快崩溃了,怎么回事?呵呵。您不要急。
后来我发现,我测试的字段3在sql server中设置的是自增型的,换个一般的测试后。
发现geyobing(银翼天使) 的和IORILI(沒落的阿咎) 的方法可以了!
而
zhangheaaa(竹) ( ) 信誉:100 2003-08-04 13:57:00 得分:0
我也认为给dbedit3.text赋值的程序,不应该写在afterscroll()中,
应该写在beforepost()中,
而且不必用一个隐藏的dbedit,
可以直接在adoquery的beforepost()事件中写入:
adoquery.fields[2].value:=指定值;
可以实现同样功能。
的解决方法是最简单的。Edit也不必用的。
谢谢大家。麻烦大家了。
关于“自增加字段”,我的处理方法是修改库表结构,不使用自增加,在程序中进行字段的增加的控制。
再次谢谢大家。
顺便请大家有空到我的网站www.downsource.net看看!
Top




