Office中国论坛/Access中国论坛

标题: 请问表如何同时多列清零 [打印本页]

作者: leejiner    时间: 2012-6-21 16:51
标题: 请问表如何同时多列清零
[attach]49446[/attach][attach]49445[/attach]
如题



作者: todaynew    时间: 2012-6-21 17:23
docmd.runsql "update 表1 set 品种1=0,品种2=0,品种3=0,品种4=0"
作者: leejiner    时间: 2012-6-21 18:23
谢谢!我的意思没有表达清楚:
我是需要将所有为‘0’的数据全部清除。
作者: Henry D. Sy    时间: 2012-6-21 21:02
是不是这个意思
  1. Private Sub Command0_Click()
  2.   Dim rs As New ADODB.Recordset
  3.   Dim i As Integer
  4.   rs.Open "表1", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  5.   Do While Not rs.EOF
  6.     For i = 0 To rs.Fields.Count - 1
  7.         If rs.Fields(i) = 0 Then
  8.            rs.Fields(i) = Null
  9.            rs.Update
  10.         End If
  11.     Next
  12.     rs.MoveNext
  13.   Loop
  14.   DoCmd.OpenTable "表1", acViewNormal
  15.   rs.Close
  16.   Set rs = Nothing
  17. End Sub
复制代码
[attach]49448[/attach]
作者: leejiner    时间: 2012-6-21 22:07
出现了‘无效的SQL语句;期待。。。’
我是菜鸟,请问如何加这句SQL?谢谢!
作者: layaman_999    时间: 2012-6-22 08:55
docmd.runsql "delete * from 表1 where 品种1=0 or 品种2=0 or 品种3=0 or 品种4=0"
以上语句只要其中一列为0,则删除那条记录
作者: Henry D. Sy    时间: 2012-6-22 09:31
leejiner 发表于 2012-6-21 22:07
出现了‘无效的SQL语句;期待。。。’
我是菜鸟,请问如何加这句SQL?谢谢!

runsql只能是操作查询!
作者: leejiner    时间: 2012-6-22 10:02
我指的是这段代码:

Private Sub Command0_Click()
  Dim rs As New ADODB.Recordset
  Dim i As Integer
  rs.Open "表1", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  Do While Not rs.EOF
    For i = 0 To rs.Fields.Count - 1
        If rs.Fields(i) = 0 Then
           rs.Fields(i) = Null
           rs.Update
        End If
    Next
    rs.MoveNext
  Loop
  DoCmd.OpenTable "表1", acViewNormal
  rs.Close
  Set rs = Nothing
End Sub

作者: leejiner    时间: 2012-6-22 10:19
结果要求如图

[attach]49454[/attach][attach]49455[/attach]
作者: Henry D. Sy    时间: 2012-6-22 10:44
leejiner 发表于 2012-6-22 10:19
结果要求如图

4楼的代码就是这个结果的呀
作者: Henry D. Sy    时间: 2012-6-22 10:46
leejiner 发表于 2012-6-22 10:02
我指的是这段代码:

Private Sub Command0_Click()

这段代码中,哪里来的sql语句??你是不是搞错了。
作者: layaman_999    时间: 2012-6-22 10:52
update 表1 set 品种1=null where 品种1=0;
update 表1 set 品种2=null where 品种2=0;
update 表1 set 品种3=null where 品种3=0;
update 表1 set 品种4=null where 品种4=0;
分成4个更新查询,用宏或者代码调用
作者: leejiner    时间: 2012-6-22 11:44
本帖最后由 leejiner 于 2012-6-22 11:53 编辑

4楼的代码
请问从何加这句?谢谢!
作者: leejiner    时间: 2012-6-22 11:55
本帖最后由 leejiner 于 2012-6-22 11:57 编辑
layaman_999 发表于 2012-6-22 10:52
update 表1 set 品种1=null where 品种1=0;
update 表1 set 品种2=null where 品种2=0;
update 表1 set 品 ...


这是否就是4个查询?我有200多个品种啊
中意Hennry的方法。
作者: Henry D. Sy    时间: 2012-6-22 11:56
leejiner 发表于 2012-6-22 11:44
4楼的代码
请问从何加这句?谢谢!

不是整个附件都给你了吗
作者: leejiner    时间: 2012-6-22 11:59
Henry D. Sy 发表于 2012-6-22 11:56
不是整个附件都给你了吗

