2017-07-27 12 views
0

外部の.NetアプリケーションからMS Accessデータベースに接続しています。私は、データベースのスキーマをアップグレードするためにSQLを使用する必要があります。アップグレードの一部には、1対多の関係の一部である表の名前を変更する必要があります。SQLを使用してリレーションシップでMS Accessテーブルの名前を変更する方法は?

SQLを使用してMS Accessで実際にテーブルの名前を変更することはできません。私の研究は私に以下の解決策をもたらしました。

SELECT * INTO OldTableName FROM NewTableName 
DROP TABLE OldTableName 

これは、関係の一部ではない表に対して正しく動作するように見えます。ただし、テーブルがリレーションシップに属している場合、DROP TABLE SQLの実行時に次の例外が発生します。

Cannot delete this index or table. It is either the current index or is used in a relationship. 

私は古いテーブルをドロップすることができるように作成された新しいテーブルを指すようにMS Accessでの関係を更新することができますSQLを介した方法はありますか?

+0

あなたは、テーブルの削除前に古い外部キー制約を削除してから新しい –

+0

OKを作成する必要がありますが、これに手の込んだだろうか?多分私は何を理解しようとしているいくつかのSQLと。 – user1227445

答えて

1

あなたはおそらく、単にテーブルの名前を変更するには、AccessのDAOを使用することによって、自分自身にいくつかの悲しみを保存することができます。アクセスDAOのためのCOMの参照が必要になります

using Microsoft.Office.Interop.Access.Dao; 

namespace AccessDaoConsoleApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var dbe = new DBEngine(); 
      Database db = dbe.OpenDatabase(@"C:\Users\Public\Database1.accdb"); 
      TableDef tbd = db.TableDefs["OldTableName"]; 
      tbd.Name = "NewTableName"; 
      db.Close(); 
     } 
    } 
} 

.NETプロジェクト。私が使用したものは、あなたが最初に外部キー制約をドロップする必要があります

のMicrosoft Office 14.0 Accessデータベースエンジンオブジェクトライブラリ

+0

これで、エンドユーザーのコンピュータにOfficeをインストールする必要がありますか? – user1227445

+0

@ user1227445 - いいえ、アクセスDAOはAccessデータベースエンジンの一部です。彼らはアクセスOLEDB/ODBCを行うことができる場合、彼らはあまりにもDAOのアクセスを行うことができます。 –

+0

しかし、それはどこから来たのですか?エンドユーザーはAccessをインストールしなければならないでしょうか? – user1227445

0

ました。 SQLを使用してこれを行うには、たとえばhereのように表示されます。次に、新しい制約を作成:

alter table City 
    add constraint FK_City_REF_States foreign key (ID_State) 
     references States (ID_State); 
+0

私はちょうど同じポストを見つけ、あなたが言ったように正確にやってみました。問題は、私が制約を取り除こうとすると、私がMsysrelationshipsから読むための許可を持っていないということを伝えるエラーが出て、基本的にその考えを殺したということです。あなたが実際にそのテーブルから読むことができない場合、その質問に対する答えとしてなぜ受け入れられたのか分かりません。 – user1227445

+0

Accessの外からこのテーブルを読み取る方法はいくつかありますが、これを検索できます。しかし、データベースがあなたのコントロール下にあり、動的に変更されていなければ、実際には外部からこのテーブルを読む必要はありません。 Accessを開き、制約名を一度読み込み、.netコードで使用するだけです –

関連する問題