「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:2017
現在:3


テーブル名の変更について

ページOpenOffice.org FAQの登録ページ
投稿者タイガー
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2010-12-17 14:28:37 (金)
OSWin XP
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

いつもお世話になります。 色々HPで探してみましたが、解決できず書き込みました。

テーブル名変更について、TESTと言うテーブル名をTEST_TEST と言うテーブル名に変更したいのですが、上手く行きません。 "ALTER TABLE TEST RENAME TO TEST_TEST;" や "ALTER TABLE [TEST] RENAME [TEST_TEST];" や "ALTER TABLE [TEST] RENAME TO [TEST_TEST];"などチャレンジしましたが・・・ ダメでした。

アドバイスお願いいたします。

	Dim cn As Object
	Dim cmd As Object
	
	Set cn = New ADODB.Connection
	cmd = CreateObject("ADODB.Command")
	With cn
		.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0"
		.Open mdbURL
	End With
	cmd.ActiveConnection = Cn
	cmd.CommandTimeout = 0
	cmd.CommandText = "ALTER TABLE TEST RENAME TEST_TEST;"
  	cmd.Execute	

AccessのSQL

M.Kamataki (2010-12-17 15:37:53 (金))

AccessのALTER TABLEコマンドにはRENAMEオプションはないみたいです。以下参照。

http://office.microsoft.com/ja-jp/access-help/HP001032207.aspx

手元にある「SQLポケットリファレンス」では、RENAMEというコマンドも載っていますが、これもAccessに対応していません。簡単に調べた限りでは、Accessにテーブル名を変更するSQLコマンドは見つけられませんでした。

もし、SQLで実現するには、

SELECT * INTO new_table FROM old_table;
DROP TABLE old_table;

とすれば良いと思いますが、旧テーブルをDROP TABLEするのはちょっと怖い気もします。

そうですか残念です・・・

タイガー (2010-12-17 18:00:44 (金))

M.Kamataki さん 有難うございます
その方法で既に行っておりますが、大量のデータで処理時間が掛る為
簡単に名前だけ変更できないかと思いまして・・・

変更する手がないとしたら、
テーブルのコピーや削除等していると
ファイルサイズが膨れてきて最適化したいのですが
良い方法ありますか?

エクセルVBAでは下記サイトの内容でできましたが
OOo Basicではどうでしょうか?

http://www.accessclub.jp/samplefile/samplefile_74.htm

ADOX.Catalog から

ike@九州 (2010-12-18 10:27:46 (土))

情報が少ないですね。
http://msdn.microsoft.com/ja-jp/library/cc389692.aspx
上記抜粋
Name プロパティは、Column、Group、Key、Index、Table、および User オブジェクトでは読み取り/書き込み可能です。

Catalog からアクセスしたい Table オブジェクトを取得すれば Name プロパティで変更できる事のようです。

Const scURL = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
Const strTargetMDB = "E:\TEST.mdb"
Sub Main
   sURL = scURL & strTargetMDB & ";"
   oADOCon = CreateObject("ADODB.Connection")
   On Error Resume Next      
   oADOCon.Open(sURL)
   IF oADOCon.State = 0 Then
      MsgBox(strTargetMDB & " に接続できませんでした")
      oADOCon = Nothing
      Exit Sub      
   End IF
   catDB = CreateObject("ADOX.Catalog")
   catDB.ActiveConnection = oADOCon
   tables = catDB.Tables
   
   oldName = "売上テーブル"
   newName = "売上"
   
   table = tables.Item(oldName)
      
   IF IsEmpty(table) Then
      MsgBox(oldName & " というテーブルはありません")
   Else      
      table.Name = newName
      tables.Reflesh '他オブジェクトへの変更反映
      IF table.Name <> newName Then
         MsgBox(oldName & " の名前変更不可です")
      Else
         MsgBox(oldName & " -> " & newName & Chr(13) &"名前変更しました")
      End IF         
   End IF
   
   IF oADOCon.State > 0 Then oADOCon.Close() 
   oADOCon = Nothing
   catDB = Nothing
   
   '最適化
   sPath = left(strTargetMDB,instr(strTargetMDB,dir(strTargetMDB))-1)
   newDBURL = sPath & "saiteki.mdb"
   DBEngine = CreateObject("JRO.JetEngine")
   '構文 CompactDatabase 最適化前の接続、最適化後の接続
   DBEngine.CompactDatabase(scURL & strTargetMDB, scURL & newDBURL)
   'オリジナルMDBを削除
   Kill strTargetMDB
   '最適化後MDBを、オリジナルの名前にリネーム(フルパス指定)
   Name newDBURL As strTargetMDB
   DBEngine = Nothing
End Sub


以下のAPIリファレンスは全て目を通しておくのが吉ですね
http://msdn.microsoft.com/ja-jp/library/cc389593.aspx

有難う御座いました

タイガー (2010-12-20 14:44:40 (月))

有難う御座いました
一度ゆっくり勉強致します。

とりあえず完了にします

M.Kamataki (2010-12-25 23:21:35 (土))

コメントありがとうございました。

お名前:
題名: