主题:表单数据的保存问题
sdn193551
[专家分:10] 发布于 2010-02-15 10:09:00
[size=4]假定表单上的表GRID的数据源为ab.dbf,对表GRID的字段进行了编辑处理(如赋值、计算、修改....),我发现有一些计算能够反映(保存)在数据源ab表上,有些则没有。我希望对表的处理能反映(保存)到数据源ab表上,请教各位老师应该怎么做?如果做一个保存命令按钮,哪代码如何?[/size]
最后更新于:2010-02-17 16:40:00
回复列表 (共17个回复)
沙发
kosung [专家分:910] 发布于 2010-02-17 13:38:00
一般来说变化的结果会直接反应出来,不需要特别的处理。但这样的方法在实用中不值得提倡,因为这样做程序对数据没有了控制,只能由用户来控制。表单上的表(应该是GRID吧,如果用BROW的话应该不存在这个问题了。)只用来作回显,录入用TEXT、LABEL等控件完成,加个保存等命令对各字段进行更新。
板凳
sdn193551 [专家分:10] 发布于 2010-02-17 20:37:00
kosung老师:新年好!多谢回复指教!
我可能没有说明白。举一个例子吧,假设ab.dbf表如下:
日 期 材料名称 型号 直径 长度 入库支数 单价 入库金额
09-01-10 圆棒 KTS3 10 330 100
09-02-12 圆棒 KTS4 8 100 50
表右边的两个字段单价、入库金额是通过计算得到的,单价是与型号、直径、长度有函数关系;入库金额等于入库支数 乘 单价。其他字段都是手工填写。表单的GRID表结构与数据源表ab相同。字段的计算可以在表单上通过表达式或函数代码或事件或方法来完成。这是一个简单的表,复杂的表可能有许多字段需要计算。我发现有一些计算能够反映(保存)在数据源ab表上,有些则没有。
我的问题是,在表单GRID上对字段所作的计算,如何能够正确的反映(保存)到源表ab上 ?或者将GRID的内容保存到另一个表中?
请指教。
3 楼
wzxc [专家分:9440] 发布于 2010-02-17 20:43:00
每个计算过程完后:
thisform.grid1.refresh
4 楼
sdn193551 [专家分:10] 发布于 2010-02-19 19:32:00
3楼wzxc老师:谢谢你的回复!
此方法效果如何,我试一试再说。
我想请教的是,如何将GRID的内容保存到另一个表中?
5 楼
wzxc [专家分:9440] 发布于 2010-02-19 20:42:00
grid是控件,与数据源绑定后显示表的内容。
表与表之间的数据交换复制等等操作有:
1、copy to
2、select * from table into table xxxx
以上这两句结果差不多,都是生成另一个自由表。
3、append from
这个是把另一表追加到当前表。
具体的子句参考帮助文档或相关书籍,都有详细的讲解。
6 楼
sdn193551 [专家分:10] 发布于 2010-02-22 15:39:00
wzxc老师:谢谢你的回复!
[quote]grid是控件,与数据源绑定后显示表的内容。
表与表之间的数据交换复制等等操作有:
1、copy to
2、select * from table into table xxxx
以上这两句结果差不多,都是生成另一个自由表。
3、append from
这个是把另一表追加到当前表。
具体的子句参考帮助文档或相关书籍,都有详细的讲解。
[/quote]
你指出的三条命令都是对.dbf表操作的,对控件grid上的数据如何保存到另一个表中?控件grid上的表,可以和数据源表完全相同,也可以不同,因为可以在grid上增加或删除一些字段。因此将GRID的内容保存到另一个表中有其实用意义。请老师研究一下!
7 楼
wzxc [专家分:9440] 发布于 2010-02-22 17:16:00
Local i,lcI,lcFields,lcTableName
lcFields=''
lcTableName=Thisform.Grid1.RecordSource
For i =1 To Thisform.Grid1.ColumnCount
lcI=Alltrim(Str(i))
lcFields=lcFields+Thisform.Grid1.Column&lcI..ControlSource+','
Endfor
lcFields=Substr(lcFields,1,Len(lcFields)-1)
Select (lcTableName)
Copy To zzzzzzzzzz Fields &lcFields
8 楼
sdn193551 [专家分:10] 发布于 2010-02-23 10:21:00
[quote]Local i,lcI,lcFields,lcTableName
lcFields=''
lcTableName=Thisform.Grid1.RecordSource
For i =1 To Thisform.Grid1.ColumnCount
lcI=Alltrim(Str(i))
lcFields=lcFields+Thisform.Grid1.Column&lcI..ControlSource+','
Endfor
lcFields=Substr(lcFields,1,Len(lcFields)-1)
Select (lcTableName)
Copy To zzzzzzzzzz Fields &lcFields
[/quote]
[size=4]wzxc老师:谢谢你的回复!
我对上面的代码没有看得很清楚,请你讲解一下总的思路,并且对每条语句做一些注释。
老是麻烦你,太感谢了!
[/size]
9 楼
wzxc [专家分:9440] 发布于 2010-02-23 11:25:00
你不是要将表格里的字段复制到一新表吗?
就是将表格各列的字段名提取出来,存一变量里。然后再copy这些字段到新表。
Local i,lcI,lcFields,lcTableName &&定义本地变量
lcFields='' &&赋空串
lcTableName=Thisform.Grid1.RecordSource &&将表格的数据源赋给变量
For i =1 To Thisform.Grid1.ColumnCount &&&for循环,终值表格列数
lcI=Alltrim(Str(i)) &&将循环值转为字符型,为了下一句宏替换
lcFields=lcFields+Thisform.Grid1.Column&lcI..ControlSource+',' &&将每一列的绑定的字段赋给变量
Endfor
lcFields=Substr(lcFields,1,Len(lcFields)-1) &&去掉最后一个逗号
Select (lcTableName) &&定位表
Copy To zzzzzzzzzz Fields &lcFields &&按字段列表复制到一新表zzzzzzzzzz。
注:假设你的表格各列字段是:a,b,c,d,e,f,g,则变量lcFields值就是'a,b,c,d,e,f,g'。
10 楼
sdn193551 [专家分:10] 发布于 2010-02-23 16:38:00
wzxc老师:谢谢你的回复!
让我消化消化、试验一下再请教!
多谢了!
我来回复