access数据库计数[英] access database count

问题描述

你好

我是一个完全的新手,所以希望有人能对我有所了解
问题/目标.

我有一个包含一些记录的访问数据库.我有两个字段
1) 到达日期 2) 返回日期

我正在尝试编写一个asp页面(非常困难)
显示特定日期(即 23/07/2008)有多少条记录.

数据库名为parking.mdb,表名为mf_tbl.
数据库位于名为 \db

的文件夹中以下是我在其他人的帮助下收集到的,但没有
工作.

任何帮助将不胜感激.

谢谢

克雷格

<%@LANGUAGE="VBSCRIPT"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://
www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%
设置 oConn = Server.CreateObject("ADODB.Connection")
oConn.Open("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source="&
Server.MapPath("db/parking.mdb"))

设置 oRs = oConn.Execute("SELECT Format([ArrivalDate],"dd/mm/yyyy")
AS ARDate, Count(mf-tbl.ArrivalDate) AS CountOfArrival FROM mf-tbl
GROUP BY Format([ArrivalDate],"dd/mm/yyyy") HAVING
(((格式([ArrivalDate],"dd/mm/yyyy"))=#23/07/2007#));")

If Not oRs.EOF Then
Response.Write "<table>
<tr>
<%
对于 rs.Fields 中的每个 x
response.write("<th>"&ucase(x.name)&<</th>")
下一个
%>
</tr>
<% 直到 rs.EOF %>
<tr>
<%
对于 rs.Fields 中的每个 x
如果 lcase(x.name)="customerid";那么%>
<td>
<输入类型="隐藏"名称="ID";值="<%=x.value%>">
</td>
<%else%>
<td><%Response.Write(x.value)%></td>
<%结束如果
下一个
%>

<%rs.MoveNext%>
</tr>
<%
循环
conn.close
%>
</table>

推荐答案

于 2008 年 7 月 25 日在 microsoft.public.inetserver.asp.general 中写道:
>
设置 oRs = oConn.Execute("SELECT Format([ArrivalDate],"dd/mm/yyyy")
AS ARDate, Count(mf-tbl.ArrivalDate) AS CountOfArrival FROM mf-tbl
GROUP BY Format([ArrivalDate],"dd/mm/yyyy") HAVING
(((格式([ArrivalDate],"dd/mm/yyyy"))=#23/07/2007#));")
你不需要所有这些来计数.

试试看:

<%
d = #2007/07/23#

设置 oConn = Server.CreateObject("ADODB.Connection")
oConn.Open("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source="&_
Server.MapPath("db/parking.mdb"))
sql = "SELECT count(*) AS Ct FROM mf-tbl WHERE ArrivalDate = "&d &""
'' response.write sql ''用于调试
'' 回复.end
设置 oRs = oConn.Execute(sql)
%>

计数 = <% = oRs("Ct") %[on <% = d %>]

--
埃弗特扬.
荷兰.
(请将我的电子邮件地址中的 x''es 更改为点)

问题是,Access *不*理解日期的 DD/MM/YYYY 格式
用#...#括起来.

您可以使用#mm/dd/yyyy#(美国标准)或#yyyy/mm/dd#(ISO
标准),这是 Evertjan 选择做的(也是我推荐的).

但是您最好 *NOT* 在 Access 中执行 Format 调用.相反,
在你的 ASP 代码中使用 VBScript 来格式化日期.

******************

此外,您的表名中有一个减号.或者至少看起来像
SQL 的减号.因此,您需要在名称周围加上 [...].

******************

关于你的代码的另一个时髦的事情:你正在做
如果 lcase(x.name)="customerid";那么%>
<td>
<输入类型="隐藏"名称="ID";值="<%=x.value%>">
</td>
<%else%>
但是您甚至从未*尝试* 获得名为"customerid"的字段.那是什么
IF测试的重点?

*************

此外,因为您只会从该查询中获得 *ONE* 记录,所以
点在 DO ... LOOP?

*************

所以...K.I.S.S.:

<%
设置 oConn = Server.CreateObject("ADODB.Connection")
oConn.Open("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source="&
Server.MapPath("db/parking.mdb"))
SQL = "SELECT COUNT(*) FROM [mf-tbl] WHERE ArrivalDate = #2007/07/23#"
'' *OR* 如果你真的想从 *TODAY* 到货,让 Access 来做吧
给你:
SQL = "SELECT COUNT(*) FROM [mf-tbl] WHERE ArrivalDate = Date()"
'' *OR* 从昨天到货同样简单:
SQL = "SELECT COUNT(*) FROM [mf-tbl] WHERE ArrivalDate = ( Date() - 1 )"

设置 oRs = oConn.Execute( SQL )
'' 当你得到一个 COUNT 时,你永远不会得到一个 EOF
计数 = oRS(0)
或关闭
oConn.关闭
%>
到达人数为<%=count%>.

******************

不要放入不必要的代码.保持简短.

<%
d = #2007/07/23#

设置 oConn = Server.CreateObject("ADODB.Connection")
oConn.Open("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source="&_
Server.MapPath("db/parking.mdb"))
sql = "SELECT count(*) AS Ct FROM mf-tbl WHERE ArrivalDate = "&d &""
''response.write sql ''用于调试
应该把调试代码留在里面!因为这段代码*不*工作!

如果 ASP 脚本的 Locale 设置为大多数欧洲国家,那
Response.Write 的 SQL 会告诉你

SELECT count(*) AS Ct FROM mf-tbl WHERE ArrivalDate = 23/7/2008;

因为当你这样做时
d = #2007/07/23#
确实,您确保日期正确,2007 年 7 月 23 日.

*BUT*... 但是现在变量
d
是一个 DateTime 变量(或 Variant,如您所愿).

而现在,当你这样做时
SQL ="..."&d
VBScript 必须将该 DateTime 值转换为 *STRING*!确实如此
根据当前的 Session.LCID 值.所以,在欧洲大部分地区,
值作为字符串出现
"2007 年 7 月 23 日"

它确实*没有*周围有 Access 需要的#...#!!!

所以实际发生的是
23/7/2007
Access 将其视为
23 除以 7 除以 2007
所以你得到一个非常非常小的数字
0.0016371
相当于
1899年12月30日00:02:21
我严重怀疑你会在数据库中找到任何记录
特定的日期和时间.

现在,如果你已经编码
d ="#2007/07/23#"
它本来可以的,但这不是很直观.

我,我创建了一个用于 Access 查询的函数:

<%
函数 YYYYMMDD(dt)
If IsDate(dt) Then
dt = CDate(dt) '' 只是为了确定
YYYYMMDD = "#"&年(dt) &"/"&月(dt) &"/"&天(dt) &"#"
其他
YYYYMMDD = "NULL"
结束如果
结束函数
%>

然后我就可以写了
sql = "SELECT count(*) AS Ct FROM [mf-tbl] WHERE ArrivalDate="&
YYYYMMDD(d)

(错过了对 [...] 表的需求,由 by)

哦,查询末尾的分号确实是不必要的.不会
伤害;没用.



本文地址:https://www.itbaoku.cn/post/1050710.html