プロが教えるわが家の防犯対策術!

いつもお世話になっております。
Access2000を使用しております。

Accessで作成した、あるシステムのバージョンアップを行っております。
その際、複数のテーブルにフィールドを追加する移行プログラムを作成しております。



Dim DB As DAO.Database

Set DB = OpenDatabase("外部DB.MDB")
DB.Execute ("ALTER TABLE 既存テーブル ADD 追加フィールド CHAR(255)")

DB.Close 'データベースを閉じる
Set DB = Nothing


上記のようなプログラムを走らせたのですが、
作成された追加フィールドにデータを入力すると、
入力した値の後に指定サイズ分の空白文字ができてしまいます。
つまり、10文字入力した場合
255-10=245文字が空白として登録されてしまいます。

Unicode圧縮プロパティのせいかな、と思い、

Dim TBL As DAO.TableDef
Dim FLD As DAO.Field
Dim prUC As DAO.Property

Set TBL = DB.TableDefs("既存テーブル")
Set FLD = TBL.Fields("追加フィールド")
Set prUC = FLD.Properties("UnicodeCompression")
prUC.Value = True

と、フィールド追加後にプロパティを変更してみたりもしたのですが、
やはり、空白が出てしまいます。

作成したフィールドの空白文字がセットされないようにするにはどのようなことを行えばよいのでしょうか。
ご教授のほど、宜しくお願い致します。

A 回答 (3件)

 CHAR 型は固定文字列なのでそういうことになってしまいます。


 これを回避するには VERCHAR 型を使用してください。
    • good
    • 0
この回答へのお礼

ご返答有難うございました。

VARCHAR型にすることで現象を回避することができました。

お礼日時:2003/03/03 09:13

いくつか気が付いた点を・・・。



(1) 前提条件として、使用しているDBMSを明記した方がよいと思います。
  (Jetか、それ以外かで、話が変わってくる場合がありますので)

(2) データが入っているテーブルを直接変更するのは危険ではないでしょうか?
  当然、バックアップは取っているでしょうが、ワークテーブルを使用した方が
  手堅いと思います。

(3) 問題のフィールドをRTrimで後から整形する方法も考えられると思いますが、
  どうでしょうか?
    • good
    • 0
この回答へのお礼

ご返答有難うございます。
前提条件の提示のご警告、失礼致しました。
以後気をつけたいとおもいます。
因みにJetでした。

テーブルの変更は、バージョン移行時の1度のみで、
以降、変更することはないということを報告致します。

トリミングも考えたのですが、先の質問の方のご回答を
採用させていただきました。

お礼日時:2003/03/03 09:18

こんにちは。

maruru01です。

CHARだと固定長文字列になるからだと思います。
TEXTで指定すれば、可変長文字列になると思います。
ただし、メモ型になるかも知れません。
あとは、CHARで作成した後に、更新クエリなどで「""」(長さ0の文字列)なり、「NULL」なりを一括代入するとか。
    • good
    • 0
この回答へのお礼

ご返答有難うございます。
今回は先の回答の方の方法を取らせて頂きましたが、
非常に勉強になりました。

お礼日時:2003/03/03 09:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!