• ベストアンサー

Access2010 テキスト型をスペース埋めずに

Access2010でテキスト型の項目に、テーブルを開いて直セル入力orコピペでデータを入力すると、最大文字長(255文字)まで後ろにスペースが埋められるのですが VBAでADOを使ってデータをINSERTするとスペース埋めされないようです。 これはAccessの仕様ですか? それとも私の勘違いでしょうか。 できればスペース埋めずに登録したいのですが・・・。

質問者が選んだベストアンサー

  • ベストアンサー
  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.3

> Access2010でテキスト型の項目に、テーブルを開いて直セル入力orコピペでデータを入力すると、最大文字長(255文字)まで後ろにスペースが埋められるのですが まさかとは思いましたが、 この現象に出くわしました。\(◎o◎)/! Access 2010 SP2 です。 【再現手順】 テーブル作成、数値型のフィールド作成し保存して閉じる。 (既存のもので可、数値型のフィールド込みのもの) 上記テーブルをデザインビューで開き、 数値型のフィールドをテキスト型に変更、 「オブジェクトに名前を付けて保存」で別名にして保存。 閉じる。 変更したテーブルをデータシートビューで開くと、 当該フィールドで質問者さんの現象が起きます。 【対策】 当該フィールドの構造に影響のあるような変更を加える。 ・「ユニコード圧縮」を「はい」にする。 ・「フィールドサイズ」を「254」にしてみる。 等々。 これで、新規入力は改善されますが、 入力済みのデータのスペースは削除されません。 改めて、更新クエリで UPDATE テーブル名 SET フィールド名 = RTrim([フィールド名]) とか。

fxgame1224
質問者

お礼

> ・「ユニコード圧縮」を「はい」にする。 原因はコレでした! ユニコード圧縮を「いいえ」から「はい」に変更したら、余分なスペースが埋められずに登録することができました!! あと、 > INSERTするとスペース埋めされない は私の勘違いで、INSERTでも直接入力でも同じでした。すみません。 回答ありがとうございました。

その他の回答 (2)

回答No.2

> 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

fxgame1224
質問者

お礼

返信が大変遅くなり申し訳ありません。 回答ありがとうございます。 そのリンク先の記事は見覚えがあり、 私もAccessのテキスト型フィールドは、固定長ではなく可変長という認識だったのですが、 データ入力後にテーブルを開いて、 直接選択してみても、メモ帳にコピペしても、スペースが埋められてるようなので 固定長としか考えられませんでした。 Unicode圧縮を「いいえ」にすることで解決できました。

  • uams
  • ベストアンサー率63% (100/157)
回答No.1

はじめまして。 文字列には可変長と固定長というものがあります。どのようにINSERT文を書いているのかわかりませんが、固定長の文字列変数にスペースを付けてからSQL文を実行すればよいかと思います。Accessの仕様は確認していませんので、SQL文を組み立てる際の参考にしてください。 ちなみに、データベース設計の観点からすると「スペース埋め」はオススメしません。スペースも立派な文字ですのでデータベースの領域を使用します。そのため、件数が増えるにつれて無駄にデータベースサイズが大きくなります。 スペース埋めをする目的が印刷や画面表示のためであれば、そのタイミングでスペースを埋めて表示する方が無駄がありません。何より仕様変更(印刷や画面のレイアウト変更など)に強くなります。データベースはデータの保管場所と割り切って、アウトプットするときに調整する方がスマートです。

fxgame1224
質問者

お礼

返信が大変遅くなり申し訳ありません。 私もスペースを埋めずに登録したいです。。。 Unicode圧縮を「いいえ」にすることで解決できました。

