TFDTableでAccessの日付型を設定し抽出しようとしたのですが出来ませんでした。原因が解りましたらお教え下さい。
「サンプル」
TFDTable.Close;
TFDTable.Filter :='nyu_ymd >=2017/03/01';
TFDTable.Filtered :=True;
TFDTable.Open;
これでエラーは出ませんでしたが全てのデーターが抽出されてしまいました。また日付の前後に#を付けたらエラー(無効な文字が見つかりました[#2016/03/01#])と表示されました。
宜しくお願いします。
実行環境,開発環境も,データベースのことも書いていない,
かなり度胸と勇気のある質問ですが...
Filter プロパティの型って文字列指定だと思いますよ.
日付の部分を文字列にしてみてください.
データベースに質問のコードに書いてある書式で格納されているとすれば,うまくいくかも知れません.
TFDTable.Filter :='nyu_ymd >=''2017/03/01''';
※ 余計なお世話かも知れませんが,SQL を使用することをお勧めします.
※ データベースをやる限り,SQL は避けて通ることはできないでしょう.多分.
Mr.XRAさん、有難う御座います。環境とDBを書き忘れました。
Windows10、Accessです。
Filterを使ったのは複数のテーブルをリンクしてWhere文を使いSQLを使うと読込み専用になってしまうからです。TFDQueryを使って読込み専用にならない方法があれば一番良いのですが・・。
>読込み専用にならない方法があれば一番良いのですが・・。
できないんじゃないんですか ?
>複数のテーブルをリンクしてWhere文を使いSQLを使うと読込み専用になってしまうからです。
ということであれば.
TADTable の Filter ではできるというのも不思議ですが.
http://edn.embarcadero.com/article/images/43368/a2.pdf
http://edn.embarcadero.com/article/images/43368/a2.pdf#page=76
http://edn.embarcadero.com/article/images/43368/a2.pdf#page=78
で,肝心の Filter の動作はどうなったのでしょう ?
以下でもダメですか ?
//DateText は string型の変数
LDateText := AnsiQuotedStr('2017/03/01', '''');
TFDTable.Filter :='nyu_ymd >=' + LDateText;
Mr.XRAYさん、TFDTable.Filter :='nyu_ymd >=''2017/03/01''';で出来ました。
本当にありがとうございました。
ツイート | ![]() |