1

私は周りを見回しましたが、このSQLステートメントの問題を見つけることができません:

    strSQL = "SELECT Directory.DisplayName, Department.DisplayName, Call.CallDate, Call.Extension, Call.Duration, Call.CallType, Call.SubType FROM (((Department INNER JOIN Directory ON Department.DepartmentID = Directory.DepartmentID) INNER JOIN Extension ON (Department.DepartmentID = Extension.DepartmentID) AND (Directory.ExtensionID = Extension.ExtensionID)) INNER JOIN Site ON Extension.SiteCode = Site.SiteCode) INNER JOIN Call ON Directory.DirectoryID = Call.DirectoryID WHERE (Call.CallDate)>=27/11/2012"

WHEREを変更しても、データベース内のすべての値が常に返されます(これを試みると、Excelが完全にハングするため、少なくともそうなると思います)、このSQLステートメントはAccessで完全に機能します(日付の前後に##がある場合)。これを修正する方法についてのアイデア。現在、さまざまな日付でユーザー入力を許可するSQLステートメントを作成しようとしていますが、最初にこのランダムなハードルを乗り越える必要があります。

編集:SQLデータベースの日付フィールドはDD / MM / YY HH:MM:SS形式であり、このクエリはVBA-EXCEL 2010で実行されます。
また、混乱を避けるために、ステートメントからTOP10を削除しました。データベース内のすべての行を取得するのに優れています。
私がアクティブにした現在のリファレンスは次のとおりです。MicrosoftXデータオブジェクト2.8ライブラリ
データベースはMSSQLであり、接続文字列を使用します:
Provider = SQLOLEDB; Server = #######; Database = #######; User ID =# #######;パスワード=########;

4

2 に答える 2

3
WHERE (Call.CallDate) >= #27/11/2012#

日付変数を。で囲みます#

編集:2012年11月27日など、日付文字列を明確にしてください

strSQL = "SELECT ........ WHERE myDate >= #" & Format(dateVar, "dd-mmm-yyyy") & "# "

adoを使用している場合は、Paramaters動的クエリを使用する代わりに確認する必要があります。

EDIT2:MS-AccessではなくSQLServerであることを指摘してくれた@ElectricLlamaに感謝します

strSQL = "SELECT ........ WHERE myDate >= '" & Format(dateVar, "mm/dd/yyyy") & "' "
于 2012-11-27T08:05:16.910 に答える
1

フィールドCall.CallDateがデータ型DATETIMEまたはDATEであることを確認してください

実際にSQLServerに対してこれを実行している場合は、初心者向けに次の構文を試してください。

SELECT Directory.DisplayName, Department.DisplayName, Call.CallDate, 
Call.Extension, Call.Duration, Call.CallType, Call.SubType 
FROM (((Department INNER JOIN Directory 
ON Department.DepartmentID = Directory.DepartmentID) 
INNER JOIN Extension ON (Department.DepartmentID = Extension.DepartmentID) 
AND (Directory.ExtensionID = Extension.ExtensionID)) 
INNER JOIN Site ON Extension.SiteCode = Site.SiteCode) 
INNER JOIN Call ON Directory.DirectoryID = Call.DirectoryID 
WHERE (Call.CallDate)>= '2012-11-27'

表示される日付形式は、クライアントツールが表示するように決定した形式です。日付はどの形式でも保存されず、x以降の期間として効果的に保存されます。

日付リテラルを使用する場合、デフォルトではSQLはYYYY-MM-DDの形式を使用します。

ただし、コードでdate型のパラメーターを定義し、日付をデータ型「date」にできるだけ長く保持することをお勧めします。これには、あいまいさを防ぐためにカレンダーコントロールを使用して日付を入力することのみを許可することが含まれる場合があります。

于 2012-11-28T05:22:27.180 に答える