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

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

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

日付の間隔の取得


(過去ログ 3 を表示中)

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

■3233 / inTopicNo.1)  日付の間隔の取得
  
□投稿者/ JT 二等兵(1回)-(2006/04/26(Wed) 09:37:48)

分類:[VB.NET] 


分類:[VB.NET] 

おはようございます。

早速ですが、現在わからないことがありまして悩んでいます。
データを登録した日付時間から現在の時刻を差し引いたデータを表示させたいのですがうまくいきません。計算としては簡単なのですがDataGridに表示されるときに
小数点で表示されてしまいます。
SQL文の処理がおかしいのでしょうか。
どなたか良い案があれば頂けないでしょうか。
要求事項なのでなんとか応えたいと思っています。

Private Sub Form_03_07_SLTロット仕掛実績参照_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim tblStyle1 As DataGridTableStyle
Dim tblStyle2 As DataGridTableStyle
Dim clmStyle(24) As DataGridTextBoxColumn
Dim intRow As Integer

'フォーカス設定
Me.ComboSerchClass.Focus()

'DataGridデザイン変更
Me.DataGrid1.RowHeaderWidth = 10
Me.DataGrid1.ReadOnly = True
Me.DataGrid2.RowHeaderWidth = 10
Me.DataGrid2.ReadOnly = True

'DataGridスタイル設定
tblStyle1 = New DataGridTableStyle
tblStyle1.MappingName = "get"
tblStyle2 = New DataGridTableStyle
tblStyle2.MappingName = "get2"

Me.DataGrid1.TableStyles.Add(tblStyle1)
Me.DataGrid2.TableStyles.Add(tblStyle2)
For intRow = 0 To 24
clmStyle(intRow) = New DataGridTextBoxColumn
Next
clmStyle(0).HeaderText = "作業開始日時"
clmStyle(0).MappingName = "作業開始日時"
clmStyle(0).Width = "115"
clmStyle(0).Format = "yyyy/MM/dd HH:mm:ss"
clmStyle(1).HeaderText = "作業終了日時"
clmStyle(1).MappingName = "作業終了日時"
clmStyle(1).Width = "115"
clmStyle(1).Format = "yyyy/MM/dd HH:mm:ss"
'clmStyle(0).Format = "yyyy/MM/dd HH:mm:ss"
'clmStyle(1).Format = "yyyy/MM/dd HH:mm:ss"
clmStyle(2).HeaderText = "製品名"
clmStyle(2).MappingName = "製品名"
clmStyle(2).Width = "100"
clmStyle(3).HeaderText = "ロットNO"
clmStyle(3).MappingName = "ロットNO"
clmStyle(3).Width = "100"
clmStyle(4).HeaderText = "マークロットNO"
clmStyle(4).MappingName = "マークロットNO"
clmStyle(4).Width = "100"
clmStyle(5).HeaderText = "工程名"
clmStyle(5).MappingName = "工程名"
clmStyle(5).Width = "40"
clmStyle(6).HeaderText = "作業名"
clmStyle(6).MappingName = "作業名"
clmStyle(6).Width = "40"
clmStyle(7).HeaderText = "装置名"
clmStyle(7).MappingName = "装置名"
clmStyle(7).Width = "60"
clmStyle(8).HeaderText = "良品数量"
clmStyle(8).MappingName = "良品数量"
clmStyle(8).Width = "40"
clmStyle(9).HeaderText = "不良数量"
clmStyle(9).MappingName = "不良数量"
clmStyle(9).Width = "40"
clmStyle(10).HeaderText = "更新者ID"
clmStyle(10).MappingName = "更新者ID"
clmStyle(10).Width = "100"
clmStyle(11).HeaderText = "ロットNO"
clmStyle(11).MappingName = "ロットNO"
clmStyle(11).Width = "100"
clmStyle(12).HeaderText = "マークロットNO"
clmStyle(12).MappingName = "マークロットNO"
clmStyle(12).Width = "50"
clmStyle(13).HeaderText = "製品名"
clmStyle(13).MappingName = "製品名"
clmStyle(13).Width = "100"
clmStyle(14).HeaderText = "装置名"
clmStyle(14).MappingName = "装置名"
clmStyle(14).Width = "50"
clmStyle(15).HeaderText = "工程名"
clmStyle(15).MappingName = "工程名"
clmStyle(15).Width = "50"
clmStyle(16).HeaderText = "作業名"
clmStyle(16).MappingName = "作業名"
clmStyle(16).Width = "50"
clmStyle(17).HeaderText = "ロットタイプ"
clmStyle(17).MappingName = "ロットタイプ"
clmStyle(17).Width = "70"
clmStyle(18).HeaderText = "作業状態"
clmStyle(18).MappingName = "作業状態"
clmStyle(18).Width = "60"
clmStyle(19).HeaderText = "ホールド状態"
clmStyle(19).MappingName = "ホールド状態"
clmStyle(19).Width = "50"
clmStyle(20).HeaderText = "仕掛数量"
clmStyle(20).MappingName = "仕掛数量"
clmStyle(20).Width = "50"
clmStyle(21).HeaderText = "投入日時"
clmStyle(21).MappingName = "投入日時"
clmStyle(21).Width = "115"
clmStyle(21).Format = "yyyy/MM/dd HH:mm:ss"
clmStyle(22).HeaderText = "出荷予定日"
clmStyle(22).MappingName = "出荷予定日"
clmStyle(22).Width = "80"
clmStyle(23).HeaderText = "備考"
clmStyle(23).MappingName = "備考"
clmStyle(23).Width = "70"
clmStyle(24).HeaderText = "停滞時間"
clmStyle(24).MappingName = "停滞時間"
clmStyle(24).Width = "100"


