设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 2414|回复: 10
打印 上一主题 下一主题

[其它] [实在弄不懂了,求高手安慰]关于Insert into select报错。

[复制链接]
跳转到指定楼层
1#
发表于 2012-1-20 01:17:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
代码很短,如下:
  1. Private Sub Form_Load()
  2. Dim strtime As String
  3. Dim tbl As DAO.TableDef
  4. For Each tbl In CurrentDb.TableDefs
  5.     If Left(tbl.Name, 2) = "行情" Then
  6.         strtime = Right(tbl.Name, 8)
  7.         If IsNull(DLookup("时间", "指数表", "时间='" & strtime & "'")) Then
  8.             DoCmd.SetWarnings False
  9.             DoCmd.RunSQL "insert into 指数表(时间,深主,沪市) select '" & strtime & "',(select sum(最新*A股)/333048.163 from " & tbl.Name & " where 类别 = 'SZ') ,(select sum(最新*A股)/333048.163 from " & tbl.Name & " where 类别 = 'SH')"
  10.         End If
  11.     End If
  12. Next
  13. Me.ChildShow.Form.RecordSource = "指数表"
  14. End Sub
复制代码
报错如下:

程序如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2012-1-20 09:56:56 | 只看该作者
  1. Private Sub Form_Load()
  2.     Dim sSQL As String
  3.     Dim dblSZ As Double
  4.     Dim dblHS As Double
  5.     Dim strtime As String
  6.     Dim tbl As DAO.TableDef
  7.     For Each tbl In CurrentDb.TableDefs
  8.         If Left(tbl.Name, 2) = "行情" Then
  9.             dblSZ = Nz(DSum("最新 * A股 / 333048.163", tbl.Name, "类别 = 'SZ'"))
  10.             dblHS = Nz(DSum("最新 * A股 / 333048.163", tbl.Name, "类别 = 'SH'"))
  11.             strtime = Right(tbl.Name, 8)
  12.             If IsNull(DLookup("时间", "指数表", "时间='" & strtime & "'")) Then
  13.                 DoCmd.SetWarnings False
  14.                 sSQL = "insert into 指数表(时间,深主,沪市) values( '" & strtime & "'," & dblSZ & "," & dblHS & ")"
  15.                 CurrentDb.Execute sSQL
  16.             End If
  17.         End If
  18.     Next
  19.     Me.ChildShow.Form.RecordSource = "指数表"
  20. End Sub
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
3#
发表于 2012-1-20 10:01:38 | 只看该作者
DoCmd.SetWarnings False
也可以去掉
4#
 楼主| 发表于 2012-1-20 12:17:45 | 只看该作者
受教了,再询问下,如何加入判断句,如果"最新"为空值,则计算“昨收 * A股”,否则还是计算“最新 * A股”?
5#
发表于 2012-1-20 12:22:02 | 只看该作者
用IIf(expr, truepart, falsepart)函数,可以在sql语句中使用的
6#
发表于 2012-1-20 12:33:11 | 只看该作者
秒弑 发表于 2012-1-20 12:17
受教了,再询问下,如何加入判断句,如果"最新"为空值,则计算“昨收 * A股”,否则还是计算“最新 * A股” ...

建议建立一个查询,在查询里判断。
然后再dsum这个查询。因为你表中不可能最新都为空吧!
7#
发表于 2012-1-20 12:52:41 | 只看该作者
先用查询把数据整理好
  1. Private Sub Form_Load()
  2.     Dim sSQL As String
  3.     Dim dblSZ As Double
  4.     Dim dblHS As Double
  5.     Dim strTime As String
  6.     Dim qdf As DAO.QueryDef
  7.     For Each qdf In CurrentDb.QueryDefs
  8.         If Left(qdf.Name, 1) = "A" Then
  9.             strTime = Right(qdf.Name, 8)
  10.             If IsNull(DLookup("时间", "指数表", "时间='" & strTime & "'")) Then
  11.                 dblSZ = Nz(DSum("深沪", qdf.Name, "类别 = 'SZ'"))
  12.                 dblHS = Nz(DSum("深沪", qdf.Name, "类别 = 'SH'"))
  13.                 sSQL = "insert into 指数表(时间,深主,沪市) values( '" & strTime & "'," & _
  14.                        dblSZ & "," & dblHS & ")"
  15.                 CurrentDb.Execute sSQL
  16.             End If
  17.         End If
  18.     Next
  19.     Me.ChildShow.Form.RecordSource = "指数表"
  20. End Sub
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
8#
 楼主| 发表于 2012-1-20 13:20:10 | 只看该作者
因为行情表是每天都有一张,如果每天导入一张新表,那么都要建立一张查询表,操作性会比较麻烦。
请教H版,如果用VBA代码判断。能否实现?
9#
发表于 2012-1-20 21:26:41 | 只看该作者
秒弑 发表于 2012-1-20 13:20
因为行情表是每天都有一张,如果每天导入一张新表,那么都要建立一张查询表,操作性会比较麻烦。
请教H版, ...
  1. Private Sub Form_Load()
  2.     Dim sSQL As String
  3.     Dim dblSZ As Double
  4.     Dim dblHS As Double
  5.     Dim strTime As String
  6.     Dim tbl As DAO.TableDef
  7.     Dim qdf As DAO.QueryDef
  8.     Set qdf = CurrentDb.QueryDefs("A")
  9.     For Each tbl In CurrentDb.TableDefs
  10.         If Left(tbl.Name, 2) = "行情" Then
  11.             strTime = Right(tbl.Name, 8)
  12.             If IsNull(DLookup("时间", "指数表", "时间='" & strTime & "'")) Then
  13.                 sSQL = _
  14.                 "SELECT 类别, 昨收, 最新, A股, (IIf(IsNull([最新]),[昨收],[最新]))*[A股]/333048.163 AS 深沪 FROM " _
  15.                      & tbl.Name
  16.                 qdf.SQL = sSQL
  17.                 dblSZ = Nz(DSum("深沪", "A", "类别 = 'SZ'"))
  18.                 dblHS = Nz(DSum("深沪", "A", "类别 = 'SH'"))
  19.                 sSQL = "insert into 指数表(时间,深主,沪市) values( '" & strTime & "'," & _
  20.                        dblSZ & "," & dblHS & ")"
  21.                 CurrentDb.Execute sSQL
  22.             End If
  23.         End If
  24.     Next
  25.     Me.ChildShow.Form.RecordSource = "指数表"
  26.     qdf.Close
  27.     Set qdf = Nothing
  28. End Sub
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
10#
 楼主| 发表于 2012-1-21 00:29:38 | 只看该作者
受教了,H版,正是这一句不会写。每次都能跟您学到很多东西。
  1. (IIf(IsNull([最新]),[昨收],[最新]))*[A股]/333048.163 AS 深沪
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-29 04:34 , Processed in 0.116129 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表