* テーブル名の変更について [#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