• 締切済み

テーブルの削除

vb6でaccess2000テーブル(作成したもの)をすべて削除しようと試みますが何点か残ってしまいます。一発で削除する方法ありますか? For Each tbl In dbs.TableDefsの構文を使っています。

みんなの回答

回答No.2

vb6は無いので、excelのvbaです。 基本的には動くと思うのですが・・・ 以下のプログラムでどう表示しますか? Sub test() Dim mdb As String mdb = "C:\なんたら.mdb" 'mdbのフルネーム 'Dim acc As New Access.Application '参照設定している場合 Const DB_ATTACHEDTABLE = &H40000000 Dim acc As Object Set acc = CreateObject("Access.Application") Dim tbl As Object acc.OpenCurrentDatabase mdb For Each tbl In acc.CurrentDb.TableDefs If (tbl.Attributes = DB_ATTACHEDTABLE) Or (tbl.Attributes = 0) Then MsgBox tbl.Name End If Next Set acc = Nothing End Sub p.s. Attributesの指定で、定数のDB_TABLEを使うと正しく表示されません。 DB_TABLEは1なのですが、テーブルは0を返します。

回答No.1

For Each tbl In dbs.TableDefsのループ内で、動的に削除をするとおかしくなるのかもしれません。 まずループ内で削除対象のテーブル名を配列に取得して、別ループで削除してみてはどうでしょうか?

taka3crown
質問者

補足

Debug.Printで覗いてみてもすべてのテーブルを表示していません。

