• 締切済み

Accessでのテーブルの削除

Access97を使っていますが、多分他のバージョンでも同じではないかと思います。また、OSはWindows95Bです。 最近更新したワークテーブルをまとめて手動で削除するとことが良くあります。 現在の方法:テーブルの一覧画面を詳細表示にして、更新時刻の降順にソートし、テーブルを1個ずつ選択してDeleteキーで削除する。 質問1:テーブルの複数選択はできないのでしょうか。できるとすれば、どのようにするのでしょうか。 質問2:1個ずつ削除する場合、Deleteキーを押して削除した後、全く離れた位置のテーブルが選択状態に成り、削除したいテーブルを表示させるためにいちいち画面をスクロールしなければなりません。 削除後には削除したテーブルの次のものが選択状態に成って欲しいのですが、このようなことは可能でしょうか。

みんなの回答

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.3

>サイズも大きく変動しAccessの内部状態がおかしくなった mdbの最適化をすれば小さくなります。 修復もしてみてはどうでしょうか。

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

削除するテーブルがいつも同一のテーブル名であればマクロでテーブルを削除するものを作ればいいのですが。 ワークテーブル名が同一として・・ マクロのアクションにオブジェクトの削除を指定しオブジェクト種類にテーブルを選択、オブジェクト名に削除するテーブルの名前を記述する。複数のテーブルの場合は必要な分だけ続けて設定すればマクロを実行させればマクロに設定したテーブルの削除が一度で出来ます。 いつも同一のテーブル名とすれば一番簡単です。 またはモジュールにテーブルの削除をする記述を作って何かのイベントにそのモジュールを指定して実行させる。 質問2ですが私が使っているAccess97はテーブルを削除すると次のテーブルが選択状態になります。 オプションの設定がちがうのでしょうか?

graphaffine
質問者

補足

質問2の件は、結局問題のmdb固有の話らしく、他のmdbは現象が発生しない事が分かりました。 なぜ、件のmdbで発生するかというと推測ですが次の通りです。 ・テーブルの作成やインポート、削除、最適化を かなり繰り返したので、サイズも大きく変動(数十メガバイト~1メガバイト程度)しAccessの内部状態がおかしくなった。

  • rara_sun
  • ベストアンサー率50% (271/539)
回答No.1

> 質問1:テーブルの複数選択はできないのでしょうか。 できません。 マクロなどを駆使してツールを作るなどをすることで、 できるかもしれませんが、ちょっと大変ですよね? > 質問2:削除後には削除したテーブルの次のものが選択状態に成って欲しいのですが、このようなことは可能でしょうか。 Access97が手元にないのですが、 オプションでそのような指定ができなかったら 方法はないように思えます。 テーブルの一覧表示の形式(一覧とか詳細とか)を変更 してみてどうか、という具合でしょうか。

graphaffine
質問者

補足

>できません。 このことは、どこかに明記されていますか。 できて不思議でないような気はしますが。

