プロが教えるわが家の防犯対策術!

もともとはEXCEL2000XPのVBAでマクロを作り、ACCESS2000のMDBを使用しています。 これはうまく機能しています。 これを、ACCESS97に落としたら、EXCEL2000からMDBを参照すると、NOMATCHがうまく機能してくれません。
 インデックキーでテーブルを読みに行くのですが、NOMATCHでは、レコードがあるにもかかわらず、常にTRUEになってしまいます。
 ACCESS97へのコンバート処理は、ACCESS2000にて旧バージョンへの変換を使用しました。
 それに、ACCESS97でも、NOMATCHがうまく機能していません。
ACCESSはデータとプログラムと別々に作成しており、テーブルのリンクで結合しています。
 アドインに問題があるのかな、と思ったりしているのですが良く分かりません。
どなたか御教授願います。

A 回答 (2件)

うーん・・・現状が把握できてません。

。。
ソースを公開できませんか?

この回答への補足

早速返事を頂きありがとうございます。
補足させていただきます。
コードは次の通りです。 Accessでのフォームのコードです

Const DBName = "DATA97.mdb"
Public DB As Database
Public BGrc As Recordset

Private Sub Code_AfterUpdate()
'===================================================
Set DB = DBEngine.Workspaces(0).OpenDatabase(DBName)
Set BGrc = DB.OpenRecordset("Gyomu")

BGrc.Index = "BGprmkey"
BGrc.Seek "=", Me!code
If Not BGrc.NoMatch Then
Me!systemname = BGrc!gyomu
Else
Me!systemname = Null
End If

End Sub

ただ、これだけのことなのですが、データがあるにもかかわらず、BGRC.NOMATCHが Trueになってしまいます。
 これを、若干変更してEXCEL2000で 実行してみましたが、accessと同様の結果です。

 アドインを比較してみたのですが、。。。。。
 そこで、一つ思ったのですが、OFFICE2000をインストールしてから、ACCESS97をインストールしたために、何らかのファイルが壊れているのではないかと思われるのです。 明日、早速やってみようと思います。
よろしく御教授ください。

補足日時:2002/02/13 20:39
    • good
    • 0

( ・・)?ン


なぜだろう。。。

WIN2000SERVER_SP2
ACCESS2000_SP2
環境で、NoMatch はうまく反応してくれました。

で思ったのですが、SEEKを使わないのでよければ、SQL文で拾う方法があります。
これでだめなら、DBへの接続方式をADOにしてあげれば、きちんとできるような気がします。

Private Const DBName = "c:\DATA97.mdb"
Private DB   As Database
Private BGrc  As Recordset

Private Sub Code_AfterUpdate()
  Me!systemname = getGyomu(Me!Code)
End Sub

'あえて受けの「inVal」のタイプを宣言してません。
Private Function getGyomu(inVal) As Variant
  Dim tdfWork   As TableDef
  Dim strField  As String
  Dim strSQL   As String
  
  getGyomu = Null
  
  Set DB = DBEngine.Workspaces(0).OpenDatabase(DBName)
  
'この処理は、インデックス名「BGprmkey」の割当たってるフィールド名を取得しているだけです。
'直接フィールド名を指定してあげたら、ここの部分の処理は省けます。
'strField = 《キーフィールド名》って感じ
  '「Gprmkey」に該当するフィールド名を得る
  Set tdfWork = DB.TableDefs("Gyomu")
  strField = tdfWork.Indexes("BGprmkey").Fields(0).Name
  
  
  
'Indexとなるフィールドの型がわからなかったので、二通り書いておきます。
'型にあわせて、どちらかを使用してください。
  'SQL文の作成(キーとなるフィールドが数値型の場合)
  strSQL = "select Gyomu from Gyomu where " & strField & "=" & inVal
  'SQL文の作成(キーとなるフィールドが文字列型の場合)
  strSQL = "select Gyomu from Gyomu where " & strField & "='" & inVal & "'"
  
  
  'レコードセット
  Set BGrc = DB.OpenRecordset(strSQL)
  'データが存在していたら取得
  If Not BGrc.EOF Then
    getGyomu = BGrc.Fields(0).Value
  End If
  
  BGrc.Close
  DB.Close
  Set BGrc = Nothing
  Set DB = Nothing
End Function
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!