• ベストアンサー

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 の行レコード が作られるのか全く分かりません。 可能性がありそうなのは、そこの削除しているところ だけなのですが、そこで必ず起こるというわけでも ないようです。 サービスパックを最新にすれば治るとかいう手法は できるだけ、とりたくないです。すでに納品されている 状態なので。 どなたか、似た現象に出会ったことがある方、 問題点、解決策、なんでもよいので手がかりでも 教えていただけないでしょうか? とても困っています。 よろしくお願い致します。

  • GBSGBS
  • お礼率36% (370/1012)

質問者が選んだベストアンサー

  • ベストアンサー
  • umeum
  • ベストアンサー率50% (1/2)
回答No.2

ACCESSファイルは修復最適化をしてもファイルに ゴミが残り完全にクリーンな状態ではありません。 新しいmdbを作成してそちらにインポートしてみては どうですか?

GBSGBS
質問者

お礼

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

その他の回答 (1)

回答No.1

こんにちは。 ちょっと参考にならないかもですが…。 まずこの症状は、 いままで同じ事がうまくいっていたのに、突然こうなったという事でしょうか? それともBテーブルのレコードを削除して…という処理は今回が初めて実行されたのでしょうか? どちらにしても、#Deleted となるのは「レコードを削除します」というマーキングだけが行われ、実際には削除が実行されてないときの表示形態ですよね。 例えばVBAで、レコードの削除をADOのレコードセットで扱っているとしたら Dim rs As New ADODB.RecordSet … rs.Delete 'これで削除するためのマーキングだけ行われる rs.Close '実際にこれで削除される という事です。 レコードを追加する時も rs.AddNew 'これで追加の情報がセットされる rs.Update '実際にこれで追加される となりますから、アップデートがなんらかの原因でされてないとか。 当然クローズなどはされているかと思いますが、なんらかのエラーでClose処理がされないままでDBを終了したりしてこのような状態になってる可能性はどうかなぁとちょっと思いました。 今回はあまり関係ありませんかね…^^;

GBSGBS
質問者

お礼

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

