SQL


SQLの基礎

SQLは全てクエリーに置き換えることができます。しかし、クエリーの数が増えるとデータベース内での 管理がわずらわしくなります。また、抽出条件が違うだけのクエリーを複数作るよりもDAOやADOでSQL を使って操作する方が簡単です。
以下は基本的なSQLの構文です。

■選択クエリー SELECT [フィールド名] FROM [テーブル名]
******************************************************************
'tbl_顧客リストを選択

  SELECT * FROM tbl_顧客リスト

'tbl_顧客リストをフォームのレコードソースにする場合、末尾に;を追加

  SELECT  * FROM tbl_顧客リスト;

■更新クエリー UPDATE [テーブル名] SET [フィールド名] = 値
******************************************************************
'tbl_顧客リストの「分類=3」を選択して「分類=4」に更新する

UPDATE tbl_顧客リスト SET 分類 = 4 WHERE 分類 = 3

■追加クエリー
 INSERT INTO [追加するテーブル名] FROM [抽出するテーブル名]
******************************************************************
'tbl_w顧客リストのデータをtbl_顧客リストに追加する

INSERT INTO tbl_顧客リスト SELECT tbl_w顧客リスト.*
 FROM tbl_w顧客リスト

■削除クエリー DELETE FROM [テーブル名] WHERE [条件]
******************************************************************
'tbl_顧客リストのデータを全て削除する

DELETE FROM tbl_顧客リスト WHERE *


SQLの応用

SQLをコマンドボタンのイベントに貼り付けます。

Private Sub 削除_Click()
Dim msg, Style, Title, Help, Ctxt, Response, MyString
Dim frm As String
'メッセージを定義します。
  msg = "tbl_伝票を初期化します。よろしいですか?"
' ボタンを定義します。
  Style = vbYesNo + vbInformation + vbDefaultButton2
  Title = "伝票の初期化"  ' タイトルを定義します。

'メッセージの非表示
  DoCmd.SetWarnings False

' [はい] がクリックされた場合、メッセージを表示します。
  Response = MsgBox(msg, Style, Title, Help, Ctxt)
  If Response = vbYes Then
   DoCmd.RunSQL "Delete tbl_伝票 * FROM tbl_伝票;"

' [いいえ] がクリックされた場合、
  Else
   DoCmd.Close acForm, "frm_伝票"
  End If

End Sub

コンボボックスで検索する

コンボボックスウィザードで検索を行うコンボボックスをつくることができます。

Private Sub 検索コンボ_AfterUpdate()
    ' コントロールの値と一致するレコードを検索する
    Dim rs As Object

    Set rs = Me.Recordset.Clone
    rs.FindFirst "[フリガナ] = '" & Me![検索コンボ] & "'"
    Me.Bookmark = rs.Bookmark
End Sub

上記の例では、検索コンボの値がフォームの「フリガナ」コントロールの値と一致するレコードまで移動します。
検索は指定した条件のレコードまで移動するだけなので、フォーム上で利用するにはフィルターやクエリーの方が効果的 だと思います。


並べ替えを行う

フォームのレコードを並べ替えて表示するには、レコードソースのクエリーに並べ替え条件を指定 すれば良いのですが、表示後に再度並べ替えを行うには「OrderBy = 並べ替え条件」を利用します。

'フォーム読み込み時に「frm_UserList」の並べ替えを解除する
Private Sub Form_Load()
  Forms![UserList].OrderBy = ""

End Sub
**************************************************************************
Private Sub コマンド1_Click()
'「コマンド1」がクリックされたら「frm_UserList」の「フルガナ」フィールドで
'並べ替えを昇順(ASD)で実行する
  Forms![UserList].OrderBy = "フルガナ ASC"

End Sub
**************************************************************************
Private Sub フレーム1_AfterUpdate()
'「フレーム1」のオプション値が更新されたら以下の条件で並べ替えを実行する
 Select Case Me!フレーム1
  Case 1 'オプション値 1
    Forms![UserList].OrderBy = "顧客番号 ASC" '昇順
  Case 2 'オプション値 2
    Forms![UserList].OrderBy = "フルガナ ASC" '昇順
  Case 3 'オプション値 3
    Forms![UserList].OrderBy = "電話番号 ASC" '昇順
  Case 4 'オプション値 4
    Forms![UserList].OrderBy = "生年月日 DESC" '降順
  Case 5 'オプション値 5
    Forms![UserList].OrderBy = "入会日 EDSC" '降順
  Case 6 'オプション値 6
    Forms![UserList].OrderBy = "登録日 DESC" '降順
 End Select
End Sub

複数条件で並べ替えを行う

複数条件で並べ替えを行うには、「OrderBy」句の条件を ,(コンマ)で区切ります。
また、条件式を使うことによってユーザーに並べ替え条件を指定させることができます。

'フォーム読み込み時に「frm_UserList」の並べ替えを解除する
Private Sub Form_Load()
  Forms![UserList].OrderBy = ""

End Sub
**************************************************************************
Private Sub フレーム1_AfterUpdate()
'「フレーム」のオプション値が更新されたら以下の条件で並べ替えを実行する
 Select Case Me!フレーム1
  Case 1 'オプション値 1 登録日が新しいフリガナ昇順
    Forms![UserList].OrderBy = "登録日 DESC , フルガナ ASC"
  Case 2 'オプション値 2 年齢順でフリガナ昇順
    Forms![UserList].OrderBy = "生年月日 ASC , フルガナ ASC"
 End Select

End Sub
**************************************************************************
<<<<<<<<<<<<<<<     複数条件での並べ替え     >>>>>>>>>>>>>>>>>>
フィールドリストをレコードソースとする複数のコンボボックスに、対応する
オプションボタンで昇順・降順を設定して並べ替えをコマンドボタンで実行する
---------------------------------------------------------------------------
Private Sub コマンド_Click()
 Dim Sortkey1 As String '1番目のフィールド
 Dim Sortkey2 As String '2番目のフィールド
 Dim Sortkey3 As String '3番目のフィールド
 Dim Order As String '並べ替え順序

 Select Case Me!コンボ1 '1番目のフィールド
  Case 1
    Sortkey1 = Me!コンボ1 & "ASC" '昇順
  Case 2 'オプション値 2 年齢順でフリガナ昇順
    Sortkey1 = Me!コンボ1 & "DESC" '降順
 End Select

 Select Case Me!コンボ2 '2番目のフィールド
  Case 1
    Sortkey2 = Me!コンボ2 & "ASC" '昇順
  Case 2 'オプション値 2 年齢順でフリガナ昇順
    Sortkey2 = Me!コンボ2 & "DESC" '降順
 End Select

 Select Case Me!コンボ3 '3番目のフィールド
  Case 1
    Sortkey3 = Me!コンボ3 & "ASC" '昇順
  Case 2 'オプション値 2 年齢順でフリガナ昇順
    Sortkey3 = Me!コンボ3 & "DESC" '降順
 End Select

'1番目と2番目だけ選択
 If IsNull(Me!コンボ1) = False And
    IsNull(Me!コンボ2) = False And
    IsNull(Me!コンボ3) = True Then
   Sort = Sortkey1 & "," & Sortkey2
 ElseIf IsNull(Me!コンボ1) = False And
    IsNull(Me!コンボ2) = False And
    IsNull(Me!コンボ3) = False Then
   Sort = Sortkey1 & "," & Sortkey2 & "," &  Sortkey3
 End If

 Forms![UserList].OrderBy = Sort
 Forms![UserList].OrderByOn = True

End Sub