For intRow = 0 To 10
tblStyle2.GridColumnStyles.Add(clmStyle(intRow))
Next
For intRow = 11 To 24
tblStyle1.GridColumnStyles.Add(clmStyle(intRow))
Next
End Sub
'検索対象選択
Private Sub ComboSerchClass_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboSerchClass.SelectedIndexChanged

Select Case Me.ComboSerchClass.Text
Case "仕掛情報"
Me.SerchGroup1.Visible = True
Case "実績情報"
Me.SerchGroup2.Visible = True
End Select
Me.Label03.Visible = True
Me.CmdButtonOK.Visible = True
Me.CmdButtonCancel.Visible = True
Me.ComboSerchClass.Enabled = False

End Sub
'検索処理
Private Sub CmdButtonOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdButtonOK.Click


On Error GoTo Err_Label

Dim dt1 As Date = Now()

Select Case Me.ComboSerchClass.Text
Case "仕掛情報"
sqldata = "SELECT ロットNO,マークロットNO,製品名,装置名,工程名,作業名,ロットタイプ,作業状態,ホールド状態,仕掛数量,投入日時,出荷予定日,備考,to_date('" & Now & "','yyyy/mm/dd hh24:mi:ss') - 投入日時 AS 停滞時間 " & _
"FROM AXIS.DK_TBL_ロット仕掛 " & _
"WHERE ロットNO Like '" & Trim(Me.TextLotNo1.Text) & "%' " & _
"AND マークロットNO Like '" & Me.TextMarkLotNo1.Text & "%' " & _
"AND 工程名 Like '" & Me.TextLocName1.Text & "%' " & _
"AND 製品名 Like '" & Me.TextManName1.Text & "%' " & _
"AND 製品名 = 'CXD2971GB'"

どなたかアドバイス宜しくお願い致します。



0
引用返信 編集キー/
■3234 / inTopicNo.2)  Re[1]: 日付の間隔の取得
□投稿者/ trapemiya 伍長(54回)-(2006/04/26(Wed) 10:20:41)
trapemiya さんの Web サイト

分類:[VB.NET] 

to_dateの戻り値の型が怪しいですね。現在との差なら、単に
getdate() - 投入日時 AS 停滞時間
で取れます。

0
引用返信 編集キー/
■3235 / inTopicNo.3)  Re[2]: 日付の間隔の取得
□投稿者/ JT 二等兵(2回)-(2006/04/26(Wed) 10:34:28)

分類:[VB.NET] 

