• 締切済み

accessでSQL実行時のテーブル名にdbo?

access2007を使用しています。 テーブルをリンクで参照しているのですが、全てのテーブル名に「dbo_」と付いています。 accessにてSQLを実行する際、 「作成タブ」>「クエリデザイン」>「SQL表示」>SLQ記入>「!ボタン(実行)」 にて実行しています。 SQL記入の際にテーブル名に「dbo_」を入力しなければなりません。 これを無しで実行する方法は無いのでしょうか?

  • 7u7
  • お礼率75% (63/83)

みんなの回答

  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.2

> 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)
回答No.1

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)クエリデザイン画面でテーブルを右クリックして、プロパティの別名を変更。

7u7
質問者

お礼

nora1962さん、ご回答ありがとうございます。 テーブルが数百あるので1つ1つ変えるのはかなり厳しいと考え、(2)を選択しました。 モジュールを作成し実行してみた所、 Executeの所で「functionまたは変数が必要です」と表示されてしまいエラーとなってしまします。 原因を調べてみましたが分かりませんでした。 申し訳ありませんが、どのように修正すればよろしいのでしょうか?

関連するQ&A

  • SQLサーバーのテーブルに対してアクセスで更新クエリを行ないたい

    こんばんは。 ・vista ・アクセス2003 ・SQL Server 2005 です。 SQL ServerからテーブルをMDBへリンクしているのですが そのテーブルに対し、アクセス側で更新クエリを実行しようとすると 実行時エラー '3157': ODBC--リンク テーブル'テーブル名'での更新に失敗しました。 [Microsoft][ODBC SQL Server Driver]時間切れになりました。(#0) と言うエラーになり、更新クエリができません。 どうすればアクセスでSQLサーバーのテーブルに対して更新クエリを行えるのでしょうか? よろしくお願いします。

  • SQLサーバーのテーブルの値が更新できません

    お尋ねします。 SQLサーバー2005にDB1というデータベースにdbo_TB1というテーブルがあります。そのテーブルの特定の列の値を更新したいので、AC.mdbというアクセスのファイルにテーブルのリンクをし、更新したいファイルを用意して、アクセスのクエリでデータを更新しようとしましたところ、更新ができませんでした。  dbo_TB1を更新可能にするためには、どのようにして権限を与えればいいでしょうか。  SQLサーバー2005の知識を習得しようと学習を始めたばかりで、よく理解できていません。よろしくお願いします。

  • SQLコマンドを使ってテーブル名を任意に指定したい

    Accessのテーブル(もしくはクエリー)をExcelにエクスポートしたいのですが、Excelのブック名が同じで、Accessのテーブル名(もしくはクエリー名)が同じだと、同じシートに上書きされますよね。同一ブックにシート名を変えてエクスポートするために、Accessのテーブル名を変えたいのですが、どのようにしたら任意設定できるのでしょうか?下記のコマンドを使用している途中で挫折しました。別の方法でもいいので教えてください。 (記) Dim SQL As String SQL = "SELECT (フィールド)INTO (ここを任意のテーブル名に)FROM (クエリーを参照しています)" DoCmd.RunSQL SQL DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8,(ここを任意のテーブル名に), (ブック名) 以上。。。

  • スキーマー名が邪魔

    現在Access(DB用mdbと,そのmdbにリンクテーブルしているクライアント用mdb)で稼動しているDBをAccess+SQLServer2008 R2 EXPRESSという環境に移行しようとしています。 以下の質問を参考に http://okwave.jp/qa/q4935022.html?rel=innerHtml&p=bottom&l=1 SSMSを使ってAccessからのテーブルデータの移行を行いました。 そうしたところ スキーマ(?)として必ずdbo.テーブル名となってしまい、Accessからリンクテーブルするとdbo_テーブル名とデフォルト名がなってしまいました。 Accessのテーブルの名前の変更でリンクテーブルしたものからdbo_を取ることで解消すると言うことはわかっていますが、テーブルの数が100を超えるのでできればAccessからリンクをしに行った時点でdbo無しの状態にしたいと思っています。 SQLサーバーでテーブル名からdbo.と言うのをはずす方法はないのでしょうか? インポートの設定(マッピングのあたり)から無理やりはずしたりもしてみましたが勝手にdbo付属してしまいました。 よろしくお願いいたします。

  • SQLサーバーに保存してあるクエリをアクセスで開くには?

    SQLサーバーに保存してある「クエリ1.sql」をアクセスで開くにはどうすればいいでしょう? アクセスで「リンクテーブル」→「ODBC接続」 でテーブルのリンクはできているのですが クエリをリンクするにはどうすればいいでしょうか? 宜しくお願い致します。

  • SQLでスキーマ名(所有者名)の修飾無しでテーブル参照したい

    select * from [テーブル名] で問い合わせをしたいんですが、 select * from [スキーマ名].[テーブル名] でなければエラーになってしまいます。 (「オブジェクト名 'テーブル名' は無効です。」といった、テーブルが無い旨のエラーが出ます。) 所有者(スキーマ名?)をdboに変更してするとテーブル名だけで参照できます。 例えば、テーブルの所有者を'test_user'に変更した場合、 test_userでログインしているにもかかわらず(クエリアナライザ)、修飾が無いと参照できません。 'test_user'はsystem administratorsロールに入れてあります。 SQLServerをインストールし直して DBを一から構築してもそうなります。 何か施さないといけないことがあるのでしょうか。 思い当たることがございましたら、ご教示頂ければと思います。 環境は SQL Server 2000 です。

  • ACCESSのクエリ実行について

    ACCESSのクエリを作成しておりますが  ・クエリを「開く」で実行すると固まる  ・クエリを「デザイン」でSQL文表示させてから実行すると固まる  ・クエリを「デザイン」でSQL文表示させてコピーし、   コピーしたSQL文を新規クエリに貼り付け、実行すると正しく動作する 上記現象の場合、考えられる原因はなんでしょうか? 環境はWIN2K、ACCESS97を利用しております。 SQL文は追加クエリ(INSERT文)で、抽出行数は1000行程度です。

  • Accessのクエリ実行について

    すみません。ご存知でしたら、教えてください。 まず一点、基本(?)を確認させてください。 下記のように数個のテーブルとそれらを使用した数個のクエリがあったとします。 下記の場合に、もしどれかのテーブルを更新したとします。 その場合、アクセスを立ち上げて、クエリ3を実行するだけで、結果には反映されているのでしょうか?それとも、アクセスを立ち上げて、 クエリ1を実行し閉じ、クエリ2を実行し閉じ、最後にクエリ3を実行しないと、反映されていないのでしょうか? --------------------------------------------------------- テーブルリンクA 、テーブルリンクB、テーブルリンクC、テーブルリンクD ↓↓ テーブルAとテーブルBでクエリ1(マッチング)を作成 テーブルCとテーブルDでクエリ2(マッチング)を作成 ↓↓ クエリ1とクエリ2でクエリ3(マッチング)を作成 ------------------------------------------------- 続いて、もし上記でいちいち途中のクエリを実行しないと、 最後のクエリに反映されない場合、すべてをACCESSを立ち上げたと同時に自動実行し、自動で最後のクエリ(この場合、クエリ3)をエクスポートしたいと考えています。可能でしょうか? 素人な質問ですみません。 何卒よろしくお願いいたします。

  • ACCESS2000 INPUTBOX でテーブル名を入れながらテーブル作成

    こんにちは。 ACCESS2000 で、さいきん初心者に毛が生えてきました。 通常 VBA を書くときはマクロでいったん作成してから、都合よく書き直しています。 が、マクロに「テーブル作成」という選択肢がありません。 それでマニュアルを見ながら CREATE TABLE 0310 ( WHS CHAR(30), CODE CHAR(30), NAME CHAR(50), LOC CHAR(30), QTY LONG ); というSQL文を書きました。これで必要なテーブルは得られるのですが、このテーブル名が毎日変わるので(日付です)、VBA のINPUTBOX でテーブル名を入れながら毎日の作業をしたいのです。 ちなみにSQL 文はQUERY として登録し、マクロの「クエリを開く」で実行することだけはできるんですが。 よろしくお願いします。

  • アクセステーブル、リンクとローカルで違いはある?

    Access2003からSQLServerにリンクテーブルを張ったアプリケーションの作成をしています。 本番リリース時にはすべてのテーブルがリンクテーブルになる予定ですが 開発時にはローカルテーブルで開発をしたいと考えています。 理由は、DBにテスト用のゴミデータを追加したくないことと、 セキュリティの関係で接続出来るマシンが限られるためです。 現状の開発方法としては、 テーブルに一度リンクを張り、テーブル追加クエリでローカルにテーブル構造とデータを退避。 手動で主キーを定義して、そのテーブルを実体をみなして開発をしています。 SQLレベルではローカルテーブルもリンクテーブルも同等の扱いだと思っているのですが 何か制限事項などがあるのであれば教えていただきたいです。 なお、ACCESSからはDBを参照するのみで追加・更新は一切無しません。 追記。 クエリからクエリを参照して、さらにSQL内でサブクエリも記述しています。 その為、度々「クエリが複雑過ぎます。」みたいなメッセージが表示されています。 複雑というより無駄に長いだけだったりするのですが、 ローカルテーブルなら発行出来たのに、 リンクテーブルは発行出来ないなどあれば開発に支障が出ますのでよろしくお願いします。