関連するQ&A

  • アクセス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の旧バージョンです。 複数質問で申し訳ありませんが、よろしくお願い致します。

  • Access 外部MDBのリンクテーブルの変更

    お世話になってます。 Access2007へ移行のため、移行用のmdbを作成し、移行する既存のmdb群のMSysObjectsを変更しようとしています。 以下のようにVBAで自分のリンクテーブルの接続パスワードは変更できたのですが、同じく他のMDBを指定してリンクテーブルを変更する事は出来るでしょうか? Dim dbs As DAO.Database Dim tdf As DAO.TableDef Set dbs = CurrentDb For Each tdf In dbs.Tabledefs   If Len(tdf.Connect > 0 Then     tdf.Connect=";PWD=" & strPWD  '←リンクテーブルの接続PWDの変更     tdf.RefreshLink   End If Next よろしくお願い致します。

  • Access 2000 VBA リンクテーブル

    Access 2000 VBAでシステム開発を行っております。 Oracle 7 と接続してリンクテーブルを作成しています。 通常は問題なく動作するのですが、 Access のフォーム上にボタンを配置して、あるボタンがクリックされたら、 リンクテーブルの参照先を変更して、リンクテーブルを再作成するといったことを 行おうと考えております。 しかし、ソース上でリンクテーブルの参照先を変更しても、 元の参照先でリンクテーブルが作成されてしまい、大変困っております。 どなたか本現象について分かられる方がいらっしゃいましたらご回答のほど 宜しくお願いいたします。 以下がリンクテーブル作成時のソースになります。 Function Create_odbc_table(str_OraTblName As String, str_mdbTblName As String) As Long On Error GoTo Create_odbc_table_Err Create_odbc_table = True Set DBS = CurrentDb DBS.TableDefs.Delete Trim(str_mdbTblName) DBS.TableDefs.Refresh Set tdfA = DBS.CreateTableDef(Trim(str_mdbTblName)) tdfA.Connect = "ODBC;DSN=" & DSN_NAME & ";UID=" & Oracle_UID & ";DBQ= " & Trim(TNS) & ";ASY=OFF;PWD=" & Oracle_PWD & ";TABLE=" & Trim(str_OraTblName) tdfA.SourceTableName = Trim(str_mdbTblName) DBS.TableDefs.Append tdfA DBS.Close end function

  • すべてのテーブル削除

    DELETE tbl1,tbl2,tbl3 FROM tbl1,tbl2,tbl3; DROP TABLE tbl1,tbl2,tbl3 FROM tbl1,tbl2,tbl3; 以外で簡単に複数あるテーブルを削除する方法ってありますでしょうか?

    • ベストアンサー
    • MySQL
  • テーブルの削除

    VB6.0 ACCESS2000で開発しています。 ACCESSのt_名前というテーブルを DataGridへ表示しています。 グリッド上で選択した1件のレコードを削除したいのですが どうすればいいのでしょうか。 お願いします。

  • リンクテーブル(複数)のパス変更について<ACC2003>

    現在ACCESS2003で出荷データから売上の集計が可能となるように 試みているのですが、都合上プログラムとデータを分けて処理 したいと考えております。 そこで、リンクテーブルを活用したいと思うのですが、環境に よってパスが変更となったり、データソースを切り替えたい時 などリンクテーブルのパスが変更できると非常に有難い状況です。 多少ネットで調べVBAで変更させる方法は見つかったのですが、 基本的に1つのリンク先を想定しているとの事で、複数は対応 していないようです。 例えば、リンクテーブルをそれぞれ TBL伝票データ   → C:\DB1\A.mdb TBL得意先マスター → C:\DB2\B.mdb TBL商品マスター  → C:\DB2\C.mdb と言ったように複数リンク先がある場合でそれぞれ パス変更が生じた場合に簡単に変更ができる方法は無いでしょうか。 (リンクファイルが1つの場合) Dim db As Database Dim a As TableDef Set db = CurrentDb() For Each a In db.TableDefs If Len(a.Connect) <> 0 Then a.Connect = ";database=" & NEWPATH '→新しいパス名 a.RefreshLink End If Next db.TableDefs.Refresh

  • 【Access】テーブルの参照について

    Accessでツール作成をしたいのですが当SWの使用経験が浅く使い方が分からず困っています。 AccessにはOracleでいうviewのような機能はAccessには存在するのでしょうか。 リンクテーブルという機能があるのは知っていますが、リンク元・先でデータベースが別でなければならないと理解しています。 私がやりたいことは、同じデータベース内に存在するテーブルを複数参照し、「一つのテーブルに見せる」といった動作です。 以下、参考に記載します。(やりたいこと) (1)TBL1(input):カラム1,カラム2 (2)TBL2(input):カラム3,カラム4,カラム5 (3)TBL3(TBL1+TBL2):TBL1.カラム1,TBL1.カラム2,TBL2.カラム5 →TBL3をOracleでいうviewの形で持ちたい 良い方法があればご教示ください。

  • アクセステーブルがあれば削除VBA

    win10 office365 access365におきまして テーブル この例ではTMPがあれば テーブルそのものを削除し (ですから削除クエリを使うこととは違うと思いましたが) はじめから存在しないときは次のコードに進む ということでほかの記事を参考に作ってみたのが Public Function tmpdelete() If funcTableExists("T_TMP") = True Then DoCmd.DeleteObject acTable, "T_TMP" End If End Function ----------------------- そもそもfuncTableExistsというのは 付属の関数ではないのかなと調べまして ----------------------- Private Function funcTableExists(ByVal strTableName As String) As Boolean Dim db As Database Dim tdf As TableDef Set db = CurrentDb For Each tdf In db.TableDefs If (T_TMP= strTableName) Then funcTableExist = True Exit Function End If Next tdf Set tdf = Nothing db.Close Set db = Nothing End Function --------------------- If (T_TMP= strTableName) Then ここに削除判定の対象のテーブル名を入れましたが 上記いずれも 作動しません マクロのプロシージャで組み入れたいので subでばく functionで書くようにとありましたので 上記のようにしました また すみません 宜しくお願い致します

  • 巨大テーブルからインデックスを複数削除する場合について

    巨大テーブルのINDEXを複数削除したいのですが、 MySQLでインデックスを削除すると、 テンプテーブルを作成してしまうので、 テンプテーブルが作られるのを1度で済ませたいのですが、 DROP INDEX構文で、複数のINDEXを指定する事は無理でしょうか?

    • ベストアンサー
    • MySQL
  • 非表示のテーブルは取得したくない

    全てのテーブル名を取得したくて Sub test() Dim DB As Database Dim T As TableDef Set DB = OpenDatabase(CurrentProject.FullName) For Each T In DB.TableDefs Debug.Print T.Name Next DB.Close Set DB = Nothing End Sub を実行したのですが MSysAccessObjects MSysAccessXML MSysACEs MSysDataCollection MSysIMEXColumns MSysIMEXSpecs MSysNavPaneGroupCategories MSysNavPaneGroups MSysNavPaneGroupToObjects MSysNavPaneObjectIDs MSysObjects MSysQueries MSysRelationships など余計なものまで取得されてしまいます。 ナビゲーションウインドウに表示されている テーブルのみ取得するにはどうすればいいでしょう? ifステートメントで「非表示なら」もしくは 「システムテーブルなら」として、はじくにはどうすればいいでしょう?

専門家に質問してみよう