質問編集履歴

4

いただいた回答を受けての改善、その実行結果を記載

2016/09/02 08:37

投稿

taketake221
taketake221

スコア17

test CHANGED
File without changes
test CHANGED
@@ -14,29 +14,25 @@
14
14
 
15
15
 
16
16
 
17
+ ※いただいた回答のご指摘を反映させ、変数宣言でDouble型からDecimal型へ変更、ラベルコントロールへの表示処理にあたってString型への変換を行なって実行しましたが、
18
+
17
- 実行結果がいずれも 0 と表示されており正し結果得られていせん
19
+ valueAのみ正しい結果が表示され、valueBからvalueFまでの値につ依然 0 のまでした
18
20
 
19
21
 
20
22
 
21
- ※ご指摘を受け、SQL文を改善後、Catch ex As Exception 部分の内容を確認すると、
23
+ ![改善後実行結果](97ec426c5258f076259c5b99474e10be.png)
22
-
23
- 「型 'System.Decimal' のオブジェクトを型 'System.String' にキャストできません」
24
-
25
- と表示されていました。
26
24
 
27
25
 
28
26
 
27
+ 配列に読み込む部分で繰り返し処理に問題があるのかとも考えましたが、
28
+
29
- テーブルの列のデータ型設定の問題なでしょうか
29
+ 初級者ゆえ解決策が思い浮かびません。
30
30
 
31
31
 
32
32
 
33
+ 関数定義と呼び出し、取得した値を配列に読み込む処理の記述をはじめ、誤りをご指摘いただきたいです。
33
34
 
34
-
35
- また、関数定義と呼び出し、また取得した値を配列に読み込む処理の記述について不安があるため、誤りほかご指摘いただきたいです。
36
-
37
-
38
-
39
- 初級者ですので、どうぞよろしくお願いします。
35
+ どうぞよろしくお願いします。
40
36
 
41
37
 
42
38
 
@@ -60,21 +56,21 @@
60
56
 
61
57
  'SQLserverから値を取得する関数呼び出し
62
58
 
63
- Dim values() As Double = Getvalues()
59
+ Dim values() As Decimal = Getvalues()
64
60
 
65
61
 
66
62
 
67
- valueA_Lbl.Text = values(0)
63
+ valueA_Lbl.Text = values(0).ToString()
68
64
 
69
- valueB_Lbl.Text = values(1)
65
+ valueB_Lbl.Text = values(1).ToString()
70
66
 
71
- valueC_Lbl.Text = values(2)
67
+ valueC_Lbl.Text = values(2).ToString()
72
68
 
73
- valueD_Lbl.Text = values(3)
69
+ valueD_Lbl.Text = values(3).ToString()
74
70
 
75
- valueE_Lbl.Text = values(4)
71
+ valueE_Lbl.Text = values(4).ToString()
76
72
 
77
- valueF_Lbl.Text = values(5)
73
+ valueF_Lbl.Text = values(5).ToString()
78
74
 
79
75
 
80
76
 
@@ -84,7 +80,7 @@
84
80
 
85
81
  'データベースから値を取得する関数
86
82
 
87
- Private Function Getvalues() As Double()
83
+ Private Function Getvalues() As Decimal()
88
84
 
89
85
 
90
86
 
@@ -126,11 +122,7 @@
126
122
 
127
123
  Try
128
124
 
129
-
130
-
131
125
  connection.Open()
132
-
133
-
134
126
 
135
127
  Dim dr As SqlDataReader = command.ExecuteReader()
136
128
 
@@ -140,11 +132,11 @@
140
132
 
141
133
  Dim Count As Integer = 0
142
134
 
143
- Dim valuelist(5) As Double
135
+ Dim valuelist(5) As Decimal
144
136
 
145
137
  While (dr.Read())
146
138
 
147
- valuelist(Count) = dr.GetString(Count)
139
+ valuelist(Count) = dr.GetDecimal(Count)
148
140
 
149
141
  Count = Count + 1
150
142
 

3

書式改善

2016/09/02 08:37

投稿

taketake221
taketake221

スコア17

test CHANGED
File without changes
test CHANGED
@@ -1,12 +1,6 @@
1
1
  ※Visual Studio 2013、SQL server 2012を使用。OSはWindows7です。
2
2
 
3
-
4
-
5
- 初級者です。記述不足等ありましたら申し訳ありません、ご指摘ください。
6
-
7
3
  以下のようなテーブルから取得した値を関数側で配列に格納し、その配列を戻り値として返したいです。
8
-
9
-
10
4
 
11
5
  取得する値はvalueA から valueFまでの数値のみ(フィールドのデータ型はdecimal(3,2))で、
12
6
 
