- ベストアンサー
VisualBasic6.0 SP3 (←注) Access97 で作成したプログラムでこんな問題が!?
WindowsNT SP5 VisualBasic6.0 SP3 Access97 で作成したプログラムがあります。 Access97のMDB上にAテーブルとBテーブルがあるとします。 VB上で Aテーブルのデータを Bテーブルに 書き込むという処理をしています。 書き込む時に既にBテーブルに存在していた場合は、 そのレコードを削除して追加しています。 データを削除するという行為をしているのは、 その部分だけです。 今、どのような現象が起こっているかというと、 ACCESS97のMDBのテーブルのあるレコード (ここでいう削除されるレコードが) の全ての項目が #Deleted となってしまっているのです。 テーブルを開いたまま、削除クエリーを流した 時などに表示されるようなあの画面です。 しかし、テーブルを開きなおしても、 #Deleted のままなんです。 MDBを開きなおしても、#Deletedの行が消えるわけでも なく、そのまま残っています。 MDB自体が破損してしまっているようなのです。 修復を試みると、#Deletedの行は消えるのですが、 消えるだけです。 消えて、本来追加されるべきレコードがあればいいのですが、その部分だけが消えてしまうのです。 一体、いつのタイミングで #Deleted の行レコード が作られるのか全く分かりません。 可能性がありそうなのは、そこの削除しているところ だけなのですが、そこで必ず起こるというわけでも ないようです。 サービスパックを最新にすれば治るとかいう手法は できるだけ、とりたくないです。すでに納品されている 状態なので。 どなたか、似た現象に出会ったことがある方、 問題点、解決策、なんでもよいので手がかりでも 教えていただけないでしょうか? とても困っています。 よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ACCESSファイルは修復最適化をしてもファイルに ゴミが残り完全にクリーンな状態ではありません。 新しいmdbを作成してそちらにインポートしてみては どうですか?
その他の回答 (1)
- SilverRose
- ベストアンサー率45% (18/40)
こんにちは。 ちょっと参考にならないかもですが…。 まずこの症状は、 いままで同じ事がうまくいっていたのに、突然こうなったという事でしょうか? それともBテーブルのレコードを削除して…という処理は今回が初めて実行されたのでしょうか? どちらにしても、#Deleted となるのは「レコードを削除します」というマーキングだけが行われ、実際には削除が実行されてないときの表示形態ですよね。 例えばVBAで、レコードの削除をADOのレコードセットで扱っているとしたら Dim rs As New ADODB.RecordSet … rs.Delete 'これで削除するためのマーキングだけ行われる rs.Close '実際にこれで削除される という事です。 レコードを追加する時も rs.AddNew 'これで追加の情報がセットされる rs.Update '実際にこれで追加される となりますから、アップデートがなんらかの原因でされてないとか。 当然クローズなどはされているかと思いますが、なんらかのエラーでClose処理がされないままでDBを終了したりしてこのような状態になってる可能性はどうかなぁとちょっと思いました。 今回はあまり関係ありませんかね…^^;
お礼
回答ありがとうございます! いやいや、とても参考になりました。
お礼
回答ありがとうございます。 そんな方法もあるのですね!試してみます!