- ベストアンサー
Access :ALTER TABLE で作成した文字列フィールドがトリミングされない
いつもお世話になっております。 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 と、フィールド追加後にプロパティを変更してみたりもしたのですが、 やはり、空白が出てしまいます。 作成したフィールドの空白文字がセットされないようにするにはどのようなことを行えばよいのでしょうか。 ご教授のほど、宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
CHAR 型は固定文字列なのでそういうことになってしまいます。 これを回避するには VERCHAR 型を使用してください。
その他の回答 (2)
いくつか気が付いた点を・・・。 (1) 前提条件として、使用しているDBMSを明記した方がよいと思います。 (Jetか、それ以外かで、話が変わってくる場合がありますので) (2) データが入っているテーブルを直接変更するのは危険ではないでしょうか? 当然、バックアップは取っているでしょうが、ワークテーブルを使用した方が 手堅いと思います。 (3) 問題のフィールドをRTrimで後から整形する方法も考えられると思いますが、 どうでしょうか?
お礼
ご返答有難うございます。 前提条件の提示のご警告、失礼致しました。 以後気をつけたいとおもいます。 因みにJetでした。 テーブルの変更は、バージョン移行時の1度のみで、 以降、変更することはないということを報告致します。 トリミングも考えたのですが、先の質問の方のご回答を 採用させていただきました。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 CHARだと固定長文字列になるからだと思います。 TEXTで指定すれば、可変長文字列になると思います。 ただし、メモ型になるかも知れません。 あとは、CHARで作成した後に、更新クエリなどで「""」(長さ0の文字列)なり、「NULL」なりを一括代入するとか。
お礼
ご返答有難うございます。 今回は先の回答の方の方法を取らせて頂きましたが、 非常に勉強になりました。
お礼
ご返答有難うございました。 VARCHAR型にすることで現象を回避することができました。