1

短いバージョン:ODBCを介してAccessのDatePart関数を使用しようとすると、解決できません。

長いバージョン:

タイムスタンプとスコアを含む行を返すMicrosoftAccessクエリがあります。ごとに、次にスコアごとに並べ替えたいと思います。事実上、その日のハイスコアテーブルです。

より良い関数が必要な場合は、このDatePart関数を使用して、タイムスタンプから年、月、日をそれぞれ抽出し、ORDER BYその後にスコアを付けました。

Microsoft Accessでは、クエリは美しく機能します。

ただし、pyodbc同じクエリにアクセスするために使用すると、ODBCドライバーはDatePart関数によって困惑し、欠落しているパラメーターの名前であると見なされます。

驚いたのは、DatePart関数を非表示にして、新しいHighScoreクエリを作成してから、パラメーターが見つからないと文句を言っていたということSELECT * FROM HighScoreですどうやら、クエリのSQLはプロセスのかなり遅い段階で解決されています。

私の質問は次のいずれかです。

  • SQLでDatePart関数を解決して、Accessで実行できるようにするにはどうすればよいですか。
  • ODBCを介してタイムスタンプの日の部分で並べ替える正しい方法は何ですか?

追加情報:

やり過ぎのようですが、ここにいくつかのコードがあります:

import pyodbc
access_db_path = r"<ellided>"
connection_string = 'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ='+access_db_path
connection = pyodbc.connect(connection_string, autocommit = True)

print "First query"
connection.cursor().execute('SELECT ScoreTime FROM SplitExtendedP1')
print "Worked"

print "Second query"
print connection.cursor().execute('SELECT DatePart("yyyy",ScoreTime) FROM SplitExtendedP1')
print "Doesn't get here."

結果は次のとおりです。

First query
Worked
Second query
Traceback (most recent call last):
  File "<ellided>.py", line 16, in <module>
    print connection.cursor().execute('SELECT DatePart("yyyy", ScoreTime) FROM SplitExtendedP1')
pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. (-3010) (SQLExecDirectW)')
4

2 に答える 2

2

SQLのその方言で、"yyyy"アポストロフィの代わりに引用符を使用することが有効であると確信していますか?'yyyy'

于 2010-10-18T10:16:13.997 に答える
2

日時は、浮動小数点数としてaccessに格納されます。小数点の左側の数字は日付であり、小数点の右側の小数部分は時間です(1日の端数で表されます。つまり、.5 =正午)。

日で並べ替える場合は、Int()関数を使用して、日時フィールドの整数部分を返すことができます。

于 2010-10-18T13:57:08.693 に答える