Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6158 / 9994 ←次へ | 前へ→

【7044】Re:フォームからテーブル操作について
回答  小僧  - 06/1/10(火) 11:09 -

引用なし
パスワード
   ▼inu さん:

>なにか効率の良い書き方があればアドバイスして頂けると幸いです

前提条件として、文書管理台帳のフィールド名が
フォームと同じ順序で並んでいる必要があります。

Option Compare Database
Option Explicit

Dim CName(1 To 10) As String
Private Sub Form_Load()
  CName(1) = "Mgt"
  CName(2) = "Namea"
  CName(3) = "RevNum"
  CName(4) = "Make"
  CName(5) = "Ena"
  CName(6) = "Last"
  CName(7) = "LastDate"
  CName(8) = "Term"
  CName(9) = "Abo"
  CName(10) = "AboDate"
  Me.フレーム38.value = 1
End Sub

'-------------------------------------------------------------------
Private Sub B_DocSearch_Click() '検索ボタン
Dim strSQL As String
Dim RS As New ADODB.Recordset
Dim X As String       'OR のオプション値が1の場合です
Dim i As Long
  
  If Me.フレーム38.value = 1 Then
    X = "OR"
  Else
    X = "AND"
  End If
   
  RS.Open "SELECT * FROM 文書管理台帳", CurrentProject.Connection
  For i = 1 To 10
    If Not IsNull(Me.Controls(CName(i))) Then
      strSQL = strSQL & " " & X & " " & _
      RS(i - 1).Name & "='" & Me.Controls(CName(i)).value & "'"
    End If
  Next
  RS.Close: Set RS = Nothing
  If strSQL = "" Then
    Me.リスト0.RowSource = "文書管理台帳"
  Else
    strSQL = Mid(strSQL, InStr(2, strSQL, " ") + 1)
    Me.リスト0.RowSource = "SELECT * FROM 文書管理台帳 WHERE " & strSQL
  End If
  Me.リスト0.Requery
End Sub

'-------------------------------------------------------------------
Private Sub B_FormExit_Click() '終了ボタン
  DoCmd.Close
End Sub

'-------------------------------------------------------------------
Private Sub コマンド32_Click() 'クリアボタン
Dim i As Long
  For i = 1 To 10
    Me.Controls(CName(i)).Value = ""
  Next

  Me.リスト0.RowSource = "SELECT * FROM 文書管理台帳"
  Me.Requery
End Sub

'-------------------------------------------------------------------
Private Sub 印刷プレビュー_Click() '印刷プレビューボタン
Dim strSource As String
Dim strWhere As String
  
  strSource = Me.リスト0.RowSource
  If InStr(1, strSource, "WHERE") = 0 Then
    strWhere = ""
  Else
    strWhere = Mid(strSource, InStr(1, strSource, "WHERE") + 6)
  End If
  Debug.Print strWhere
  DoCmd.OpenReport "R_null", acViewPreview, WhereCondition:=strWhere
End Sub


・コントロールの配列化
   コントロールに規則的な名前を持たせるとループ処理が可能です。
   今回は規則性がなかったので、FormLoad時に変数に入れてみました。

・クエリを作らない
   リストボックスの値集合ソースにはテーブル名やクエリ名だけでなく
   SQL文を直接指定できます。

・レポートは1種類で
    OpenReportメソッド の WhereCondition を利用してフィルタを掛け、
    リストボックスに表示されている情報に合わせてレポートを表示させてみました。
401 hits

【7034】フォームからテーブル操作について inu 06/1/6(金) 15:25 質問
【7043】Re:フォームからテーブル操作について 小僧 06/1/10(火) 10:57 発言
【7044】Re:フォームからテーブル操作について 小僧 06/1/10(火) 11:09 回答
【7046】Re:フォームからテーブル操作について inu 06/1/10(火) 15:51 お礼
【7050】Re:フォームからテーブル操作について inu 06/1/11(水) 9:48 質問
【7058】Re:フォームからテーブル操作について 小僧 06/1/11(水) 11:55 発言

6158 / 9994 ←次へ | 前へ→
ページ:  ┃  記事番号:
1078229
(SS)C-BOARD v3.8 is Free