既存テーブルにフィールドを追加するには?

解決


はづき  2003-04-02 10:31:56  No: 77514

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でも結果は同じでした・・・ご回答よろしくお願いします


魔界の仮面弁士  2003-04-02 11:04:10  No: 77515

まず、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
のような感じですね。


はづき  2003-04-02 11:29:10  No: 77516

こんな時間に迅速回答ありがとうございました
無事作成できました
コレクションから取得してもSqlでEXECUTEでも結果は同じもが得られているのでしょうか?
ならSQLの方が簡単ですよね?


魔界の仮面弁士  2003-04-02 19:17:01  No: 77517

> コレクションから取得してもSqlでEXECUTEでも結果は同じもが得られているのでしょうか?

上記の例に関して言えば、結果は同等です。

ただし、DAO.TableDefオブジェクト経由でしか指定できない設定
(列の'説明'や'表題'の指定など)もありますので、指定項目によっては、
オブジェクトでの設定とSQLでの設定を使い分ける(もしくは併用する)
必要があるかもしれません。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加