DAO3.6でアクセス2000の既存のテーブル(データ格納済み)に
フィールドを追加したくなりました
で以下のコードを書いたのですがフィールドができてくれません
Dim WSワークスペース As DAO.Workspace
Dim DBデータベース As DAO.Database
Dim TBLカレントテーブル As TableDef
Set WSワークスペース = DBEngine.Workspaces(0)
Set DBデータベース = WSワークスペース.OpenDatabase(strデータベースパス)
Set TBLカレントテーブル = DBデータベース.CreateTableDef("既存テーブル名")
With TBLカレントテーブル
.Fields.Append .CreateField("E-mail", dbText, 50)
strSQL = "ALTER TABLE KJNMAS ADD CONSTRAINT PKEY PRIMARY KEY(SEQ)"
End With
いままでプログラムから触ったことがなかったのでまったくわかりません
何か不足しているのでしょうか・・・それともただの構文ミスでしょうか?
Dim TBLカレントテーブル As TableDefでも
Dim TBLカレントテーブル As Dao.TableDefでも結果は同じでした・・・ご回答よろしくお願いします
まず、JET 4.0のSQLで追加するのであれば、こうなります。
ALTER TABLE テーブル1 ADD 新しいTEXT列 TEXT(20), 新しい数値列 INTEGER;
これを、Executeメソッドで実行すれば、列が追加されます。
> Set TBLカレントテーブル = DBデータベース.CreateTableDef("既存テーブル名")
CreateTableDefは、新しいテーブルを作成するためのメソッドです。
既存のテーブルに追加するなら、TableDefsコレクションから取得します。
例えば、
Set Tbls = objDatabase.TableDefs()
Set Tbl = Tbls("テーブル1")
Set Fld = Tbl.CreateField("E-mail", dbText, 50)
Tbl.Fields.Append Fld
のような感じですね。
こんな時間に迅速回答ありがとうございました
無事作成できました
コレクションから取得してもSqlでEXECUTEでも結果は同じもが得られているのでしょうか?
ならSQLの方が簡単ですよね?
> コレクションから取得してもSqlでEXECUTEでも結果は同じもが得られているのでしょうか?
上記の例に関して言えば、結果は同等です。
ただし、DAO.TableDefオブジェクト経由でしか指定できない設定
(列の'説明'や'表題'の指定など)もありますので、指定項目によっては、
オブジェクトでの設定とSQLでの設定を使い分ける(もしくは併用する)
必要があるかもしれません。
ツイート | ![]() |