Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在access中设置时间减法格式时遇到问题,同时保留数据类型_Sql_Vba_Ms Access - Fatal编程技术网

Sql 在access中设置时间减法格式时遇到问题,同时保留数据类型

Sql 在access中设置时间减法格式时遇到问题,同时保留数据类型,sql,vba,ms-access,Sql,Vba,Ms Access,好的,我一直在做Access中的减法运算。至少可以说这是一件痛苦的事情,但是由于表单是如何设置的(有人在我开始工作前几年就设置了它&修复它太耗时了),在表单上触发文本框事件后,我无法通过更新查询更新表中的字段 因此,我可以在VBA中进行计算,并将值放入表单的文本框控件中,以便更新到表中。我在网上搜索了如何减去时间,并以我希望的格式显示…(hh:mm),但是这样做会将最终结果转换为字符串,链接到文本框的表格字段是数字/双精度,因此我得到一个VBA错误:“您输入的值对此字段无效” 我知道这是因为它现

好的,我一直在做Access中的减法运算。至少可以说这是一件痛苦的事情,但是由于表单是如何设置的(有人在我开始工作前几年就设置了它&修复它太耗时了),在表单上触发文本框事件后,我无法通过更新查询更新表中的字段

因此,我可以在VBA中进行计算,并将值放入表单的文本框控件中,以便更新到表中。我在网上搜索了如何减去时间,并以我希望的格式显示…(hh:mm),但是这样做会将最终结果转换为字符串,链接到文本框的表格字段是数字/双精度,因此我得到一个VBA错误:“您输入的值对此字段无效”

我知道这是因为它现在是一个字符串。我需要帮助以我需要的方式进行转换,并保留双精度类型。CDbl(变量)不工作

代码:

    apptTime = DLookup("[Appt Time]", "T_PKMS", "[Load] = """ & loadNum & """")
    ArrvlTime = DLookup("[Arrival Time]", "T_PKMS", "[Load] = """ & loadNum & """")

    hoursPassedSinceAppt = ([Forms]![F_DriverLog].[Time Out].Value - apptTime)
    hoursPassedSinceArrvl = ([Forms]![F_DriverLog].[Time Out].Value - ArrvlTime)

    Me.Text51.Value = Format(hoursPassedSinceAppt, "hh:nn")
    Me.Text53.Value = Format(hoursPassedSinceArrvl, "hh:nn")
我也尝试过:

    Debug.Print CDbl(Format(hoursPassedSinceAppt, "hh:nn"))
    Debug.Print CDbl(Format(hoursPassedSinceArrvl, "hh:nn"))

但是我得到了一个类型不匹配错误。“救命啊,我正在发疯。

显然我盯着代码看得太久了。我删除了“hh:nn”,将冒号改为十进制,并允许cDbl()将其从字符串改为数字

我改变:

Me.Text51.Value = Format(hoursPassedSinceAppt, "hh:nn")
致:


您的文本框是绑定的还是未绑定的?它实际上是将值存储为时间值还是字符串?它绑定到我的表中的一个双类型字段。因此,文本框需要类型为double,但VBA代码正在将其转换为字符串。HoursPassedSinceApp和hoursPassedSinceArrvl是什么数据类型?看起来您正在将它从double转换为string并返回。它们都是double没错,我把它们转换成了一个字符串,以获得我需要的格式(hh:mm),而不是一些18位的十进制数字。但是,因为当我们试图将该变量放回我的文本框以保存在我的表中时,它们是双倍的,所以文本框拒绝了它,因为它是一个字符串。所以我需要将它改回hh:mm格式的双精度类型。我似乎已经弄明白了,见下文。这行不通-5小时59分钟不是5.59小时。我可以建议根本不要使用这种格式吗?因为它们已经是Double数据类型,所以不需要重新格式化它们。如果希望删除日期,则变量仅存储可以执行的时间。Me.Text51.Value=hoursPassedSinceAppt-INT(hoursPassedSinceAppt)@YowE3K我理解你们两人的意思,5小时59分钟不等于5.59分钟,但这是我的雇主要求的格式。我同意这不是显示已用时间的最佳方式,但我只是提供所需的内容。但是,如果“链接到文本框的表格字段是数字/双精度”,则将
5.59
放入表格将放弃所有下游计算,将其视为5小时35.4分钟。确保你的雇主知道这是即将发生的事情。
Me.Text51.Value = CDbl(Format(hoursPassedSinceAppt, "hh.nn"))