accessのdatabaseにフィルターをかける条件を変数化するには?

解決


manabu  2003-03-26 17:04:04  No: 106452  IP: [192.*.*.*]

Option Explicit

Dim DB As Database                     'database
Dim RS As Recordset                    'レコードセット
Dim RS2 As Recordset

Dim f As Variant
Dim NRec As Long                       'レコード数
Dim Crec As Long                       'カレントレコード

Private Sub Command4_Click()
'先頭へボタン
  If Crec <> 1 Then
    RS2.MoveFirst
    Call Indication
    Crec = 1
    Text4.Text = Format(Crec) & "/" & Format(NRec)
  End If
End Sub

Private Sub Command5_Click()
'前へボタン
  If Crec <> 1 Then
    RS2.MovePrevious
    Call Indication
    Crec = Crec - 1
    Text4.Text = Format(Crec) & "/" & Format(NRec)
  End If
End Sub

Private Sub Command6_Click()
'次へボタン
  If Crec <> NRec Then
    RS2.MoveNext
    Call Indication
    Crec = Crec + 1
    Text4.Text = Format(Crec) & "/" & Format(NRec)
  End If
End Sub

Private Sub Command7_Click()
'最後へボタン
  If Crec <> NRec Then
    RS2.MoveLast
    Call Indication
    Crec = NRec
    Text4.Text = Format(Crec) & "/" & Format(NRec)
  End If
End Sub

Private Sub Form_Load()

             'Accessファイル名称
  Dim TableName As String              'テーブル名称
  Set DB = OpenDatabase("C:\デスクトップ\data.mdb")
  Set RS = DB.OpenRecordset("テーブル1", dbOpenSnapshot)
  f = 11
  
  RS.Filter = "配置" & "=" & "'f'"        '←fを変数にしたい
  Set RS2 = RS.OpenRecordset
  
  'With RS2
  'If .RecordCount <> 0 Then .MoveLast
  '.MoveFirst
  'End With
   
  RS2.MoveLast
  NRec = RS2.RecordCount
  RS2.MoveFirst
  
  Call Indication
  
  Crec = 1
  Text4.Text = Format(Crec) & "/" & Format(NRec)
  
End Sub

Private Sub Form_Unload(Cancel As Integer)
  RS.Close
  DB.Close
  Set RS = Nothing
  Set DB = Nothing
End Sub

Private Sub Indication()
'レコードセットオブジェクトの内容をテキストボックスにコピー
  
  Text1.Text = RS2.Fields(1)
  Text2.Text = RS2.Fields(4)
    

End Sub


この  RS.Filter = "配置" & "=" & "'f'" の文のfを直接数字にすると正常に配置の列の11だけを探し出してコマンドボタンで閲覧(text1.text2で表示)できるのですが、fを用い変数化しようとすると、エラーがでます。ちょっとした事だと思うのですが、教えて下さい。あと簡略化できるのであれば教えて下さい。

編集 削除
manabu  2003-03-26 18:01:12  No: 106453  IP: [192.*.*.*]

上記訂正(最後から3行目)。
「この  RS.Filter = "配置" & "=" & "'f'" の文のfを直接数字(11)にすると正常に配置の列の11だけを探し出してコマンドボタンで閲覧(text1.text2で表示)できる」
です。

編集 削除
Loreley  2003-03-27 02:31:42  No: 106454  IP: [192.*.*.*]

RS.Filter = "配置" & "=" & "'f'"

RS.Filter = "配置" & "=" & "11"
とすればうまくいくが
RS.Filter = "配置" & "=" & f
だと失敗するってことでよろしいですか?

fがなぜVariantなのかもちょっとひっかかりますが、

RS.Filter = "配置" & "=" & CStr(f)
ではだめですか?

編集 削除
とろ  2003-03-27 09:24:10  No: 106455  IP: [192.*.*.*]

データベースでの
配置フィールドの型は何ですか?

編集 削除
manabu  2003-03-28 14:29:35  No: 106456  IP: [192.*.*.*]

Loreleyさんありがとうございます。そのとうりにした所、「カレントレコードがありません」と表示します。この文自体が間違っているのでしょうか?
とろさんありがとうございます。
配置フィールドの型はACCESS2000形式でノーマル(列名はID、階、配置、名前と変えてある)で列名を変更して、フィールド数は4っです。そして今回はフィールド名(配置)のデータ(数)を指定して、そのレコードを抽出してカウントし、コマンドボタンで順に閲覧して行きたいと思ってます。

編集 削除
Loreley  2003-03-29 04:17:10  No: 106457  IP: [192.*.*.*]

あ、失礼。まちがえました(^^;
RS.Filter = "配置" & "=" & CStr(f)
ではなくて
RS.Filter = "配置" & "='" & CStr(f) &"'"
でした
ごめんなさい

編集 削除
manabu  2003-03-30 07:13:15  No: 106458  IP: [192.*.*.*]

Loreleyさんありがとうございます。できました(^_^)v
また何かわからないことあれば宜しくお願いします。

編集 削除