不要怪我蠢,我真是菜鸟。附件如何加到数据库里面?
谢谢啦!
作者: Henry D. Sy    时间: 2012-6-22 12:13
在库中--新建窗体一个--在窗体中添加一个按钮--将代码复制到该按钮下--然后保存--窗体视图-单击按钮-查看结果
作者: layaman_999    时间: 2012-6-22 14:59
leejiner 发表于 2012-6-22 11:55
这是否就是4个查询?我有200多个品种啊
中意Hennry的方法。

拆列为行吧,这样就算有2000个品种也不在话下哈
[attach]49463[/attach]


作者: leejiner    时间: 2012-6-22 16:16
layaman_999 发表于 2012-6-22 14:59
拆列为行吧,这样就算有2000个品种也不在话下哈

谢谢指导,学到一个新方法。
可是还是不行啊:我的表内容是股票数据,每年有百个财务指标和2000多个股票,它没有的数据都用零来替代,影响到计算,由此想要一个快速除0的方法。
这种方法应不适合解决问题。
作者: leejiner    时间: 2012-6-22 16:19
Henry D. Sy 发表于 2012-6-22 12:13
在库中--新建窗体一个--在窗体中添加一个按钮--将代码复制到该按钮下--然后保存--窗体视图-单击按钮-查看结 ...

谢谢!
按要求做了一遍,还是不行。附上截图,请帮我看看问题在哪?

[attach]49466[/attach]
作者: layaman_999    时间: 2012-6-22 16:21
表字段:品种1,品种2........
将这些字段默认值设置为空吧
作者: Henry D. Sy    时间: 2012-6-22 16:22
要把代码放在你的命令0_Click下面
作者: leejiner    时间: 2012-6-22 17:38
Henry D. Sy 发表于 2012-6-22 16:22
要把代码放在你的命令0_Click下面

解决问题了!
感谢各位不辞辛劳,指点一个笨学生!
作者: todaynew    时间: 2012-6-26 13:38
leejiner 发表于 2012-6-21 18:23
谢谢!我的意思没有表达清楚:
我是需要将所有为‘0’的数据全部清除。

如果只是为了显示的数据美观,只需:
select a.名称,iif(a.品种1=0,null,a.品种1) as 品种1,iif(a.品种2=0,null,a.品种2) as 品种2,iif(a.品种3=0,null,a.品种3) as 品种3,iif(a.品种4=0,null,a.品种4) as 品种4 from 表1 as a

如果确需更改数据,则需:
docmd.runsql "update 表1 set 品种1=iif(品种1=0,null,品种1),品种2=iif(品种2=0,null,品种2),品种3=iif(品种3=0,null,品种3),品种4=iif(品种4=0,null,品种4)"
作者: leejiner    时间: 2012-6-27 11:41
todaynew 发表于 2012-6-26 13:38
如果只是为了显示的数据美观,只需:
select a.名称,iif(a.品种1=0,null,a.品种1) as 品种1,iif(a.品种2 ...

谢谢!这是我原来的思路,可惜搞不出来。
作者: leejiner    时间: 2012-6-30 16:31
Henry D. Sy 发表于 2012-6-21 21:02
是不是这个意思

Henry版主:
请问相反的,现需要在为Null 的单元格里自动加上数值 ‘0’,请问应该如何做?
谢谢!
(Ps.我想当然在你原来的代码将 0 和 Null 互换,代码不能通过,只好再劳烦你大驾了!)
作者: Henry D. Sy    时间: 2012-6-30 16:54
leejiner 发表于 2012-6-30 16:31
Henry版主:
请问相反的,现需要在为Null 的单元格里自动加上数值 ‘0’,请问应该如何做?
谢谢!

Private Sub Command0_Click()
  Dim rs As New ADODB.Recordset
  Dim i As Integer
  rs.Open "表1", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  Do While Not rs.EOF
    For i = 0 To rs.Fields.Count - 1
        If IsNull(rs.Fields(i)) Then
           rs.Fields(i) = 0
           rs.Update
        End If
    Next
    rs.MoveNext
  Loop
  DoCmd.OpenTable "表1", acViewNormal
  rs.Close
  Set rs = Nothing
End Sub

作者: leejiner    时间: 2012-6-30 17:10
Henry D. Sy 发表于 2012-6-30 16:54
Private Sub Command0_Click()
  Dim rs As New ADODB.Recordset
  Dim i As Integer

谢谢!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3