@@ -19,8 +13,6 @@
19
13
  ![テーブル構成 : tbl_valueTest](493849a76961cf9d120bfde94fe58f26.jpeg)
20
14
 
21
15
 
22
-
23
- 以下、書籍やネット上の情報を参考に見よう見まねで記述したソースコードです。
24
16
 
25
17
  実行結果がいずれも 0 と表示されており、正しい結果は得られていません。
26
18
 
@@ -44,7 +36,7 @@
44
36
 
45
37
 
46
38
 
47
- どうぞよろしくお願いします。
39
+ 初級者ですので、どうぞよろしくお願いします。
48
40
 
49
41
 
50
42
 

2

記載修正(実装環境を上部へ、ほか)

2016/09/02 07:24

投稿

taketake221
taketake221

スコア17

test CHANGED
@@ -1 +1 @@
1
- SQLserverから取得した値を配列に格納し、戻り値にしたいです。
1
+ SQLserverから取得した値を配列に格納し、関数の戻り値にしたいです。
test CHANGED
@@ -1,3 +1,7 @@
1
+ ※Visual Studio 2013、SQL server 2012を使用。OSはWindows7です。
2
+
3
+
4
+
1
5
  初級者です。記述不足等ありましたら申し訳ありません、ご指摘ください。
2
6
 
3
7
  以下のようなテーブルから取得した値を関数側で配列に格納し、その配列を戻り値として返したいです。
@@ -22,13 +26,7 @@
22
26
 
23
27
 
24
28
 
25
- 特に関数定義と呼び出し、また取得した値を配列に読み込む処理の記述について不安があるため、
26
-
27
- 誤りほかご指摘いただきたいです。
28
-
29
-
30
-
31
- ※SQL文を改善後、Catch ex As Exception 部分の内容を確認すると、
29
+ ご指摘を受け、SQL文を改善後、Catch ex As Exception 部分の内容を確認すると、
32
30
 
33
31
  「型 'System.Decimal' のオブジェクトを型 'System.String' にキャストできません」
34
32
 
@@ -42,11 +40,11 @@
42
40
 
43
41
 
44
42
 
45
- 具体性欠け質問ですがどうぞよろしくお願します。
43
+ また、関数定義と呼び出し、また取得した値を配列読み込む処理の記述について不安があため誤りほかご指摘ただきたいです。
46
44
 
47
45
 
48
46
 
49
- ※Visual Studio 2013、SQL server 2012を使用。OSはWindows7です。
47
+ どうぞよろしくお願いします。
50
48
 
51
49
 
52
50
 

1

いただいた回答を受けて、発生している問題、テーブルの列のデータ型を記載。

2016/09/02 07:17

投稿

taketake221
taketake221

スコア17

test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- 取得する値はvalueA から valueFまでの数値のみで、
7
+ 取得する値はvalueA から valueFまでの数値のみ(フィールドのデータ型はdecimal(3,2))で、
8
8
 
9
9
  ソース上は確認用にラベルコントロールに値を表示させるよう記述していますが、
10
10
 
@@ -25,6 +25,20 @@
25
25
  特に関数定義と呼び出し、また取得した値を配列に読み込む処理の記述について不安があるため、
26
26
 
27
27
  誤りほかご指摘いただきたいです。
28
+
29
+
30
+
31
+ ※SQL文を改善後、Catch ex As Exception 部分の内容を確認すると、
32
+
33
+ 「型 'System.Decimal' のオブジェクトを型 'System.String' にキャストできません」
34
+
35
+ と表示されていました。
36
+
37
+
38
+
39
+ テーブルの列のデータ型設定の問題なんでしょうか。
40
+
41
+
28
42
 
29
43
 
30
44
 
@@ -100,19 +114,19 @@
100
114
 
101
115
  Dim SQL As String
102
116
 
103
- '特定の「FacilityID」の日付が最新のレコードを取得したいです
117
+ '特定の「FacilityID」の日付が最新のレコードを取得したいです(改善部分)
104
118
 
105
119
  SQL = "SELECT valueA, valueB, valueC, valueD, valueE, valueF" &
106
120
 
107
- "from tbl_valueTest as A" &
121
+ " from tbl_valueTest as A" &
108
122
 
109
- "WHERE Exists(SELECT * from tbl_valueTest" &
123
+ " WHERE Exists(SELECT * from tbl_valueTest" &
110
124
 
111
- "group by FacilityID" &
125
+ " group by FacilityID" &
112
126
 
113
- "having FacilityID = A.FacilityID and MAX(date) = A.date)" &
127
+ " having FacilityID = A.FacilityID and MAX(date) = A.date)" &
114
128
 
115
- "and FacilityID = 1"
129
+ " and FacilityID = 1"
116
130
 
117
131
 
118
132