所以我使用PDO(ODBC)访问MSAccess数据库。我试图获取本周的所有记录而不是过去七天。这是我的疑问:
SELECT *
FROM tblBilling
WHERE ((
Year(DateOfService) = Year(Date())
And DatePart("ww", DateOfService, 0) = DatePart("ww", Date(), 0)
))
ORDER BY DateOfService, TimeOfService
显然这适用于MSAccess,但是当从Web应用程序使用它时,我收到以下错误:
SQLSTATE[07002]: COUNT field incorrect:
-3010 [Microsoft][ODBC Microsoft Access Driver]
Too few parameters. Expected 1.
(SQLExecute[-3010] at ext\pdo_odbc\odbc_stmt.c:254)
我似乎无法弄清楚这一点。我必须忽略一些东西,我的大脑现在变得糊里糊涂。我知道如果我删除DataPart
它将运行查询并且不返回错误,但是它将不会执行我需要它做的事情。
感谢您的帮助!
根据要求提供额外代码:
try
{
$pdo = new PDO('odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq='.DB_NAME.';Uid=');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$myPDO = $pdo->prepare($query);
$myPDO->execute();
$result = $myPDO->fetchAll();
} catch(PDOException $e)
{
echo $e->getMessage();
}
答案 0 :(得分:1)
对于任何想要了解的人。如果您正在对MSAccess数据库运行查询,则查询语法将与您使用的语法不同。这就是我开始工作的方式。我将ww周围的双引号更改为单引号。
SELECT *
FROM tblBilling
WHERE ((Year(DateOfService) = Year(Date())
AND DatePart(\'ww\', DateOfService, 0) = DatePart(\'ww\', Date(), 0)))
ORDER BY DateOfService, TimeOfService
答案 1 :(得分:0)
您的ADODB连接似乎没有将查询的Datepart部分识别为函数(它认为它是一个参数)。
这对您的确切问题没有帮助....但是这里有另一种方法可以让您到达目的地。
我过去通过创建一个日历表来解决这种性质的问题(对于从逻辑角度来看有点无关紧要的金融日历)。这是我从Data Analysis Using SQL and Excel
得到的一个想法表格看起来像这样。
您可以轻松放置50年的日历日,而不会导致任何类型的性能问题。然后,您可以根据需要通过加入日历表来获取日期存储桶。