ご回答有り難うございます。
下記の処理で挑戦してみました。しかし、列名が無効というエラーではじかれてしまいます。書き方がおかしいのでしょうか。

sqldata = "SELECT ロットNO,マークロットNO,製品名,装置名,工程名,作業名,ロットタイプ,作業状態,ホールド状態,仕掛数量,投入日時,出荷予定日,備考,getdate('" & Now & "','yyyy/mm/dd hh24:mi:ss') - 投入日時 AS 停滞時間 " & _
"FROM AXIS.DK_TBL_ロット仕掛 " & _
"WHERE ロットNO Like '" & Trim(Me.TextLotNo1.Text) & "%' " & _
"AND マークロットNO Like '" & Me.TextMarkLotNo1.Text & "%' " & _
"AND 工程名 Like '" & Me.TextLocName1.Text & "%' " & _
"AND 製品名 Like '" & Me.TextManName1.Text & "%' " & _
"AND 製品名 = 'CXD2971GB'"

0
引用返信 編集キー/
■3237 / inTopicNo.4)  Re[3]: 日付の間隔の取得
□投稿者/ JT 二等兵(3回)-(2006/04/26(Wed) 10:54:27)

分類:[VB.NET] 

追記としてコメントさせてください。

求めたいことは、データ表示として**日**時間**分**秒という分かりやすい表示を出したいと思っています。
**日**時間**分**秒の表示にこだわってはいません。分かりやい表示にできればと思っています。



0
引用返信 編集キー/
■3239 / inTopicNo.5)  Re[4]: 日付の間隔の取得
□投稿者/ trapemiya 伍長(55回)-(2006/04/26(Wed) 11:52:36)
trapemiya さんの Web サイト

分類:[VB.NET] 

sqldata = "SELECT ロットNO,マークロットNO,製品名,装置名,工程名,作業名,ロットタイプ,作業状態,ホールド状態,仕掛数量,投入日時,出荷予定日,備考,getdate('" & Now & "','yyyy/mm/dd hh24:mi:ss') - 投入日時 AS 停滞時間 " & _

ではなくて、

sqldata = "SELECT ロットNO,マークロットNO,製品名,装置名,工程名,作業名,ロットタイプ,作業状態,ホールド状態,仕掛数量,投入日時,出荷予定日,備考,getdate() - 投入日時 AS 停滞時間 " & _
"FROM AXIS.DK_TBL_ロット仕掛 "

のような感じです。

0
引用返信 編集キー/
■3240 / inTopicNo.6)  Re[5]: 日付の間隔の取得
□投稿者/ ronals 二等兵(1回)-(2006/04/26(Wed) 12:47:23)

分類:[VB.NET] 

こんにちは

現在から投入日時をSubtractを私用して差を求めるとどうでしょうか?
TimeSpan型で帰ってきますので日、時、分、秒を取り出せます。

参考サイト「VBレスキュー(花ちゃん)」さんより
http://www.bcap.co.jp/hanafusa/dotnet/day03.htm#no8

0
引用返信 編集キー/
■3241 / inTopicNo.7)  Re[6]: 日付の間隔の取得
□投稿者/ ronals 二等兵(2回)-(2006/04/26(Wed) 12:50:27)

分類:[VB.NET] 


すみません誤字です、
「使用」が「私用」になってました。

0
引用返信 編集キー/
■3242 / inTopicNo.8)  Re[7]: 日付の間隔の取得
□投稿者/ JT 二等兵(6回)-(2006/04/26(Wed) 13:10:18)

分類:[VB.NET] 

みなさま、ご返答有り難うございます。

to trapemiya様

sqldata = "SELECT ロットNO,マークロットNO,製品名,装置名,工程名,作業名,ロットタイプ,作業状態,ホールド状態,仕掛数量,投入日時,出荷予定日,備考,getdate() - 投入日時 AS 停滞時間 " & _
"FROM AXIS.DK_TBL_ロット仕掛 "
で試してみたのですが、列名は無効というエラーが出てしまいます。

to ronals様
書き方がわかりません…。
初心者のもので。。勉強します。




