C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: このようなビューを作成したいのですが、できますでしょうか


(過去ログ 94 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■55933 / inTopicNo.1)  このようなビューを作成したいのですが、できますでしょうか
  
□投稿者/ にゃん (12回)-(2010/12/18(Sat) 13:14:04)

分類:[.NET 全般] 

こんにちは質問よろしくお願いいたします。
開発環境はVB2008でDBはACCESSです。

このようなビュー(仮想テーブル)の作成は可能でしょうか。
・あるテーブルのレコードの時間(長整数型)を+1時間し、それにより日付が変わるようなら日付を+1日にする。
・日付(長整数型)が日曜日ならそのレコードは削除する。

プログラムの中でそのように加工したデータセットを作りそれを利用すればいいのですが、データ件数があるためか、データセットを作成すると処理スピードがかなり遅くなってしまいます。
処理スピードの問題については前回質問させていただきました。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=55471

現在は直接、そのテーブルにUPDATE、DELETEをしているのですが、仕様変更がたびたびあり、今後もデータが増えていくので、どうしても対応が難しくなってきている状態です。
引用返信 編集キー/
■55934 / inTopicNo.2)  Re[1]: このようなビューを作成したいのですが、できますでしょうか
□投稿者/ 魔界の仮面弁士 (1994回)-(2010/12/18(Sat) 14:02:02)
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 指定のキーセットカーソルを用いて更新する。
あたりでしょうか。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -