テーブル名の変更について †
ページ | OpenOffice.org FAQの登録ページ |
---|---|
投稿者 | タイガー |
分類 | |
優先順位 | |
状態 | |
カテゴリー | |
投稿日 | 2010-12-17 14:28:37 (金) |
OS | Win XP |
依存するページ | |
バージョン |
メッセージ †
回答ページでは行末に「~」を付加する必要はありません |
いつもお世話になります。 色々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 (土))
コメントありがとうございました。