0
引用返信 編集キー/
■3244 / inTopicNo.9)  Re[8]: 日付の間隔の取得
□投稿者/ trapemiya 伍長(56回)-(2006/04/26(Wed) 13:35:15)
trapemiya さんの Web サイト

分類:[VB.NET] 

>で試してみたのですが、列名は無効というエラーが出てしまいます。

ごめんなさい。SQL serverと思い込んでいました。お使いのデータベースは何でしょうか?

0
引用返信 編集キー/
■3245 / inTopicNo.10)  Re[9]: 日付の間隔の取得
□投稿者/ JT 二等兵(7回)-(2006/04/26(Wed) 13:38:33)

分類:[VB.NET] 

No3244に返信(trapemiyaさんの記事)
> >で試してみたのですが、列名は無効というエラーが出てしまいます。
>
> ごめんなさい。SQL serverと思い込んでいました。お使いのデータベースは何でしょうか?

Oracleです!

0
引用返信 編集キー/
■3247 / inTopicNo.11)  Re[8]: 日付の間隔の取得
□投稿者/ ronals 二等兵(3回)-(2006/04/26(Wed) 14:14:57)

分類:[VB.NET] 

DataGridを使ったことはないので答えが適切ではなかったかも知れません
すみません、

VB.NETで差を求める計算方法だと次のように書きます
Now.Subtract([DataGridの投入時間]).Days ' 投入時間から現在日時の日数
Now.Subtract([DataGridの投入時間]).Hours ' 投入時間から現在日時の日を含まない時数
Now.Subtract([DataGridの投入時間]).ToString ' 投入時間から現在日時の日.時:分:秒

※[DataGridの投入時間]の型はDateTime型


0
引用返信 編集キー/
■3251 / inTopicNo.12)  Re[10]: 日付の間隔の取得
□投稿者/ trapemiya 伍長(57回)-(2006/04/26(Wed) 16:16:18)
trapemiya さんの Web サイト

分類:[VB.NET] 

> Oracleです!

Oracleはたまにしかいじらないので、詳しくないです。
という前提で、(^^;

select (sysdate - 投入日時) day to second "停滞時間" from AXIS.DK_TBL_ロット仕掛;

としてあげれば、.NETの方へはTimeSpan型で入ってくると思いますので、それをFormatしてあげればいいかな?

#かやっちの分野なんだけどなぁ・・・

0
引用返信 編集キー/
■3259 / inTopicNo.13)  Re[9]: 日付の間隔の取得
□投稿者/ JT 二等兵(8回)-(2006/04/26(Wed) 17:38:27)

分類:[VB.NET] 

ご返信が遅れまして申し訳ございません。
ご回答有り難うございます。

to ronals様
qldata = "SELECT ロットNO,マークロットNO,製品名,装置名,工程名,作業名,ロットタイプ,作業状態,ホールド状態,仕掛数量,投入日時,出荷予定日,備考,Now.Subtract([投入日時]).ToString AS 停滞時間 " & _
"FROM AXIS.DK_TBL_ロット仕掛 " & _
で試してみたのですが、式がありませんというエラーが返されました。

to trapemiya様
試してみたのですが、エラーが出てしまいました。

Oracleでは僕が求めようとしていることはできないのでしょうか?
インターネット調べてるんですが、関数がないような。。。

0
引用返信 編集キー/
■3264 / inTopicNo.14)  Re[10]: 日付の間隔の取得
□投稿者/ ronals 二等兵(4回)-(2006/04/26(Wed) 18:43:54)

分類:[VB.NET] 

私が書いたコードはVB.NETの部分になりますので
SQL文には書くことはできません、

JTさんが書いた部分はSQL文なのでtrapemiyaさんの方法で書くことになります

Day to Secondは初めて見ました
今度Oracle9i以上のバージョンを使うときは試して見ます。

0
引用返信 編集キー/
■3267 / inTopicNo.15)  Re[10]: 日付の間隔の取得
□投稿者/ trapemiya 伍長(58回)-(2006/04/26(Wed) 20:24:39)
trapemiya さんの Web サイト

分類:[VB.NET] 

