2011-12-07 22 views
0

したがって、PDO(ODBC)を使用してMSAccessデータベースにアクセスしています。私は過去7日間ではなく、今週のすべての記録を取得しようとしています。ここに私のクエリは次のとおりです。MSAccessへのPHP PDOクエリが正常に動作しません。

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

コードを表示できますか?これは、人々があなたの問題を診断できる唯一の方法です。 – rdlowrey

+0

'WHERE'ステートメントの回りに括弧が必要ないと思います。 –

答えて

1

知りたい人のために。 MSAccessデータベースに対してクエリを実行している場合、クエリ構文は使用しているものと同じになることはありません。これが私の仕事の仕組みです。 wwの二重引用符を一重引用符に変更しました。

SELECT * 
FROM tblBilling 
WHERE ((Year(DateOfService) = Year(Date()) 
AND DatePart(\'ww\', DateOfService, 0) = DatePart(\'ww\', Date(), 0))) 
ORDER BY DateOfService, TimeOfService 
0

あなたのクエリの日付要素セクションは、あなたのADODB接続(それがパラメーターであると考えて)によって機能として認識されていないことが表示されます。

これはあなたの正確な問題を解決するのに役立つものではありません....しかし、ここにあなたが行きたいところを得る別の方法です。

私はこれまで、カレンダーテーブルを作成することでこのような問題を解決してきました(論理カレンダーの場合は論理的にはあまり関係ありません)。これは私が得たアイデアですData Analysis Using SQL and Excel

テーブルは次のようになります。

Calendar table sample

あなたは簡単にpreformanceの問題のいずれかのタイプを生じさせることなく、暦日の50年の価値を置くことができます。カレンダーテーブルに参加することで、必要に応じて日付バケットを取得できます。

関連する問題