初めまして。
VB6.0を始めて1ヶ月の初心者です。
調べてもどうしても分からない部分があったので質問させて下さい。
もし、分かる方がいらっしゃいましたら教えて頂けると嬉しいです。
まだ、初心者のため専門用語の知識が薄く。文章の内容が分かりづらかったり
ソースの書き方がめちゃくちゃだったりして見づらいかもしれませんが
見ていただけたら嬉しいです。よろしくお願いします。
【質問内容】
10問質問項目があり、それに対して、有り無しをチェックボックスにて回答していきます。
チェックボックスには
チェックボックス1 = flgSyokuji1
チェックボックス2 = flgSyokuji2
チェックボックス3 = flgSyokuji3
チェックボックス4 = flgSyokuji4
チェックボックス5 = flgSyokuji5
チェックボックス6 = flgSyokuji6
チェックボックス7 = flgSyokuji7
チェックボックス8 = flgSyokuji8
チェックボックス9 = flgSyokuji9
チェックボックス10 = flgSyokuji10
と各々の変数に代入してフラグ(チェック有:1,チェック無:0)を持たせてあります。
データベースはAccess2000のADOを使用しているのですが、
ロード時にテーブル「tb_syokuji」を参照し最新のIDのフラグの有り無しを確認し
全ての変数に代入します。
その結果を元に、もし「flgSyokuji1 = 1」だった場合は「1〜9」の整数より
乱数を出し、「SyokujiNo1」という変数に代入。
「flgSyokuji2 = 1」だった場合は「10〜15」の整数より乱数を出し、
「SyokujiNo2」という変数に代入。
「flgSyokuji3 = 1」だった場合は「16〜23」の整数より乱数を出し、
「SyokujiNo3」という変数に代入。
「flgSyokuji4 = 1」だった場合は「24〜29」の整数より乱数を出し、
「SyokujiNo4」という変数に代入。
「flgSyokuji5 = 1」だった場合は「29〜32」の整数より乱数を出し、
「SyokujiNo5」という変数に代入。
「flgSyokuji6 = 1」だった場合は「33〜35」の整数より乱数を出し、
「SyokujiNo6」という変数に代入。
「flgSyokuji7 = 1」だった場合は「36〜37」の整数より乱数を出し、
「SyokujiNo7」という変数に代入。
「flgSyokuji8 = 1」だった場合は「38〜44」の整数より乱数を出し、
「SyokujiNo8」という変数に代入。
「flgSyokuji9 = 1」だった場合は「45〜46」の整数より乱数を出し、
「SyokujiNo9」という変数に代入。
「flgSyokuji10 = 1」だった場合は「47〜58」の整数より乱数を出し、
「SyokujiNo10」という変数に代入。
その結果を元に、SyokujiNo1〜SyokujiNo10の中からランダムにSyokujiNoという変数に
代入したいと思っているのですが・・・。
どのように式を書いたらよいのかが分かりません。
よろしければ教えて下さい。
【ソース】
Option Explicit
Private cn As ADODB.Connection
Private rs As ADODB.Recordset
Private strSQL As String
Private SyokujiNo As Integer
Dim flgSyokuji1 As Integer
Dim flgSyokuji2 As Integer
Dim flgSyokuji3 As Integer
Dim flgSyokuji4 As Integer
Dim flgSyokuji5 As Integer
Dim flgSyokuji6 As Integer
Dim flgSyokuji7 As Integer
Dim flgSyokuji8 As Integer
Dim flgSyokuji9 As Integer
Dim flgSyokuji10 As Integer
Dim ret As Integer
'------------------------------------------------------------------------------------------------
Private Sub Form_Load()
'***********************************************************************************************
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& " Data Source = C:\Database\db1.mdb"
cn.Open
'***********************************************************************************************
Set rs = New ADODB.Recordset
rs.Open "select * from tb_syokuji where id = 59", cn
flgSyokuji1 = rs("flgSyokuji1")
flgSyokuji2 = rs("flgSyokuji2")
flgSyokuji3 = rs("flgSyokuji3")
flgSyokuji4 = rs("flgSyokuji4")
flgSyokuji5 = rs("flgSyokuji5")
flgSyokuji6 = rs("flgSyokuji6")
flgSyokuji7 = rs("flgSyokuji7")
flgSyokuji8 = rs("flgSyokuji8")
flgSyokuji9 = rs("flgSyokuji9")
flgSyokuji10 = rs("flgSyokuji10")
'***********************************************************************************************
End Sub
'------------------------------------------------------------------------------------------------
Private Sub SSTab1_Click(PreviousTab As Integer)
Set rs = New ADODB.Recordset
Dim SyokujiNo1 As Integer
Dim SyokujiNo2 As Integer
Dim SyokujiNo3 As Integer
Dim SyokujiNo4 As Integer
Dim SyokujiNo5 As Integer
Dim SyokujiNo6 As Integer
Dim SyokujiNo7 As Integer
Dim SyokujiNo8 As Integer
Dim SyokujiNo9 As Integer
Dim SyokujiNo10 As Integer
If flgSyokuji1 = 1 Then
SyokujiNo1 = Int(Rnd(1) * 9) + 1
Else
SyokujiNo1 = 59
End If
If flgSyokuji2 = 1 Then
SyokujiNo2 = Int(Rnd(10) * 15) + 1
Else
SyokujiNo2 = 59
End If
If flgSyokuji3 = 1 Then
SyokujiNo3 = Int(Rnd(16) * 23) + 1
Else
SyokujiNo3 = 59
End If
If flgSyokuji4 = 1 Then
SyokujiNo4 = Int(Rnd(24) * 29) + 1
Else
SyokujiNo4 = 59
End If
If flgSyokuji5 = 1 Then
SyokujiNo5 = Int(Rnd(30) * 32) + 1
Else
SyokujiNo5 = 59
End If
If flgSyokuji6 = 1 Then
SyokujiNo6 = Int(Rnd(33) * 35) + 1
Else
SyokujiNo6 = 59
End If
If flgSyokuji7 = 1 Then
SyokujiNo7 = Int(Rnd(36) * 37) + 1
Else
SyokujiNo7 = 59
End If
If flgSyokuji8 = 1 Then
SyokujiNo8 = Int(Rnd(38) * 44) + 1
Else
SyokujiNo8 = 59
End If
If flgSyokuji9 = 1 Then
SyokujiNo9 = Int(Rnd(45) * 46) + 1
Else
SyokujiNo9 = 59
End If
If flgSyokuji10 = 1 Then
SyokujiNo10 = Int(Rnd(47) * 58) + 1
Else
SyokujiNo10 = 59
End If
'!!ランダムのランダム未解決!!
SyokujiNo = ○○○○○←ココの部分に式を書こうと思っているのですか・・・
rs.Open "select * from ms_snaiyou where cd=" & SyokujiNo, cn
Text7.Text = rs("strNaiyou").Value
End Sub
変数を配列にすると簡単ですよ!
変数の配列は分かりますか?
宣言は、
Dim flgSyokuji(10) As Integer
Dim SyokujiNo(10) As Integer
使い方は、
SyokujiNo1の部分がSyokujiNo(1)、SyokujiNo2の部分がSyokujiNo(2)…
という感じになります。
こうすると、
>flgSyokuji1 = rs("flgSyokuji1")
>flgSyokuji2 = rs("flgSyokuji2")
>flgSyokuji3 = rs("flgSyokuji3")
といった部分も簡単にできます。
For i = 1 To 10
flgSyokuji(i) = rs("flgSyokuji" & CStr(i)).Value
Next i
>その結果を元に、SyokujiNo1〜SyokujiNo10の中からランダムにSyokujiNo
…すみません。SyokujiNoを配列にすると配列ではないSyokujiNoは使えません。
ここでは、SyokujiNo→SyokujiNo_Rndとします。
1)1から10までの乱数を発生(仮に、intRansu変数にセットしたとします)
2)SyokujiNo_Rnd = SyokujiNo(intRansu)
といった感じでしょうか。
因みに、ランダムのランダム(常に同じ値になると言うことですよね?)は、
Form_Loadイベントなどに、「Randomize」を入れてみてください。
サンプルコードを作る時間がなくてすみません<(__)>
SyokujiNo1〜SyokujiNo10を配列変数、たとえば
Dim Answer(1 to 10) as Integer
として、Answer()に値を代入していきます。
で、問題となっているランダムのランダム部分で
Index = Int(Rnd(1) * 10) + 1
SyokujiNo = Answer(Index)
とすればよいのではないでしょうか?
余談:
チェックボックスもflgSyokuji1〜10も配列にしてみては
どうでしょうか?
For i = 1 to 10
FieldName = "flgSyokuji" & i
flgSyokuji(i) = rs(FieldName).Value
chkAnswer(i).Value = flgSyokuji(i)
Next
など。もちろん変数宣言はお忘れなく。
すみません、まささんとかぶりました(^^;
編集 削除まささんとしんごさんのおかげで無事に解決することができました!!
こんなやり方があったんですね。また、一つお勉強になりました。
本当に、ありがとうございました^^