1

select複数のステートメントを使用して複数のテーブルからデータを取得する Access 2010 データベースの複雑なステートメントがありますLEFT JOIN。クエリは期待どおりに機能し、テーブル全体を取得します。

そこで、検索機能を追加したいと思います。WHERE1 つの方法は、クエリの最後に句を追加し、 JOINed テーブルのテキスト フィールドの 1 つを参照して、それを何らかのテキスト ( WHERE [All Names].Name LIKE "*Mark*") と比較することでした。

私が試した2番目のオプションはselect * from (**complex sql here**) where **condition**

どちらの場合も、私の条件が のような単純なものである場合([ID]<15)、それは魅力のように機能しますが、それを([Employee Name] LIKE "\*Mark\*")またはオプション 1 の条件に変更すると、リクエストが通過したかのように空のデータ テーブルが生成され、エラーやエラーは発生しません。例外として、すべてのフィールド名が存在しますが、行は返されません。

ただし、デバッガーを使用して生成された SQL 文字列 (いずれかのオプション) の完全な文字列を取得し (またはテキスト ファイルにダンプするだけ)、文字列を変更せずにその文字列を新しい Access クエリに直接入力すると、正常に動作します。名前に「Mark」が含まれるいくつかのフィールドを返します

簡単に言えば、Access 内で正常に機能するクエリは、C# 内では機能しません。

だから今迷ってる

4

2 に答える 2

1

Simon の質問と HansUp の回答は、私の問題を解決してくれました。好奇心旺盛な人、または同様の問題を抱えている人のために、完全なクエリを次に示します。

string query=
  "SELECT Employees.ID, " +
  "[All Names E].Name AS [Employee Name], " +
  "Titles.Title, " +
  "[All Names S].Name AS [Supervisor Name], " +
  "Employees.[Phone #], " +
  "Offices.[Office Location], " +
  "PCs.PC " +
  "FROM (((((Employees LEFT JOIN [All Names] as [All Names E] ON Employees.Employee = [All Names E].ID) " +
  "LEFT JOIN [All Names] as [All Names S] on Employees.Supervisor=[All Names S].ID) " +
  "LEFT JOIN Titles on Employees.Title=Titles.ID) " +
  "LEFT JOIN Offices on Employees.[Office Location]=Offices.ID) " +
  "LEFT JOIN PCs on Employees.PC=PCs.ID) " +
  "ORDER BY Employees.ID";

ORDER BYその前にwhere句を追加すると、WHERE ([All Names E].Name LIKE \"*Mark*\")Access内から機能しました。2番目の方法は次のとおりです。

string searchQuery="select * from ("+query+") where ([Employee Name] like \"*Mark*\")";

どちらの方法も Access では完全に機能しましたが、OleDB で使用する別のワイルドカード記号があるとは思いもしませんでした。

したがって、アスタリスクをパーセント記号に変更すると、問題が修正されました。

再度、感謝します。

于 2013-09-11T16:25:14.320 に答える