设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2107|回复: 8
打印 上一主题 下一主题

[模块/函数] 求助Dmax函数取值错误...

[复制链接]
跳转到指定楼层
1#
发表于 2009-2-8 17:38:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 fnsmydyang 于 2009-2-8 19:41 编辑

请问各位网友这段代码错在哪里?为什么DMAX返回的值有问题(小数点正常,偶数正常,奇数错误)例如:17 返回值为165,应返回16才对.
Private Sub 当日序号_AfterUpdate()
Dim rs As DAO.Recordset
Dim rs1  As DAO.Recordset
Dim i As Integer
Dim j As Integer
Dim t As Variant
Dim a(2)
Set rs = CurrentDb.OpenRecordset("SELECT 材质,厚,宽,长 FROM 订单明细 WHERE 当日序号='" & Me![当日序号] & "'")
If rs.RecordCount <= 0 Then Exit Sub
Me![材质] = rs(0)
a(0) = rs(1)
a(1) = rs(2)
a(2) = rs(3)
For i = 0 To UBound(a) - 1
   For j = n + 1 To UBound(a)
       If a(i) > a(j) Then
       t = a(i): a(i) = a(j): a(j) = t
       End If
   Next j
Next i
Me![规格] = a(0) & "*" & a(1) & "*" & a(2)
Dim temp As Variant
temp = Val(IIf(DLookup("加工方法", "材质", "材质='" & Me![材质] & "'") = "火割", 1, 2))
a(0) = Val(a(0))
Me![实际厚度] = DMax("厚度", "材料厚度表", "类型='" & temp & "' and 厚度<='" & a(0) & "'")
End Sub
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2009-2-8 17:48:52 | 只看该作者
检查数组声明中的下标
Dim a(2)
3#
发表于 2009-2-8 18:00:55 | 只看该作者
问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧

一般来说,都是在VBA中进行单步调试,或者打断点,检查你的 temp  以及 a(0) 的内容是什么。 有关如何进行调试,请参阅 ACCESS 的VBA帮助。

以下摘自 Microsoft Access 2003 Help

跟踪代码的执行

因为先执行哪条语句并不总是很明确的,所以要跟踪代码的执行。可使用下列技巧跟踪代码的执行:

    逐语句跟踪代码的每一行,并逐语句跟踪过程;这样就可查看每个语句对变量的效果。

    逐过程执行每个过程时将它当成单个语句。使用它代替“逐语句”以跳过整个过程调用,而不是进入调用的过程。

    跳出”:像执行单一语句那样执行过程内的所有剩余代码,并且跳到原来调用本过程的过程的下个语句。
  • 运行到光标处”:允许在代码中选定想要中断执行的语句。这样就允许“逐过程”执行代码区段,例如大循环。
要从当前语句跟踪执行,请
  • 在“调试”菜单中选定“逐语句”(F8)、“逐过程”(SHIFT+F8)、“跳出” (CTRL+SHIFT+F8)或“运行到光标处”(CTRL+F8)。
从程序的开头跟踪执行,请
  • 在“调试”菜单中选定“逐语句”(F8)、“逐过程”(SHIFT+F8)、“跳出” (CTRL+SHIFT+F8)或“运行到光标处”(CTRL+F8)。



使用“立即”窗口

立即”窗口显示得自代码中调试语句的信息,或直接键入窗口的命令所生成的信息。
要显示“立即”窗口,请
  • 从“视图”菜单中选定“立即”窗口 (CTRL+G)。

在“立即”窗口中执行代码,请
    1. 在“立即”窗口中键入一行代码。
2. 单击 ENTER 键来执行代码。

使用“立即”窗口可:
    - 检测有问题的或新编写的代码。 当执行应用程序时查询或改变变量的值。当应用程序中断时,将一个您所想的新值指定给程序中的变量。 当执行应用程序时查询或改变属性值。 在代码中调用如您所需的过程
- 当运行应用程序时查看调试的输出。 注意 立即”窗口中语句是在上下文中执行的;也就是说,如同把它们键入到一特定模块之中。

在“立即”窗口执行的时候,如果需要有关函数、语句、属性方法的语法帮助,则可选定关键字、属性名或是方法名称,然后按F1键。



******************
*  一切皆有可能  *
******************

.

.
QQ群 48866293 / 12035577 / 7440532 / 13666209
http://forum.csdn.net/SList/Access .
http://www.accessbbs.cn/bbs/index.php .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
http://www.office-cn.net .
.
http://www.office-cn.net/home/space.php?uid=141646 .
4#
 楼主| 发表于 2009-2-8 19:18:17 | 只看该作者
谢谢各位的指点,调试中没有问题,现上传附件,请指教

本帖子中包含更多资源

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

x
5#
 楼主| 发表于 2009-2-8 19:34:37 | 只看该作者
上传附件了.请各位指教,谢谢...
6#
发表于 2009-2-8 21:34:20 | 只看该作者
本帖最后由 ACMAIN_CHM 于 2009-2-8 21:37 编辑
谢谢各位的指点,调试中没有问题,现上传附件,请指教
34930
fnsmydyang 发表于 2009-2-8 19:18


真希望能确认你真的调试了。!!!要知道逻辑错误是没人能帮你的。除非你写出你的算法说明。

下面是我的调结果


select *
from 材料厚度表
where 类型='2' and 厚度<='15'
order by 厚度 desc



结论。 你的[厚度]是字符型! 字符串 比较
"A" < "B" < "BA"
"1"<"11"<"12"<"1234"<"13"<"145123444"<"15"


******************
*  一切皆有可能  *
******************

.

.
QQ群 48866293 / 12035577 / 7440532 / 13666209
http://forum.csdn.net/SList/Access .
http://www.accessbbs.cn/bbs/index.php .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
http://www.office-cn.net .
.
http://www.office-cn.net/home/space.php?uid=141646 .

本帖子中包含更多资源

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

x
7#
发表于 2009-2-8 21:58:46 | 只看该作者
ACMAIN_CHM 在我之前已指出了你的错之所在。
我也帮你改好了,按说是用不着了,但既然作了就给你吧,要想编程就别粗心。

本帖子中包含更多资源

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

x
8#
 楼主| 发表于 2009-2-8 22:13:24 | 只看该作者
真是好人哪,谢谢ACMAIN_CHM和koutx.
9#
发表于 2009-2-8 22:20:38 | 只看该作者
另外  当日序号 文本框最好改成组合框,这样就不需手工填写了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-6 13:59 , Processed in 0.085017 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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