質問するログイン新規登録

質問編集履歴

2

コードの追加。

2016/03/17 06:25

投稿

makino
makino

スコア32

title CHANGED
File without changes
body CHANGED
@@ -20,7 +20,18 @@
20
20
  1つ1つ値を変えてSELECTする時の方法も教えて頂ければ幸いです。
21
21
 
22
22
 
23
+ 【追記】
24
+ 大変失礼致しました。
23
25
 
26
+ エラーとしては、
27
+ 「要求された名前、または序数に対応する項目がコレクションで見つかりません。」
28
+ と表示され、デバッグを押すと、
29
+ Debug.Print rs_rank!gaku_no, rs_rank!tensu, rs_rank!simei
30
+ こちらが示されます。
31
+
32
+ 宜しくお願いします。
33
+
34
+ ```SQL
24
35
  Sub Ranking()
25
36
 
26
37
  Dim cnn As ADODB.Connection 'データベース接続時、必須。
@@ -33,14 +44,110 @@
33
44
 
34
45
  Set cnn = CurrentProject.Connection '接続
35
46
 
36
- Set rs_seisek = New ADODB.Recordset 'Recordsetオブジェクトに参照(関連付け)する。
47
+ Set rs_seiseki = New ADODB.Recordset 'Recordsetオブジェクトに参照(関連付け)する。
37
48
  Set rs_gakusei = New ADODB.Recordset
38
49
  Set rs_rank = New ADODB.Recordset
39
50
 
40
- mySQL = "SELECT * FROM seiseki_table INNER JOIN gakusei_m ON seiseki_table.gaku_no = gakusei_m.gaku_no "
41
- rs_rank.Open mySQL, cnn, adOpenStatic, adLockOptimistic
51
+ Dim tensu_H(100) As Integer 'テストの点数
52
+ Dim gaku_H(100) As Integer '学生番号
53
+ Dim y(100) As Integer '順位
54
+ Dim n As Integer 'データの数
55
+ Dim Onaji As Integer
56
+ Dim Keep As Integer
42
57
 
43
- Debug.Print rs_rank!tensu, rs_rank!simei
44
58
 
59
+ rs_seiseki.Open "seiseki_table", cnn, adOpenKeyset, adLockOptimistic
60
+ rs_seiseki.MoveFirst
45
61
 
62
+ 'seiseki_tableのデータを配列に格納。
63
+ i = 0
64
+ Do Until rs_seiseki.EOF
65
+ tensu_H(i) = rs_seiseki!tensu
66
+ gaku_H(i) = rs_seiseki!gaku_no
67
+ rs_seiseki.MoveNext
68
+ i = i + 1
69
+ Loop
70
+
71
+ n = i - 1
72
+ '* テストの点数順に並び替え。学生番号も一緒に。
73
+ i = 0 'カウンター(比較元)
74
+ Do Until i >= n
75
+ k = 1 'カウンター(比較先)
76
+ Do Until i + k > n
77
+ If tensu_H(i) < tensu_H(i + k) Then
78
+ hn = gaku_H(i)
79
+ hx = tensu_H(i)
80
+ gaku_H(i) = gaku_H(i + k)
81
+ tensu_H(i) = tensu_H(i + k)
82
+ gaku_H(i + k) = hn
83
+ tensu_H(i + k) = hx
84
+ End If
85
+ k = k + 1
86
+ Loop
87
+ i = i + 1
88
+ Loop
89
+
90
+ '↓順位y(i)を付ける
91
+ Onaji = 0 '同じ順位が何回連続しているか。
92
+ Keep = 1 '同じ順位の際に、+1せずに保管しておく。
93
+ y(0) = 1 '先頭は必ず1位。
94
+ i = 1
95
+ Do Until i > n
96
+ If tensu_H(i - 1) = tensu_H(i) Then
97
+ y(i) = Keep
98
+ Onaji = Onaji + 1
99
+ Else
100
+ Keep = Keep + 1
101
+ y(i) = Keep + Onaji
102
+ Keep = Keep + Onaji
103
+ Onaji = 0
104
+ End If
105
+ i = i + 1
106
+ Loop
107
+
108
+ ' 学生番号の早い方へと並び替え
109
+ i = 0
110
+ Do Until i >= n
111
+ k = 1
112
+ Do Until i + k > n
113
+ If gaku_H(i) > gaku_H(i + k) Then
114
+ hn = gaku_H(i)
115
+ hx = tensu_H(i)
116
+ hy = y(i)
117
+ gaku_H(i) = gaku_H(i + k)
118
+ tensu_H(i) = tensu_H(i + k)
119
+ y(i) = y(i + k)
120
+ gaku_H(i + k) = hn
121
+ tensu_H(i + k) = hx
122
+ y(i + k) = hy
123
+ End If
124
+ k = k + 1
125
+ Loop
126
+ i = i + 1
127
+ Loop
128
+
129
+
130
+ i = 0
131
+ Do Until i >= n
132
+ rs_seiseki.MoveFirst
133
+ Do Until rs_seiseki.EOF
134
+ If rs_seiseki!gaku_no = gaku_H(i) Then
135
+
136
+ mySQL = "SELECT * FROM seiseki_table INNER JOIN gakusei_m ON (seiseki_table.gaku_no = gakusei_m.gaku_no) "
137
+ rs_rank.Open mySQL, cnn, adOpenStatic, adLockOptimistic
138
+
139
+ 'rs_rank.MoveFirst
140
+ Debug.Print rs_rank!gaku_no, rs_rank!tensu, rs_rank!simei
141
+ rs_rank.Close
142
+ i = i + 1
143
+ End If
144
+ rs_seiseki.MoveNext
145
+ Loop
146
+ Loop
147
+
148
+ cnn.Close
149
+ Set cnn = Nothing
150
+
46
- End Sub
151
+ End Sub
152
+
153
+ ```

1

誤字修正

2016/03/17 06:25

投稿

makino
makino

スコア32

title CHANGED
File without changes
body CHANGED
File without changes