* テーブル名の変更について [#d039b109]
 |RIGHT:|LEFT:|c
 |~ページ|[[OpenOffice.org FAQの登録ページ]]|
 |~投稿者|タイガー|
 |~分類|#listbox3(Q&A,faq03,class)|
 |~優先順位|#listbox3(低,faq03,priority)|
 |~状態|#listbox3(回答中,faq03,state)|
 |~状態|#listbox3(完了,faq03,state)|
 |~カテゴリー|#listbox3(Base データベース,faq03,category)|
 |~投稿日|2010-12-17 14:28:37 (金)|
 |~OS|Win XP|
 |~依存するページ||
 |~バージョン|#listbox3(3.2.1,faq03,version)|
 
 ** メッセージ [#ece8ff28]
 |LEFT:|c
 |回答ページでは行末に「~」を付加する必要はありません|
 いつもお世話になります。
 色々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 [#id78f404]
 >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するのはちょっと怖い気もします。~
 
 //
 ***そうですか残念です・・・ [#u4cdda6e]
 >タイガー (2010-12-17 18:00:44 (金))~
 ~
 M.Kamataki さん 有難うございます~
 その方法で既に行っておりますが、大量のデータで処理時間が掛る為~
 簡単に名前だけ変更できないかと思いまして・・・~
 ~
 変更する手がないとしたら、~
 テーブルのコピーや削除等していると~
 ファイルサイズが膨れてきて最適化したいのですが~
 良い方法ありますか?~
 ~
 エクセルVBAでは下記サイトの内容でできましたが~
 OOo Basicではどうでしょうか?~
 ~
 http://www.accessclub.jp/samplefile/samplefile_74.htm~
 
 //
 ***ADOX.Catalog から [#m874ba63]
 >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~
 
 //
 ***有難う御座いました [#r3b9557a]
 >タイガー (2010-12-20 14:44:40 (月))~
 ~
 有難う御座いました~
 一度ゆっくり勉強致します。~
 
 //
 ***とりあえず完了にします [#l3bf7d5f]
 >M.Kamataki (2010-12-25 23:21:35 (土))~
 ~
 コメントありがとうございました。~
 
 //
 #article