.NET Framework データ プロバイダのデータ型から .NET Framework のデータ型への変換
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpguide/html/cpconMappingNETDataProviderDataTypesToNETFrameworkDataTypes.asp

を見ると、.NETのTimeSpan型に変換されるのは、INTERVAL DAY TO SECOND型のみのようですので、Oracle9iより古いとSQL文だけでは実現できないかもしれませんね・・・。


0
引用返信 編集キー/
■3286 / inTopicNo.16)  Re[11]: 日付の間隔の取得
□投稿者/ trapemiya 伍長(59回)-(2006/04/27(Thu) 12:03:04)
trapemiya さんの Web サイト

分類:[VB.NET] 

>Oracle9iより古いとSQL文だけでは実現できないかもしれませんね・・・。

考え方を変えて、.NETへTimeSpan型で持っていくようなことはせず、SQL文の中で時間差を計算して、それをString型で.NETで持っていくようにすれば、Oracle9iより古いバージョンでも対応できると思います。
で、Date型同士の演算結果は、日を基準に表示されるようですので、
(sysdate - 投入日時) * 24 * 60 * 60
とすれば、秒単位で結果が返るはずです。ここから時、分、秒の3つの部分を求め、それら3つを文字列連結させて時間差の文字列を得ます。
文字列ですので、.NET側ではstring型として特に何もせずに表示されるはずです。
(以上、未検証)

0
引用返信 編集キー/
■3290 / inTopicNo.17)  Re[12]: 日付の間隔の取得
□投稿者/ JT 二等兵(10回)-(2006/04/27(Thu) 13:27:31)

分類:[VB.NET] 

> (sysdate - 投入日時) * 24 * 60 * 60
> とすれば、秒単位で結果が返るはずです。ここから時、分、秒の3つの部分を求め、それら3つを文字列連結させて時間差の文字列を得ます。
> 文字列ですので、.NET側ではstring型として特に何もせずに表示されるはずです。


長時間にわたりお付き合いしていただき有り難うございます。

trapemiya様のアドバイスどおり処理をしたら、秒数で表示がでました。
sqldata = "SELECT ロットNO,マークロットNO,製品名,装置名,工程名,作業名,ロットタイプ,作業状態,ホールド状態,仕掛数量,投入日時,出荷予定日,備考,((sysdate - 投入日時) * 24 * 60 * 60) AS 停滞時間 " & _
"FROM AXIS.DK_TBL_ロット仕掛 " & _
やはり小数点は消えない。。。
3つの文字列を連結?難しいですねぇ。調べてみます。





0
引用返信 編集キー/
■3330 / inTopicNo.18)  Re[13]: 日付の間隔の取得
□投稿者/ Jitta 軍曹(64回)-(2006/04/27(Thu) 22:38:51)

分類:[VB.NET] 

SQL で何とかしようとすると、こうなる。。。
select days, hours, minutes, floor(stops * 60) as seconds from
(select days, hours, floor(stops * 60) as minutes, (stops - floor(stops * 60)/60)*60 as stops from
(select days, floor(stops * 24) as hours, (stops - floor(stops * 24)/24)*24 as stops from
(select floor(stops) as days, stops - floor(stops) as stops from
(select sysdate - "投入日時" as stops from AXIS."DK_TBL_ロット仕掛"))))

大きい方から順に、元の数値のと差を保存しながら、求める。

 あと、オブジェクト名に ANSI コード以外のコードを使う場合は二重引用符で“囲まなければならない”ので、注意。なくても動くが、あくまで“たまたま動いている”ことに留意。


未確認:
select systdate as nowTime, "投入時間" from ...

として、DataColumn に型を TimeSpan、 Expression を "nowTime - 投入時間" とした列を追加してもいけそうな?

0
引用返信 編集キー/
■3391 / inTopicNo.19)  Re[14]: 日付の間隔の取得
□投稿者/ JT 二等兵(11回)-(2006/05/01(Mon) 11:45:10)

分類:[VB.NET] 

みなさまたくさんの貴重な意見有り難うございます。
今回は3286(trapemiya )の方法を用いて処理をしました。
本当に有り難うございました。


解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -