いつもお世話になっております。
データベースに入っている日付を読み込み、
今日の日付と比較し、
DataGridに残り日数とデータベースに入っている日付を
表示させたいと考えています。
データベースの中身の日付は
日時
2008/01/01
2008/01/03
・
・
・
となっています。
現在はDataGridへデータベース一覧を表示させるところまでできましたが
どのようにすれば特定の列をセルごとに今日の日付と比較して
DataGridに表示させることができるのでしょうか??
ご存知の方おりましたらよろしくお願いします。
OS :Windows XP pro
言語:Visual Studio 2003
データベース:access 2000
表示する際に使ったデータの入れ物からデータを取り出せばいいのでは?
SELECT文に残り日数を計算する列を追加してしまう,というのはダメですか?
DataGridを使ったことはないのですが,Access 2007では残日数を計算させることができることを確認しました。
特攻隊長まるるう様、YuO様
お返事ありがとうございます。
YuO様から提示していただいた案
を使ってやってみようと思います。
SELECT文に残り日数を計算する列を追加してしまう
ということは、具体的にはどのようなSQL文にすればよいのでしょうか?
今日の日付を取得し、登録されている日付との差を求めるというものでよろしいのでしょうか?
また、この場合は計算結果を格納させるための空の列を作っておいたほうがよいのでしょうか?
よろしくお願いします。
いろいろ調べ自分なりに作成してみましたが
デバッグをするとハンドルされない例外が発生してしまいます。
データベースにはつながっているのでSQLの問題だと思います。
以下私が作成したSQL文です。
問題点ありましたらよろしくお願いします。
SELECT 日時,予定,(DateInterval.Day, SearchText,日時))as 予定日まで FROM db
VB は基本的に SQL をデータベースに丸投げするわけですが。。。
>SELECT 日時,予定,(DateInterval.Day, SearchText,日時))as 予定日まで FROM db
これを Access に渡しても、Access が困るでしょうに。。。
とりあえず括弧の数が合ってないんですけど?
DateInterval.Day って VB の DateAdd 関数の引数じゃないの?
[SQLとは]
http://e-words.jp/w/SQL.html
データベース専用の VB とは関係ない別言語です。それを1つの文字列として
VB で編集して、データベースに渡し、SQL 自体はデータベースが処理します。
つまり、今回の場合、Access の SQL で使用できる文法のみで文字列を
編集する必要があります。
ま、VB と似たような関数はあるけどね。中身は別です。
『Access SQL DateAdd関数』あたりのキーワードで検索すれば使用例は
載ってますよね。文字列で指定してください。
SearchText ってのは VB 側で使ってる変数?中途半端なソースを載せられても
分からないので、そのままテスト実行できるコードを書くようにしてください。
Dim SearchText as String = "2"
Dim strSQL as String = "SELECT 日時,予定,DateAdd('d', SearchText,日時))as 予定日まで FROM db"
MessageBox.Show(strSQL)
で期待通りの SQL 文が編集されてますか?
Dim strSQL as String = "SELECT 日時,予定,DateAdd('d', " & SearchText & ",日時))as 予定日まで FROM db"
のような感じでは?db ってのもテーブル名なのか何なのかこっちでは分からないので、
VB 側で使ってる変数なら同じように修正してください。
。。。で、結局、何日か足すって意味の SQL だと思うんだけど。。。
最初の質問と違うことない???なんでこうなったのかがよく分からないんだけど?
あ、DateDiff もあるのか。じゃあ、そっちが消えてるのか。。。
Now もあるみたいだけど?
http://www.ivystar.jp/archives/13
とりあえず,私が使ったのはDateDiffです。
さらに,日付だけを作るためにDateSerialとかYearとかMonthとかDayとか……。
とりあえず,DDLだけ晒しておくと
CREATE TABLE TestTable (
ID INT IDENTITY PRIMARY KEY,
[VALUE] DATETIME NOT NULL
);
CREATE VIEW TestView AS
SELECT ID, VALUE, DATEDIFF("d", DATESERIAL(YEAR(VALUE), MONTH(VALUE), DAY(VALUE)),DATESERIAL(YEAR(NOW()), MONTH(NOW()), DAY(NOW()))) AS DIFF FROM TestTable;
てな感じ。View作っているのは単なる趣味です。
でも,こんなView作っていると……SQL Server 2008のDate型が欲しくなってきます。
# というか,Date型って開発者サイドから見ると一番大きな (かつ重要な) 変更点じゃね,って気もするが……。
特攻隊長まるるう様 YuO 様
お返事ありがとうございます。
データベースの言語と VB の言語は別物なのですね。
勉強になりました。
お二人のお力添えのおかげで
思い通りの表示をさせることができました。
ありがとうございました。
ツイート | ![]() |