宜しくお願いします。初心者です。
seiseki_tableとgakusei_mというテーブルに入っているデータを合わせて、
表示させたいと思っています。
seiseki_table.gaku_no(学生番号)の順番を整列させてから、
SQLのSELECTを使ってgakusei_mのテーブルを抽出したいのですが、
書き方がよくわかりません。
まず、Debug.Print rs_rank!seiseki_table.gaku_no
とするとエラーになってしまいます。
Debug.Print rs_rank!gaku_no
でもエラーになるので、複数のテーブルで利用してる時はどのように書けばよろしいでしょうか?
また、
i=1
mySQL = "SELECT * FROM seiseki_table INNER JOIN gakusei_m ON i = gakusei_m.gaku_no "
i=i+1
で、ループするようなこともできなかったので、
1つ1つ値を変えてSELECTする時の方法も教えて頂ければ幸いです。
【追記】
大変失礼致しました。
エラーとしては、
「要求された名前、または序数に対応する項目がコレクションで見つかりません。」
と表示され、デバッグを押すと、
Debug.Print rs_rank!gaku_no, rs_rank!tensu, rs_rank!simei
こちらが示されます。
宜しくお願いします。
SQL
1Sub Ranking() 2 3Dim cnn As ADODB.Connection 'データベース接続時、必須。 4 5Dim rs_seiseki As ADODB.Recordset '(レコードセット用の変数の)宣言。ただ宣言してるだけ。 6Dim rs_gakusei As ADODB.Recordset 7Dim rs_rank As ADODB.Recordset 8 9Dim mySQL As String 'これもただの宣言。 10 11Set cnn = CurrentProject.Connection '接続 12 13Set rs_seiseki = New ADODB.Recordset 'Recordsetオブジェクトに参照(関連付け)する。 14Set rs_gakusei = New ADODB.Recordset 15Set rs_rank = New ADODB.Recordset 16 17Dim tensu_H(100) As Integer 'テストの点数 18Dim gaku_H(100) As Integer '学生番号 19Dim y(100) As Integer '順位 20Dim n As Integer 'データの数 21Dim Onaji As Integer 22Dim Keep As Integer 23 24 25rs_seiseki.Open "seiseki_table", cnn, adOpenKeyset, adLockOptimistic 26rs_seiseki.MoveFirst 27 28'seiseki_tableのデータを配列に格納。 29i = 0 30Do Until rs_seiseki.EOF 31 tensu_H(i) = rs_seiseki!tensu 32 gaku_H(i) = rs_seiseki!gaku_no 33 rs_seiseki.MoveNext 34 i = i + 1 35Loop 36 37n = i - 1 38'* テストの点数順に並び替え。学生番号も一緒に。 39i = 0 'カウンター(比較元) 40Do Until i >= n 41 k = 1 'カウンター(比較先) 42 Do Until i + k > n 43 If tensu_H(i) < tensu_H(i + k) Then 44 hn = gaku_H(i) 45 hx = tensu_H(i) 46 gaku_H(i) = gaku_H(i + k) 47 tensu_H(i) = tensu_H(i + k) 48 gaku_H(i + k) = hn 49 tensu_H(i + k) = hx 50 End If 51 k = k + 1 52 Loop 53 i = i + 1 54Loop 55 56'↓順位y(i)を付ける 57Onaji = 0 '同じ順位が何回連続しているか。 58Keep = 1 '同じ順位の際に、+1せずに保管しておく。 59y(0) = 1 '先頭は必ず1位。 60i = 1 61Do Until i > n 62 If tensu_H(i - 1) = tensu_H(i) Then 63 y(i) = Keep 64 Onaji = Onaji + 1 65 Else 66 Keep = Keep + 1 67 y(i) = Keep + Onaji 68 Keep = Keep + Onaji 69 Onaji = 0 70 End If 71 i = i + 1 72Loop 73 74' 学生番号の早い方へと並び替え 75i = 0 76Do Until i >= n 77 k = 1 78 Do Until i + k > n 79 If gaku_H(i) > gaku_H(i + k) Then 80 hn = gaku_H(i) 81 hx = tensu_H(i) 82 hy = y(i) 83 gaku_H(i) = gaku_H(i + k) 84 tensu_H(i) = tensu_H(i + k) 85 y(i) = y(i + k) 86 gaku_H(i + k) = hn 87 tensu_H(i + k) = hx 88 y(i + k) = hy 89 End If 90 k = k + 1 91 Loop 92 i = i + 1 93Loop 94 95 96i = 0 97Do Until i >= n 98 rs_seiseki.MoveFirst 99 Do Until rs_seiseki.EOF 100 If rs_seiseki!gaku_no = gaku_H(i) Then 101 102 mySQL = "SELECT * FROM seiseki_table INNER JOIN gakusei_m ON (seiseki_table.gaku_no = gakusei_m.gaku_no) " 103 rs_rank.Open mySQL, cnn, adOpenStatic, adLockOptimistic 104 105 'rs_rank.MoveFirst 106 Debug.Print rs_rank!gaku_no, rs_rank!tensu, rs_rank!simei 107 rs_rank.Close 108 i = i + 1 109 End If 110 rs_seiseki.MoveNext 111 Loop 112Loop 113 114cnn.Close 115Set cnn = Nothing 116 117End Sub 118
回答1件
あなたの回答
tips
プレビュー