関連するQ&A

  • 異なるテーブルのレコード削除

    オラクル初心者です。宜しくお願いします。 AAA、BBB、CCCというテーブルがあると仮定します。 画面から入力された値(ddd)をキーとして、CCCテーブルから該当するレコードをセレクト文で引っ張り、eeeという値を抜き出したとします。 そのeeeという値をキーにAAA、BBBテーブルのレコードを削除するにはどういうSQLを発行すればよろしいでしょうか? "delete from AAA, BBB where eee = (select eee from CCC where fff = ddd);" では駄目でした。 質問が下手でわかりにくいかもしれませんが、どうかご教授お願いします。

  • テーブルのレコード削除ができません

    SQLserver2000を触る事になり思った通りにならず困っております。 テーブルに主キーを設定せずデータ型を「int」でフィールドに重複する数値を入れてしまいました。 後から重複入力のミスに気づき重複したレコードを 「テーブルを開く」-「全行を返す」から1レコードを 削除しようとしたのですが、 「キー列の情報が足りないか、正しくありません。更新の影響を受ける行が多すぎます。」と表示され削除できません。 このテーブルは、多くのビューで使用してすでに動いている再作成することは難しいです。 このレコードを削除する良い方法はあるのでしょうか。 ご存知の先生方ご指導よろしくお願いいたします。

  • アクセス2007 テーブルの全削除とデータ移動

    アクセス2007 テーブルの全削除とデータ移動 全テーブルを削除して、データをインポートしようとしています。 質問1. 下記のコードで、リレーションの張ってあるテーブルの削除でエラーになります。 でも、DoCmd.SetWarnings Falseの状態で、手動で削除するとエラーになりません。 だったらと思い、コードにDoCmd.SetWarnings Falseを追加したのですが、やはりエラーになります。 対処法はないでしょうか? 質問2. テーブルの中に「~TMP******」という勝手に作られたテーブルは、削除してもいいものなのでしょうか? 質問3. 削除後にインポートをしたいのですが。 手動でアクセスメニュー>外部データ>アクセス(のインポート)>現在の~~>すべて選択(テーブル)>OK これを実現するVBの記述は、どんなコードになるのでしょうか? --------------------------------------------------------------------- Private Sub 旧バージョンからデータ移動_Click() Dim i As Integer Dim tbls As DAO.TableDefs Dim tbl As DAO.TableDef '開いているフォーム全てを閉じる For i = Forms.Count - 1 To 0 Step -1 DoCmd.Close acForm, Forms(i).Name Next i Set tbls = CurrentDb.TableDefs DoCmd.SetWarnings False  '追加-------------------    ’全テーブル削除 For Each tbl In tbls If InStr(1, tbl.Name, "MSys", vbBinaryCompare) = 0 And InStr(1, tbl.Name, "~TMP", vbBinaryCompare) = 0 Then tbls.Delete (tbl.Name) End If Next DoCmd.SetWarnings True   '追加----------------   ’旧バージョンからのデータインポート   ’VBコードがわかりません End Sub ------------------------------------------------------------------------- ※旧バージョンとはアクセス本体ではなく、自分でつくったDBの旧バージョンです。 複数質問で申し訳ありませんが、よろしくお願い致します。

  • ACCESS2007でレコードの条件付き削除

    よろしくおねがいします。 テーブル [仕訳伝票]、[仕訳明細]に 仕訳IDで 前者が1、後者がN のリレーション設定しています。 [仕訳伝票]の仕訳日のフィールドが削除日以前のデータを削除するのに次のようにしました。 「仕訳明細クエリ」作成 ※添付画像を見てください DoCmd.RunSQL ("delete FROM 仕訳明細クエリ;")で 「 実行時エラー'3086' 指定したテーブルから削除できませんでした 」 因みに 「仕訳明細クエリ」を開いてDeleteキーで手動削除すると仕訳明細のレコードは削除できましたが仕訳伝票のレコードは残っています。

  • テーブル2の単語の行を削除にはどうすればいい?

    アクセスです。 テーブル1には、tango テーブル2には、単語 というフィールドがあります。 テーブル1とtangoとテーブル2の単語を線で繋いで テーブル1のtangoと同じ値のテーブル2の単語の行を消したいのですが どういうクエリを作ればいいのでしょうか? 画像の状態 DELETE [テーブル1].tango, [テーブル2].単語 FROM テーブル1 INNER JOIN テーブル2 ON [テーブル1].tango = [テーブル2].単語; をやろうとすると 削除するレコードを含んだテーブルを指定してください となります。 「削除するレコードを含んだテーブル」は、テーブル2なのですが どこでテーブル2と設定すればいいですか? プロパティシートを見ても、テーブルを設定する場所がわかりませんでした。 レコードの削除に、 Whereとfromがありますが fromは選択できません。 この状態で、テーブル2の単語の行を削除にはどうすればいいですか?

  • ACCESSで指定されたテーブルから削除できませんでしたとエラー

    お世話になります。 似たような問題をググッてみたのですが、イマイチ解決に繋がらず、 最終手段と質問させて頂きました。 現在、ACCESS2007で削除クエリを作成していますが、 題名のエラーが表示されてしまいます。 ・テーブルAとBが存在します。 ・テーブルBのレコードを削除したいです。 ・削除条件は、テーブルAでSELECTした結果に対し、  テーブルAとテーブルBで一致するものを削除します。 ・A/B両テーブルともに主キーは設定されていません。 ・また、リレーションも張っていません。 ・データシートビューは想定したものが表示されます ・作成したSQLは以下のような感じです。 --------------------------------------------------- DELETE T2.* FROM T2, ( SELECT * FROM T1 WHERE T1.Fld1 = "01" AND T1.Fld2 = "002" AND T1.Fld3 BETWEEN #2008/4/1# AND #2009/3/31# AND (T1.Fld4 ="A" OR T1.Fld5 = "B") ) AS T1a WHERE T2.Fld1 = T1a.Fld1 AND T2.Fld2 = T1a.Fld2 AND T2.Fld3 = T1a.Fld3 --------------------------------------------------- 以上、解決策を伝授頂けないでしょうか? よろしくお願いします。

  • ACCESSでデータ削除すると「読み取り専用」と出る

    WINXP、ACCESS2003 ACCESSで二つのテーブルの差分のクエリを作りデータの修正を行っています。 差分のクエリをそのまま、すべて選択してDeleteボタンでデータを削除しようとすると「データは読み取り専用です」と表示され、削除することができません。 レコードを選択して右クリックしても「削除」「新しいレコード」の箇所がグレーになっていて利用できません。 どこかが、読み取り専用になっているのでしょうか? ちなみに、元のテーブルは削除できます。 よろしくお願いします。

  • アクセス2007 テーブルの全削除とデータ移動

    アクセス2007 テーブルの全削除とデータ移動 全テーブルを削除して、データをインポートしようとしています。 http://okwave.jp/qa/q5952603.html 以前の質問<QNo.5952603>の続きになってしまいますが。 >質問3. >削除後にインポートをしたいのですが。 >手動でアクセスメニュー>外部データ>アクセス(のインポート)>現在の~~>すべて選択(テーブル)>OK >これを実現するVBの記述は、どんなコードになるのでしょうか? 答え >DoCmd.TransferDatabase acImport, "Microsoft Access", strPATH, acTable, strTDef, strTDef, False なのですが、手動で行った場合の「オプション」>インポート「リレーションシップ=チェックON」の部分が 上記のお答えのコードで実現できませんでした。 各クエリの部分的なリレーションは残ってますが、全体のリレーション線が消えてしまいます。 どのようにしたら再現できますでしょうか?

  • 片方のテーブルに無いデータを削除したい

    過去ログを探っていろいろ試したのですが、うまくいかないので 教えてください。 TABLE1 に存在しない TABLE2 のデータをDELETEしたいのですが TABLE2 の対象年月(item2の内容)が、指定年月以上の条件で DELETEしたいのです。 ●指定月=2008/02 の場合 <TABLE1> key1 key1 key1 item1  item2 a   a   a   あ   2007/12 b   b   b   い   2007/12 c   c   c   う   2007/12 <TABLE2> key1 key1 key1 item1  item2 a   a   a   あ   2007/12 b   b   b   い   2007/12 c   c   c   う   2007/12 d   d   d   え   2008/01 (削除しない) e   e   e   お   2008/03 (削除対象) <DELETE結果 TABLE2> key1 key1 key1 item1  item2 a   a   a   あ   2007/12 b   b   b   い   2007/12 c   c   c   う   2007/12 d   d   d   え   2008/01 よろしくお願いします。 (環境:SQL Server2005 Standard)

  • すべてのテーブルのすべてのレコードを削除する方法

    データベースを扱うプログラムに対してユニットテストを行いたいと思っています。 それぞれのテストが終了するごとにすべてのテーブル内のすべてのレコードを削除したいのですが、 delete from table_a; delete from table_b; delete from table_c; ... のように書くと、外部キー制約に引っかかってしまい削除できないことがあります。 短いSQL文で複数のテーブル内のレコードをすべて削除する方法はないのでしょうか? よろしくお願いします。 ちなみに、私が現在使っているDBMSはPostgreSQL 8.1です。