- 締切済み
accessでSQL実行時のテーブル名にdbo?
access2007を使用しています。 テーブルをリンクで参照しているのですが、全てのテーブル名に「dbo_」と付いています。 accessにてSQLを実行する際、 「作成タブ」>「クエリデザイン」>「SQL表示」>SLQ記入>「!ボタン(実行)」 にて実行しています。 SQL記入の際にテーブル名に「dbo_」を入力しなければなりません。 これを無しで実行する方法は無いのでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- m3_maki
- ベストアンサー率64% (296/460)
> Set rs = db.Execute("select Name from MsysObjects where Name Like ""dbo_*"" and type = 6") この行でエラーにならなかったら無限ループですね。 エラーになってラッキーです。 システムオブジェクトを開いてトラブルがあると怖いものがあるので 「MsysObjects」 を参照しない方法で。 Sub Proc_LinkTable_Rename() Dim dbs As DAO.Database Dim tdf As DAO.TableDef Set dbs = CurrentDb For Each tdf In dbs.TableDefs If tdf.Connect <> "" Then If tdf.Name Like "dbo_*" Then tdf.Name = Mid(tdf.Name, 5) End If End If Next dbs.Close Set dbs = Nothing End Sub ナビゲーションウィンドウには遅れて表示されるかもしれません。
- nora1962
- ベストアンサー率60% (431/717)
3つぐらい方法はあるかと思います。 (1)テーブルのリンクテーブルを一個一個、「名前の変更」で「dbo_」をはずす。 (2)以下のようなサブプロシージャーを作成して実行 Sub proc_linktable_rename() Dim db As DAO.Database Dim tdf As DAO.TableDef Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.Execute("select Name from MsysObjects where Name Like ""dbo_*"" and type = 6") Do Until rs.EOF Set tdf = db.TableDefs(rs.Fields(0)) tdf.Name = replace( rs.Fields(0), "dbo_", "") Loop Set tdf = Nothing Set db = Nothing End Sub (3)クエリデザイン画面でテーブルを右クリックして、プロパティの別名を変更。
お礼
nora1962さん、ご回答ありがとうございます。 テーブルが数百あるので1つ1つ変えるのはかなり厳しいと考え、(2)を選択しました。 モジュールを作成し実行してみた所、 Executeの所で「functionまたは変数が必要です」と表示されてしまいエラーとなってしまします。 原因を調べてみましたが分かりませんでした。 申し訳ありませんが、どのように修正すればよろしいのでしょうか?