|
2010/12/18(Sat) 14:09:30 編集(投稿者)
■No55933 (にゃん さん) に返信 > ・あるテーブルのレコードの時間(長整数型)を+1時間し、それにより日付が変わるようなら日付を+1日にする。 長整数型の時間というのは、どのようなデータを指していますか? Dim tm As Long = Now.ToFileTime() Dim hms As Integer = Now.Hour * 10000 + Now.Minute * 100 + Now.Second Dim totalSec As Integer = CInt(Now.TimeOfDay.TotalSeconds())
> ・日付(長整数型)が日曜日ならそのレコードは削除する。 日曜日の判定はできていますか?
> 処理スピードがかなり遅くなってしまいます。 日付整数列や時刻整数列の仕様が分かりませんが、それらを日付型の列にまとめる事はできませんか? データベース側に、日付型のフィールドを追加できるのであれば、
SELECT *, DateColumn + 1/24 AS 日付列 FROM TBL WHERE WEEKDAY(DateColumn + 1/24, 1) = 1
のような問い合わせを行う事で、望むようなビューを得られるかと思います。 # 日付列(整数)/時刻列(整数)の型定義を変更できない場合は、 # 日付型フィールドとの連携について考慮する必要がありますけれども。
SELECT とした結果としてでは無く、テーブルの内容自体を更新するのだとすれば、 こんな感じでしょうか。
'日時に+1時間 cmd = con.CreateCommand() cmd.CommandText = "UPDATE TBL SET DateColumn = DateColumn + 1/24" cmd.ExecuteNonQuery()
'日曜日は削除 cmd = con.CreateCommand() cmd.CommandText = "DELETE FROM TBL WHERE WEEKDAY(DateColumn, 1) = 1" cmd.ExecuteNonQuery()
> 現在は直接、そのテーブルにUPDATE、DELETEをしているのですが、 更新処理を行いたいのでしょうか。それとも、ビューとして結果を得るだけで良いのでしょうか。
> 仕様変更がたびたびあり、今後もデータが増えていくので、どうしても対応が難しくなってきている状態です。 話の内容が具体的ではないので、どのような点で困っているのかが見えませんが、 DataSet で無いと無理というのであれば、選択肢はほぼ無いと思います。
データ更新が必要だが、SQL で一括処理できず、パフォーマンスも必要という事であれば、 ADO.NET の利用を避けて (案1) DAO でテーブルタイプのRecordsetオブジェクトを使って更新する。 (案2) ADODB で、adCmdTableDirect 指定のキーセットカーソルを用いて更新する。 あたりでしょうか。
|