OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
締切り
済み

officeでのOLEについて

  • すぐに回答を!
  • 質問No.216732
  • 閲覧数91
  • ありがとう数1
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 71% (69/97)

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

回答 (全2件)

  • 回答No.1
レベル12

ベストアンサー率 65% (276/422)

うーん・・・現状が把握できてません。。。 ソースを公開できませんか? ...続きを読む
うーん・・・現状が把握できてません。。。
ソースを公開できませんか?
補足コメント
yamamichi

お礼率 71% (69/97)

早速返事を頂きありがとうございます。
補足させていただきます。
コードは次の通りです。 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:31
  • 回答No.2
レベル12

ベストアンサー率 65% (276/422)

( ・・)?ン なぜだろう。。。 WIN2000SERVER_SP2 ACCESS2000_SP2 環境で、NoMatch はうまく反応してくれました。 で思ったのですが、SEEKを使わないのでよければ、SQL文で拾う方法があります。 これでだめなら、DBへの接続方式をADOにしてあげれば、きちんとできるような気がします。 Private Const DBName = " ...続きを読む
( ・・)?ン
なぜだろう。。。

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
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