在我正在改进的程序中,我注意到Fortran没有检测到文件是否存在。这导致了一个尚未修复的逻辑错误。如果您能指出问题或错误并给我更正,我深表感谢。
SELECT PAGE, COUNT( * ) AS poso,
(SUM(DATE(TIMESTAMP) = CURDATE()) -
SUM(DATE(TIMESTAMP) = DATE_SUB(CURDATE( ), INTERVAL 1
DAY))
) diff
FROM `behaviour`
WHERE DATE( TIMESTAMP ) >= DATE_SUB( CURDATE( ) , INTERVAL 1
DAY )
GROUP BY PAGE;
答案 0 :(得分:2)
这里有两个不同的问题。让我们分别看看它们。
首先,考虑
net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.7 expression not in aggregate or
GROUP BY columns: GROUPBY.TOTALFEET
评论表明open(unit=nhist,file=history,iostat=ierr)
始终设置为零。那么,为什么不应该将其设置为零?如果出现错误,ierr
应为非零,但文件是否存在错误?
不一定。如果没有ierr
说明符,则会采用默认status=
。如果文件不存在,编译器不必(并且不太可能)在这种情况下将打开视为错误。它可能会在写入时根据需要创建它,或者在尝试阅读时抱怨。
将status='unknown'
添加到status='old'
语句是通常的说法"文件应该存在"。
其次,考虑
open
如果此处出现错误,执行将转移到标有 open(unit=nhist,file=history,err=700)
700 ierr=-1
if (ierr /=0) then
...
的语句。从此语句700
设置为非零值,然后我们转到ierr
构造来处理该错误。
只是标有if
的声明也恰好在没有错误的情况下执行:它只是700
之后的下一个声明没有分支错过它。 [我可以举一个这样的分支的例子,但我不想鼓励在现代代码中使用open
。有了工作err=
,事情就更好了。]
但是如果您只想测试文件的存在,请考虑按文件查询:
iostat=
有人会认为这比在logical itexists
inquire (file=history, exist=itexists)
if (.not.itexists) error stop "No file :("
声明中使用status='old'
更好。