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

WindowsNT SP5
VisualBasic6.0 SP3
Access97

で作成したプログラムがあります。

Access97のMDB上にAテーブルとBテーブルがあるとします。

VB上で Aテーブルのデータを Bテーブルに
書き込むという処理をしています。
書き込む時に既にBテーブルに存在していた場合は、
そのレコードを削除して追加しています。

データを削除するという行為をしているのは、
その部分だけです。

今、どのような現象が起こっているかというと、
ACCESS97のMDBのテーブルのあるレコード
(ここでいう削除されるレコードが)

の全ての項目が
#Deleted  
となってしまっているのです。

テーブルを開いたまま、削除クエリーを流した
時などに表示されるようなあの画面です。
しかし、テーブルを開きなおしても、
#Deleted のままなんです。
MDBを開きなおしても、#Deletedの行が消えるわけでも
なく、そのまま残っています。

MDB自体が破損してしまっているようなのです。
修復を試みると、#Deletedの行は消えるのですが、
消えるだけです。
消えて、本来追加されるべきレコードがあればいいのですが、その部分だけが消えてしまうのです。

一体、いつのタイミングで #Deleted の行レコード
が作られるのか全く分かりません。

可能性がありそうなのは、そこの削除しているところ
だけなのですが、そこで必ず起こるというわけでも
ないようです。

サービスパックを最新にすれば治るとかいう手法は
できるだけ、とりたくないです。すでに納品されている
状態なので。

どなたか、似た現象に出会ったことがある方、
問題点、解決策、なんでもよいので手がかりでも
教えていただけないでしょうか?
とても困っています。

よろしくお願い致します。

A 回答 (2件)

ACCESSファイルは修復最適化をしてもファイルに


ゴミが残り完全にクリーンな状態ではありません。
新しいmdbを作成してそちらにインポートしてみては
どうですか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
そんな方法もあるのですね!試してみます!

お礼日時:2003/09/29 17:15

こんにちは。


ちょっと参考にならないかもですが…。

まずこの症状は、
いままで同じ事がうまくいっていたのに、突然こうなったという事でしょうか?
それともBテーブルのレコードを削除して…という処理は今回が初めて実行されたのでしょうか?

どちらにしても、#Deleted となるのは「レコードを削除します」というマーキングだけが行われ、実際には削除が実行されてないときの表示形態ですよね。

例えばVBAで、レコードの削除をADOのレコードセットで扱っているとしたら

Dim rs As New ADODB.RecordSet

rs.Delete'これで削除するためのマーキングだけ行われる
rs.Close'実際にこれで削除される

という事です。

レコードを追加する時も

rs.AddNew'これで追加の情報がセットされる
rs.Update'実際にこれで追加される

となりますから、アップデートがなんらかの原因でされてないとか。

当然クローズなどはされているかと思いますが、なんらかのエラーでClose処理がされないままでDBを終了したりしてこのような状態になってる可能性はどうかなぁとちょっと思いました。

今回はあまり関係ありませんかね…^^;
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
いやいや、とても参考になりました。

お礼日時:2003/09/28 21:06

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