|
▼小僧 さん:
>▼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 を利用してフィルタを掛け、
> リストボックスに表示されている情報に合わせてレポートを表示させてみました。
小僧さんアドバイスありがとうございます。
小僧さんの下さったヒントを元に試してみますね。
|
|