|
▼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 を利用してフィルタを掛け、
リストボックスに表示されている情報に合わせてレポートを表示させてみました。
|
|