03.コードを書いてみよう (3) |
Private Sub Form_Load() Set dgrCategoly.DataSource = Nothing -----(1) With adoCategoly.Recordset -----(2) .MoveFirst -----(3) While Not (.EOF) -----(4) lstCategoly.AddItem .Fields("CategolyID") & " " & .Fields("Categoly") -----(5) .MoveNext -----(6 Wend .MoveFirst End With Set dgrCategoly.DataSource = adoCategoly -----*(1) dgrCategoly.Columns(0).Visible = False -----(7) dgrCategoly_RowColChange 0, 0 -----(8) End Sub |
Private Sub dgrCategoly_RowColChange(LastRow As Variant, ByVal LastCol As Integer) categolyID = adoCategoly.Recordset.Fields("categolyID") -----(1) adoPhotos.ConnectionString = adoCategoly.ConnectionString -----(2) adoPhotos.RecordSource = "select * from Photos where categoly=" & categolyID -----(3) adoPhotos.Refresh -----(4) Set dgrPhotos.DataSource = adoPhotos.Recordset -----(5) End Sub |
さて、上の3."select..."という文字列が出てきましたが、これはSQLと呼ばれるものです。
SQLに関しての詳細は述べませんが、簡単に言うと、データベースに対しての問合せや何かの変更、挿入をするための標準的な言語のことです。
"select ..."は、テーブルからある条件で抽出する問合せ文です。ここでは、「Photoテーブルのcategolyカラムの値が変数CategolyIDと等しいレコードを抽出せよ」という命令文になっています。また、抽出結果は普通のテーブルと同じように扱うことができます。
5.の行の、adoPhotos.Recordsetは上記問合せ文の結果セットが入っていることになります。
この操作により、中段のデータグリッド(選択されたカテゴリーの一覧)が自動的に表示されることになります。
Private Sub dgrPhotos_RowColChange(LastRow As Variant, ByVal LastCol As Integer) Dim sep() As String categoly = adoPhotos.Recordset.Fields("Categoly") -----(1) For i = 0 To lstCategoly.ListCount - 1 -----(2) sep = Split(lstCategoly.List(i), " ") -----(3) If sep(0) = categoly Then lstCategoly.Text = lstCategoly.List(i) Exit For End If Next End Sub |
Private Sub cmdOK_Click() Dim sep() As String sep = Split(lstCategoly.Text, " ") adoPhotos.Recordset.Fields("Categoly") = sep(0) adoPhotos.Recordset.Update -----(1) adoPhotos.Recordset.Requery -----(2) End Sub |
Private Sub cmdCancel_Click() adoPhotos.Recordset.CancelUpdate -----(1) adoPhotos.Refresh End Sub |
Private Sub cmdNew_Click() CommonDialog1.FileName = "" -----(1) CommonDialog1.ShowOpen If CommonDialog1.FileName <> "" Then adoPhotos.Recordset.AddNew -----(2) adoPhotos.Recordset.Fields("Categoly") = 0 -----(3) adoPhotos.Recordset.Fields("FileName") = CommonDialog1.FileName adoPhotos.Recordset.Update -----(4) adoPhotos.Refresh End If End Sub |
プログラムソースの内容は以上です。
全体的に、そう難しくはないと思いますが、一番のポイントは2つ目のADODCコントロール「adoPhotos」のレコードソースを、カテゴリの一覧から選択されたもので絞込みを行い、その都度表示しているという所です。
「SQL文」という言葉が出ましたが、SQL言語を使うことで上のように絞込み検索を行なうことができるほか、複数レコードの一括更新やテーブルの挿入、複数テーブルを連結して1テーブルのように見せるなど複雑な処理を簡単な命令で実現することができます。
ADODCコントロールを使ってプログラムを書くことで実用的なプログラムにすることができるのです。
今回の講座は長かったですが、色々な応用ができると思いますので是非モノにしてください。
戻る