関連するQ&A

  • エクセル→アクセスのコピペで切り捨てられてしまう

    アクセス初心者です。アクセスのバージョンはoffice365です。 アクセスのテーブルをエクセルにコピペして加工し、加工したものを再度アクセスのテーブルに貼り付けるという処理をしています。 あるフィールドが、アクセス→エクセルはうまくいきますが、エクセル→アクセスで255文字でデータが切り捨てられてしまいます。 フィールドのデータ型は「長いテキスト」ですので、検索したところ、64,000 文字までは入るようです。 もともとアクセスで入力をしていて、そのフィールドには255文字以上のデータも入っています。 エクセルへのコピペはうまくいくのに、なぜアクセスに戻す時に切り捨てられてしまうのでしょうか? どうすれば解決できますか?

  • ACCESSプロジェクトで追加

    AccessプロジェクトのSQL文を試しています。 次の内容を実行した時、 TEST02 のテーブルの 読込データ に AA という文字を入力しようとしています。 begin insert into TEST02 (読込データ), VALUES ('AA') end 保存しようとした時、ADOエラー:行~:","の近くに 無効な構文があります。 というメッセージが出てきます。 何がおかしいのでしょうか?

  • カラムの末尾にスペースが入る

    VBAで固定長のファイルをテーブルに取り込みCSVファイルとしてカンマ区切りで書き出すというプログラムを作っています。 1111,55___,77____,5_____,77__,555____,999__      _はスペースのことだと思って下さい。 などといった感じのファイルを取り込むのですが、スペースを削除するためにTrimで切ってテーブルに取り込んでいるのですが、取り込むと必ずいくつかの決まったカラムに半角スペース6個分のスペースが入ってしまいます。 カラムの文字制限10で入力文字が2などなら、6個分のスペースが入り、 入力文字が7ならスペースは3つ入り、入力文字が10ならスペースは入らないという現象が起きています。 Trimで切っているのですから、入力文字が何文字であろうとスペースは入らないはずなのですが、決まったカラムにだけこの現象が起きています。 デバッグで見てみたところ、データを取得しているところでは、きちんとTrimで切られている形で取得することが出来ているのですが、テーブルの中を見ると半角スペースが上の規則で入っているというのが現在の現象です。 なぜこのようなことが起きるのか・・どなたか解決策が分かる方はいらっしゃいますでしょうか。お願いします。

  • ADOでデータを送ってる最中はアクセスで検索やテー

    読み取り専用のエクセルファイルで エクセルのvbaでADOでエクセルデータをアクセスに転記してる時に アクセスでフィルタをかけてるとフリーズします。 ADOでデータを送ってる最中は アクセスで検索やテーブルへのアクセスはできないのでしょうか?

  • アクセスで設計をするにおいては

    アクセスで設計をするにおいてはADOの知識は必須でしょうか? accessvbaの知識は多少ありますがADOはよくわかりません。 それでもアクセスで個人データを管理するデータベースの作成は可能でしょうか? 入力用フォームを作り、データを入力したり 検索用フォームを作ってデータを検索したいです。 VBAやアクションクエリだけでこなせますか? アドバイスよろしくお願いします。

  • アクセスで困っています。

    アクセスでデーターベースを作成しているのですが、 エクセルからADOを使いテーブルにデータを入力し、フォームでデータ内容についての情報を見れるようになっています。 しかし、フォーム上でテーブルに連結してある情報の変更ができないのですが、どのように設定すれば、フォーム上でテーブルの情報を書き換えることができるのでしょうか? プロパティのデータ入力用は、「はい」でも「いいえ」どちらでやってもだめです。 テーブル ↓ フォーム (ここでデータを入力し、テーブル内容の変更をしたい。) よろしくお願いします。

  • アクセスのVBAでのデータの編集

    アクセスでツールを作っています。 フォームに入力されたデータをテーブルにインサートしたいのですが。 入力されたデータを変数に持たせる方法や テーブルにインサートする方法がわかりません。 勉強しながら作っているので わかりやすいように教えていただけたら幸いです。

  • accessでcommitができますか?

    accessで複数のテーブルから1つのテーブルに書き込みをしています。VBAでSQL文を作成しDoCmd.RunSQLでinsertを実行しています。データが多いと遅くなるようです。Commitとか実行できるのでしょうか?そうすれば早くなりますか?ご指導のほどお願いいたします。

  • Excel VBA からの Access 呼び出しでの挙動不審

    ADO を使って、Excel VBA から Access のテーブルを検索しようとしています。 Excel, Access 共に 2000 です。 変数の説明:  myConn は、ADODB.Connection。  mySQL は、 String。 コード: mySQL = "INSERT INTO T1 (ID) SELECT ID FROM T2 WHERE Name like '*日本*'" myConn.Execute mySQL というコードで、テーブルT1 へテーブルT2 の ID フィールドのデータを転送しようとしています。検索条件として、テーブルT2 の Name フィールドを指定しています。  T2 のデータはきちんと入っており、実際この mySQL の文字列をそのまま Access のクエリに Copy & Paste して実行すると、うまく動きます。  具体的には、SELECT 以後をクエリに Copy & Paste してデータ表示すると、Name に「日本」を含むデータが表示されました。  しかし、Excel VBA のプログラムからでは、何もヒットしない結果となります。  Access クエリでの書式と、Excel VBA からコールするときの書式とは違うのでしょうか。  よろしくお願いします。

  • ACCESSからSQLServerのデータを取得したい

    SQLServerが利用できない環境にデータを持っていくため、以下のようなシステムを考えております。(テーブルのリンクは不可・手動でのデータのエクスポートは不可) 1.ACCESSのフォームに「データベース名」「テーブル名」を入力し、実行ボタン押下 2.ADOでSQLServerに接続 3.指定のテーブルと同じ構造のテーブルをACCESSに作成 4.SQLServerのデータをACCESSにINSERT ここで質問なのですが、ACCESSは自分のデータベースとSQLServerのデータベースに同時に接続できますか? 同時接続した場合のACCESS/SQLServerの書き分けはどのようになるのでしょうか。