- PR -

「今日」だけ表示ができない

投稿者投稿内容
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-10-03 19:31
引用:

Page_Loadで呼び出すところでの、最初の1回だけは正常に表示されるのですが、一旦別の日のデータを呼び出したあとで、再び今日の日付を入れても、今日のデータを呼び出しません。試しにそのPage_Loadで呼び出すところのサブルーチンをコメントアウトしたところ、最初の一回はもちろん表示されませんでしたが、その場合は他の日のデータを呼び出したあとでも、今日の日付を与えれば正常にデータを拾ってきました。


「一旦別の日」「今日の日付」の条件判断を行っている部分のコードを見せて下さい。
_________________
囚人のジレンマな日々
未記入
ベテラン
会議室デビュー日: 2003/06/26
投稿数: 76
投稿日時: 2006-10-03 19:33


[ メッセージ編集済み 編集者: 未記入 編集日時 2007-01-19 21:42 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-10-03 21:56
引用:

囚人さんの書き込み (2006-10-03 19:31) より:
「一旦別の日」「今日の日付」の条件判断を行っている部分のコードを見せて下さい。



同じソースで、入力だけを変えた、ってことじゃないかな???


引用:

ぜうすさん:
分や秒を比較する意味あるんでしょうかね?


過去の投稿より、「しなきゃいけないんじゃないの?!」じゃないかなぁ???

周りに聞こうにも、だれもソフトウェアやっている人はいない、って人じゃなかったっけ?



 データがあるのかどうか。それが気になりますね。
また、日付として比較するべきじゃないかな、と。
Oracle では TO_DATE 関数なのですが、SQL Server だとなんになるのかな?(と、SQL Server 使いにふる)
または、パラメータを使って、DATE として比較するのが良いんじゃないかと(ってか、セキュリティ上、文字列連結はやめましょう)。
_________________
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-10-03 22:12
引用:

同じソースで、入力だけを変えた、ってことじゃないかな???


コード:
datToday = new DateTime(); 
datToday = DateTime.Now; 


このようなコードがあるので、「今日」というのを特別に扱っているのかな、と思いまして。

引用:

Oracle では TO_DATE 関数なのですが、SQL Server だとなんになるのかな?(と、SQL Server 使いにふる)


CONVERT(datetime, [日付], 111)
こんなのです(曖昧)。第3引数は、日付の形式(111は日本だったと思う)。詳しくは以下。
http://msdn2.microsoft.com/ja-JP/library/ms187928.aspx
_________________
囚人のジレンマな日々
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2006-10-04 00:14
NAL-6295です。

SQLプロファイラで実際に実行されているSQLを確認してみてはいかがでしょうか。
Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2006-10-04 09:37
みなさん、ご回答ありがとうございます。
返答遅れまして申し訳ありません。


★分や秒を比較する理由は、単純にDB上に時間も格納されているためです。本当は日付だけをDBに入れたかったのですが、日付だけを保存する方法がvarcharとかしかなく、DateTime型にすると強制的に時間も格納しておかないといけないらしく、やむなくDateTime型にしてこういう方法を取りました。

★仕組みとして、最初の起動時に「今日のデータ」を表示させて、そこから特定の日時を検索するようになっています。下記の「コメントアウトした」というのは、この起動時の最初の関数を動かないようにした、ということです。
機能のひとつとして今日の日付を表示するためのボタンを用意しており、そのボタンを押したときに「今日のデータ」を表示するようにしたいのです。2回目の「今日」の表示はこのボタンを押したときのことを言っています。

やっていることは起動時も「今日に戻る」ボタン押下時も、カレンダーをクリックしたときも、

datToday = new DateTime();
datToday = DateTime.Now;

で今の日付と時間をdatTodayに入れて、それを getDB(datToday); としてデータベースからその日付のデータを引っ張り出してくる関数に渡しているだけです。
別の日付をテキストボックスから入力したり、カレンダーから入力したりしても、また前述のとおり、起動時に「今日」の日付を入力しても、この関数は正しく動いているので、ブラックボックスと見ればこの関数に罪はなさそうなのですが……。

>Jittaさん
その通りです、私の周りにプログラマはいないんです。ちょっと離れた場所にVBA触れる人ならいるのですが、それくらいで……。SQLサーバも業者に任せて設置したみたいです。
あとセキュリティ的に文字連結がよくないとのことですが、今の予定ではこれはDMZの中だけで使うことになるのと、それ以前に私のレベルがセキュリティ考えられるまであがっていないので、ひとまず置いておくことにします(T-T

>NAL-6295さん
SQLプロファイラというのは初めて聞きました。ストアドプロージャーも使えないほどの知識ですので……orz 勉強します。

[ メッセージ編集済み 編集者: Wingard 編集日時 2006-10-04 10:23 ]
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-10-04 10:29
余談ですが・・・

引用:

Jittaさんの書き込み (2006-10-03 21:56) より:

周りに聞こうにも、だれもソフトウェアやっている人はいない、って人じゃなかったっけ?



内緒ですが、実は僕もそうです(T-T)

#ああ、道理で・・・って声が聞こえた・・・気がする orz

_________________
R・田中一郎 @ わんくま同盟  -  R.Tanaka.Ichiro’s Blog ←ページビュー掲載しますた

[ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-10-04 10:30 ]
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-10-04 11:11
こんにちは。

最初に書いたときに Dispose の部分の話を書きましたが、なんとなくタイミング
的な問題なのではないかと思っています。「今日に戻る」ボタンで正常に動くとい
うことは、起動時に正しく取れたデータを上書きしているか、もしくは取るタイミン
グが間違っているか、どちらかのように思えます。
というか前に書いたときにに書き損ねました。ごめんなさい。
# コードの方にばかり目が行ってしまっていたというのもありますけど…

それはそれとして、コードの話。

引用:

★分や秒を比較する理由は、単純にDB上に時間も格納されているためです。本当は日付だけをDBに入れたかったのですが、日付だけを保存する方法がvarcharとかしかなく、DateTime型にすると強制的に時間も格納しておかないといけないらしく、やむなくDateTime型にしてこういう方法を取りました。


もうデータがあるようなので、今から云々言っても仕方がない部分ではあります
が、必要な部分は月日だけのようでしたので私であれば varchar(4) として
"0229" のような形で格納するか、int 型にすると思います。検索条件日付の
妥当チェックを行う必要はあるかもしれませんが、それは今でも同じですね。

日付のチェックは他の方も言っておられるように

コード:

strSelectCommand = string.Empty;
strSelectCommand += "SELECT タイトル,コメント FROM 情報 WHERE 日付=";
strSelectCommand += "'" + MemTemp + "'";


だと Date 型のデータを文字列として比較することになっていて、日付フィール
ドが SQL Server 標準のフォーマットで文字列に変換された後で
MemTemp が(これも .NET の標準フォーマットで)日付に変換された文字列
と比較されます。
これではマズいので、明示的に CONVERT 関数(SQL Server 側)と
DateTime.ToString("フォーマット文字列") (.NET 側)という感じで文字列に
変換した上で比較するのが安全かなぁと思いました。
というかこれもキチンと書いてませんでした。ごめんなさい。

# こういうのを見るたびに、Access で作ったシステムが突然動かなくなったの
# で、調べてみたら国情報をドイツに変えられていた(なんで?)ことを思い出す。
# 自分が作ったシステムではなかったけれど…

引用:

R・田中一郎さんの書き込み (2006-10-04 10:29) より:

内緒ですが、実は僕もそうです(T-T)

#ああ、道理で・・・って声が聞こえた・・・気がする orz


むぐっ!(何かを言い出す前に口をふさいだ音)
そっ、そんな餌になんか釣られないんだからねっ!(ツンデレ)
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。

スキルアップ/キャリアアップ(JOB@IT)