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

解決


manabu  2003-03-27 02:04:04  No: 106452

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-27 03:01:12  No: 106453

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


Loreley  2003-03-27 11:31:42  No: 106454

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

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

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

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


とろ  2003-03-27 18:24:10  No: 106455

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


manabu  2003-03-28 23:29:35  No: 106456

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


Loreley  2003-03-29 13:17:10  No: 106457

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


manabu  2003-03-30 16:13:15  No: 106458

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加