関連するQ&A

  • 【Access】レコードが削除できない

    どんな操作をしてそうなったかわからないんですが、 テーブルの最終行に全フィールドのデータが「#Deleted」になっているレコードが出来てしまいました。 このレコードを削除し、一旦テーブルを閉じて、また開くと同じものが復活しています。 どうすれば消せますでしょうか??

  • アクセス作成について

     アクセスについて質問します。  フォームで入力する場合で、例えばテーブルのレコードを100までとし、101を超えた場合またレコード1にデータを入力することは可能でしょうか。 テーブル フィールド1 フィールド2  1       6  2       8   .      .   .      . 100       55 フィールド1は固定し、フィールド2にデータを入力していき101番目にデータを入力する時はまた1行目の6を上書きしてデータを更新していくようなことは可能でしょうか。(もちろんフィールド1、フィールド2を別テーブルとしクエリーを活用することでもok) アクセス初心者です。よろしくおねがいします。

  • マスタデータ更新

    こんにちは。 システム開発の基礎的なところがわからないので、教えていただきたく、投稿させていただきます。 システム開発をほとんどやったことがないので、言葉が変なところもあるかと思いますが、宜しくお願いいたします。 サーバー上に、AというSQLServerのDBがあります。 今までは、システム管理者のみがAccessからA.DBのリンクテーブルを使い、マスタデータの更新/追加/削除を行っていましたが、今後、リーダークラスの人もできるようにしたい!という要望があり、そのインターフェース部分を作成しています。 いろいろと考え、フロントエンド側にAccessでB.mdbを作成し、そこには、A.DBと同じテーブル構造の一時TBLを作成し、B.mdbを開いた時にA.DBから全データを取得することにしました。(取得するところまではできています) ここから、設定するための画面作成をしますが、最終的に、更新/追加/削除されたデータは、どのようにA.DBにUPすればいいのでしょうか? 考えた方法として (1)B.mdb内に、一時テーブルとは別に、更に同じ構造の変更用テーブルを作成。 設定画面から更新/追加/削除されたデータは変更用テーブルに保存し、全ての処理が終了したら、変更用テーブルにあるデータを1つづつ見て、A.DBへ更新/追加/削除をかける (2)一時テーブルのデータを直接更新/追加/削除し、全ての処理が終了したら、全テーブルのレコードを1件づつ比較し、A.DBへ更新/追加/削除をかける というくらいしか思いつかないのです。 その他に思ったのが、一時テーブルもしくは変更用のテーブルに、レコード毎に「更新/追加/削除」がわかるようにフラグを設けて、そのフラグに従ったSQL文を発行する というくらいです。。。 根本的に、マスタデータに対する更新/追加/削除のやり方が間違っていたりしますか? 誰も聞ける人がいないので、どうぞ宜しくお願いいたします!!!

  • アクセスでフィールド入替えのVisualBasic

    アクセス2000で作成したテーブルに現在「場所」というフィールドがあります。 このフィールドのデータ型を「OLEオブジェクト」から「テキスト型」に変える「VisualBasic」の書き方を教えてください。 [現在ある"場所"を削除してから・・・ tbl.Columns.Append colAdo Set colAdo = New ADOX.Column With colAdo .Name = "場所" .Type = adVarWChar .Attributes = adColNullable End With 上記を追加する形になるのでしょうか? お願いいたします。

  • VB6(SP5)で、Accessのテーブルをリンクしたいのです。

    いつも、質問ばかりで、恐縮です。(^^; VB6(SP5)で、プログラミングをしております。 Access のMAIN.MDB に、SUB.MDBの中の[TEST]テーブルを リンクしたいのです。が、方法がよく解かりません。 それぞれのMDBには、パスワードがかかっています。 助言の程、宜しくお願い致します。

  • アクセスのプログラム作成を頼む場合。。。

    株価の独自のシミュレーションプログラムをエクセル2003でつくっています。 しかし、データが膨大になってきたので、基本データそのものの保存というか管理は、アクセスを使おうか?と考えています。 そこで、 1.アクセス保存用のデータをエクセルでつくる。 2.その作ったデータをアクセスにインポートする。 3.アクセスで必要なデータを選び出す。 4.その選び出したデータをエクセルにインポートする。 5.インポートされたデータをエクセルで分析したりシミュレーションしたりグラフ表示したりする。 以上のような流れを作りたいのですが、 アクセスで受け持つ部分は、アクセスが苦手(テーブルは作りました)なので、外注しようか?などと考えています。 ちなみにテーブルは25個で、1データに付き、都合120程度の項目があります。 データ数は、1テーブルあたり1500ぐらいです。 こういった場合、一概には言えないでしょうが、おおまかなエクセル作成の外注費用がわかる方がおられましたら教えてください。 よろしくおねがいします。

  • VB6(SP5)とAccessについて

    VB6(SP5)でプログラミングをしております。 Jetを使用して、Access97のデータベースを 使用しております。 データ(mdb)が入っているPCにoffice2003を インストールしたとします。(つまり、Access2003が入ります) この場合、データ(Access97)をアップグレードすれば プログラミングの変更が必要になると考えております。 が、データ(Access97)をアップグレードしなければ プログラミングの変更は不要と考えてかります。 つまり、元のデータのアップグレードをしなければ Access2003は、使用してもかまわないと考えております。 この3つの考えは合っているのでしょうか ? 宜しくお願い致します。

  • excelで作成したDBでAccessのクエリのようなことはできますか?

    excel2000でDBを作っています。 シート1に作成したDBの、必要な部分だけを抽出(表示)したものを同じブックのシート2につくりたいと思います。 例えば、シート1の行AとCとEのみ、更にフィルタをかけて必要なレコードのみ表示したものをシート2に反映するという感じです。 ※シート1はすべてを表示したままにしておきたいです。 ※行B,Dはシート2上にあっても、「表示しない」で消えれば構いません) この状況で、シート1で行った変更をすべてシート2にも反映させることは可能でしょうか。 もちろん、セルの値すべてをシート2に反映させればできたのですが、 この方法だと、もしシート1でレコードを削除したときに シート2の該当箇所には !#REF! が表示されてエラーがでます。 Accessを使えば可能かと思うのですが、excelでこのようなことはできるのでしょうか。 (Accessを使える環境にない人ともデータの交換をしたいので、Accessで作り直す…というのは避けたいのです) もし方法があれば教えていただければとても助かります。 よろしくお願いします。

  • mdbにアクセスするDLLを作成したい

    プログラム初心者です。 mdbにアクセスし、レコードの登録、削除ができるDLLを 作成したいのですが、初心者的に簡単なのは VBかVCおよびc++どちらが作りやすいでしょうか?

  • MSアクセスのクエリで結果がおかしい

    アクセス2000で追加クエリを作成していますが、 クエリのデータシートビューで確認したレコードと 追加されたテーブルで確認したレコードが異なり、テーブルのデータが少なくなってしまっています。 条件としては、 クエリの参照元 SQLサーバからのリンクテーブル(レコード数で13万件程度) 追加先のテーブルはローカルのmdb内です たまたまかもしれませんが、今テストしているデータは、 クエリ上では、19件あるものの、実行しても9件しか追加されません。 原因としてありそうなものがわかる方がいれば、よろしくお願いします。

専門家に質問してみよう