- ベストアンサー
Access2010 テキスト型をスペース埋めずに
Access2010でテキスト型の項目に、テーブルを開いて直セル入力orコピペでデータを入力すると、最大文字長(255文字)まで後ろにスペースが埋められるのですが VBAでADOを使ってデータをINSERTするとスペース埋めされないようです。 これはAccessの仕様ですか? それとも私の勘違いでしょうか。 できればスペース埋めずに登録したいのですが・・・。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> Access2010でテキスト型の項目に、テーブルを開いて直セル入力orコピペでデータを入力すると、最大文字長(255文字)まで後ろにスペースが埋められるのですが まさかとは思いましたが、 この現象に出くわしました。\(◎o◎)/! Access 2010 SP2 です。 【再現手順】 テーブル作成、数値型のフィールド作成し保存して閉じる。 (既存のもので可、数値型のフィールド込みのもの) 上記テーブルをデザインビューで開き、 数値型のフィールドをテキスト型に変更、 「オブジェクトに名前を付けて保存」で別名にして保存。 閉じる。 変更したテーブルをデータシートビューで開くと、 当該フィールドで質問者さんの現象が起きます。 【対策】 当該フィールドの構造に影響のあるような変更を加える。 ・「ユニコード圧縮」を「はい」にする。 ・「フィールドサイズ」を「254」にしてみる。 等々。 これで、新規入力は改善されますが、 入力済みのデータのスペースは削除されません。 改めて、更新クエリで UPDATE テーブル名 SET フィールド名 = RTrim([フィールド名]) とか。
その他の回答 (2)
- hatena1989
- ベストアンサー率87% (378/433)
> Access2010でテキスト型の項目に、テーブルを開いて直セル入力orコピペでデータを入力すると、最大文字長(255文字)まで後ろにスペースが埋められるのですが そもそもこれが勘違いかと。 Accessのテキスト型のフィールドは、固定長ではなく、可変長なので、そのようなことはないです。 下記のリンク先の最後の方に、下記の記述があります。 > 注: テキスト型フィールドのデータ (Access 2016 を使用する場合は短いテキスト) では、実際の値を保存するのに必要な領域だけが確保されます。" フィールド サイズの設定 - Access https://support.office.com/ja-jp/article/%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89-%E3%82%B5%E3%82%A4%E3%82%BA%E3%81%AE%E8%A8%AD%E5%AE%9A-ba65e5a7-2e6f-4737-8e72-36b93f966a33#bm3
お礼
返信が大変遅くなり申し訳ありません。 回答ありがとうございます。 そのリンク先の記事は見覚えがあり、 私もAccessのテキスト型フィールドは、固定長ではなく可変長という認識だったのですが、 データ入力後にテーブルを開いて、 直接選択してみても、メモ帳にコピペしても、スペースが埋められてるようなので 固定長としか考えられませんでした。 Unicode圧縮を「いいえ」にすることで解決できました。
- uams
- ベストアンサー率63% (100/157)
はじめまして。 文字列には可変長と固定長というものがあります。どのようにINSERT文を書いているのかわかりませんが、固定長の文字列変数にスペースを付けてからSQL文を実行すればよいかと思います。Accessの仕様は確認していませんので、SQL文を組み立てる際の参考にしてください。 ちなみに、データベース設計の観点からすると「スペース埋め」はオススメしません。スペースも立派な文字ですのでデータベースの領域を使用します。そのため、件数が増えるにつれて無駄にデータベースサイズが大きくなります。 スペース埋めをする目的が印刷や画面表示のためであれば、そのタイミングでスペースを埋めて表示する方が無駄がありません。何より仕様変更(印刷や画面のレイアウト変更など)に強くなります。データベースはデータの保管場所と割り切って、アウトプットするときに調整する方がスマートです。
お礼
返信が大変遅くなり申し訳ありません。 私もスペースを埋めずに登録したいです。。。 Unicode圧縮を「いいえ」にすることで解決できました。
お礼
> ・「ユニコード圧縮」を「はい」にする。 原因はコレでした! ユニコード圧縮を「いいえ」から「はい」に変更したら、余分なスペースが埋められずに登録することができました!! あと、 > INSERTするとスペース埋めされない は私の勘違いで、INSERTでも直接入力でも同じでした。すみません。 回答ありがとうございました。