web-dev-qa-db-ja.com

ExcelからAccessメモフィールドにインポートするときに切り捨てられたデータ

Excelファイルを追加しているときに、Accessがいくつかのメモフィールドのデータを切り捨てています。 Accessテーブルのフィールドは、すでにメモタイプとして設定されています。問題は、いくつかのメモフィールドの最初の数行にエントリがないことだと思います。すでにメモタイプとして設定しているのに、Accessはデータがテキストフィールドであると想定しています。

CSVで追加してみました。動作しませんでした。

最初の行に255文字の制限を超えるダミーデータを配置しましたが、そうしてもデータは切り捨てられません。

Excelファイルをインポートするたびにダミーデータを入力する必要はありません。これは、少なくとも隔週で、おそらくもっと頻繁に完了するプロセスです。同じデータベースで作業する将来の従業員のためにデータをインポートする簡単な方法を設定したいと思います。何か案は?

更新:最初の数行にダミーデータがある場合でも、ExcelファイルをインポートするとAccessは10個のメモフィールドのうち3個のデータを切り捨てています(ダミーデータの文字長は785です)。今、私は本当にアイデアに戸惑っています。

8
RBSt

久しぶりですが、あなたと同じ問題を抱えていました。

多くの掘り下げた後、私は マイクロソフトの素晴らしい世界が説明している :を見つけました。

インポート中のエラーを回避するには、各ソース列のすべての行に同じタイプのデータが含まれていることを確認してください。 Accessは、最初の8つのソース行をスキャンして、テーブル内のフィールドのデータ型を判別します。最初の8つのソース行が、どの列でも異なるデータ型の値を混在させないようにすることを強くお勧めします。そうしないと、Accessが正しいデータ型を列に割り当てない可能性があります。

どうやら、これは、列がフォーマットされてメモフィールドとして保存されている場合でも、Excelファイルを既存のテーブルに追加すると、最初の8つすべてがExcelファイルの行は256文字未満であるため、Accessは、テキストを指定することを意図して実際に、255文字以降の残りの行を切り捨てると想定します。上位8行に「ダミー」行を配置するいくつかのテストを実行し、それぞれが255文字を超えるインポートをトリガーしました。

これで、新しいテーブルにインポートすると、ウィザードですべてのフォーマットオプションを選択できるようになります。

新しいテーブルへのインポートは、テーブルにすでにあるすべてのデータを上書きしても問題がない場合に便利です。ただし、本当に追加する必要がある場合は、一時テーブルにインポートして、そこから追加することをお勧めします。これを行う簡単な方法は、インポートを保存してから、 Elliot_et_alがやりたかった のようにVBAから実行することです。次に、VBAで追加クエリを実行することもできます。テーブルを正しく設定すれば、うまくいくかもしれません

INSERT INTO [MyTable]
SELECT [MyTable_temp].*
FROM [MyTable_temp];
10
ptpaterson

価値があるのは... Access2013でも同様の問題が発生しました。インポートWizardがフィールドとしてLONGTEXTを選択した場合でも、XLSからのインポート時にフィールドが255文字に切り捨てられていました。 、および最初の数行に255文字を超えるフィールドがある場合でも。

同僚が、新しいテーブルにインポートする代わりにスプレッドシートをリンクすることを提案しましたが、問題は解決しました。また、リンクされたテーブルに基づいて新しいテーブルを作成しましたが、すべて問題ありません。

追加するために編集:Access 2013で、XLSファイルを既にAccessにインポートしていて、最初にリンクを試みることができない場合は、代わりにこれを試してください。

テーブルのデザインビューに移動し、その画面の下部にある[フィールドのプロパティ]に移動して、長いテキストの[テキスト形式]を[リッチテキスト]に設定します。ちょうど今日、これにより、数か月前にExcelからインポートしたテーブルを再作成する必要がなくなり、[メモ]列​​が[長いテキスト]に設定されていても、手動でテキストを切り捨てていることがわかりました。関係なく255文字まで入力します。リッチテキストに切り替えると、このテキストが表示されます。

3
jkp1187

MS Access 2013でも同じ問題が発生しました。255文字を超える列テキストの1つを含むExcelシートをインポートすると、切り捨てられていました。私は多くの調査を行い、最終的に回避策を見つけることができました。実際、MS Accessデータベースは、最初のレコード列のテキストの長さに基づいてテキストのサイズを決定し、後続のレコードの長さを固定する方法があります。長さが255未満の場合、Accessは、それ以降のレコード長を255サイズ、または最初のレコード列の長さに自動的に制限します。最初のレコードがすべてのレコードのテキスト列の最大長(ソート済み)であることを確認してからインポートしたところ、うまく機能しました。

1
Venkat Nellore

私はExcelを使用して外部パートナーと通信し、外部パートナーからアクセスデータベースにレポートをキャプチャします。これを行う最良の方法は、ユーザーが入力したデータが255文字を超える可能性が高い任意の列に255文字を超える「ダミー」の最初の行をワークシートに挿入することです。

このように、データをインポートすると、常にすべてのテキストがインポートされ、データベーステーブルから「ダミー」行を削除するだけで済みます。

アクセスデータベースからリンクする「インポートテンプレート」ワークブックを頻繁に使用します。リンクする前にテンプレートページをテーブルとしてフォーマットするように設定し(インポートに毎回範囲を指定せずにすべてのデータが含まれるように)、最初の「ダミー」行をそこに非表示にします。

このようにして、データをコピーしてインポートテンプレートに貼り付け、データベースクエリを実行してデータをデータベースにインポート(および必要に応じて変換)し、2番目のクエリで「ダミー」レコードを削除できます。

お役に立てれば..?

1
Ian Claridge

私は過去に、上記で提供されたリッチテキストソリューションと、インポートされた最初のレコードとして「ダミー行」を使用して運が良かったことがあります。よろしくお願いします!しかし、今日、私はあなたが何度も繰り返すであろう輸入のためのより効率的で一貫した解決策に出くわしたと思います。 Access2007でこれを試しました。

データを新しいテーブルにインポートする場合と同じように、インポートウィザードを使用します。仕様を設定するすべての画面を通過します。最も重要なのは、面倒な[フィールドオプション]/[データ型]領域で各フィールドのデータ型を確認または指定することです(最近のテキストファイルの場合、これはテキストのインポートウィザードの3番目の画面でした)。必ずここでメモフィールドを指定してください。 (心配しないでください、これは一度だけ行う必要があります!)

最後の「ウィザードに必要な情報はこれですべてです...」画面が表示されたら、左下の「詳細...」ボタンを探します。これにより、今行ったすべてのことを要約した画面が表示されます。右側の「名前を付けて保存...」を探します。これらの仕様をわかりやすい名前で保存してください。 (すぐ下の[仕様...]をクリックすると、仕様を保存したことを確認できます。)[OK]をクリックして、詳細画面を終了します。

実際に新しいテーブルを作成する必要がない場合は、ウィザードをキャンセルできるようになりました。次に、これは切り捨てを回避するためにこれから毎回実行できることです。「レコードのコピーをテーブルに追加...」を指定して通常のインポートウィザードに移動します。ウィザードでは、同じことが表示されます。 「詳細...」ボタン。それを開き、「仕様...」をクリックして、保存した仕様をダブルクリックします。 「OK」と言って「詳細」を終了し、ウィザードを完了します。これにより、メモフィールドをメモフィールドとして保持するようにAccessに指示する必要があります。

CSVを既存のテーブルにインポートする場合、[詳細]画面に進む前に、通常のウィザード画面をいくつか実行する必要があることがわかりました(たとえば、テキスト修飾子を指定します)。なぜこれが幸せになるのかわからない、ただ参考までに。

これが、私のようなフィールド切り捨てのインポートエラーに苦しんでいる他の誰かに役立つことを願っています!

0
becks

Access 2010でもまったく同じ問題が発生しました。Accessが最初の25レコードを調べて、インポート時に各列のデータの種類を判別したことを確認した後、2つの異なる回避策を見つけました。

  1. インポートレコードを列の長さの降順で並べ替えました。これは、一部の列に255文字を超えるレコードが、最初の25レコードに含まれることを意味します。その後、Accessは、切り捨てることなくこれらのレコードをインポートできました。
  2. 列のデータ型をメモとして指定するリンクテーブルを作成し、テーブルに追加しました。
0
Young

ExcelとAccessは風変わりです。どうやら、ロングテキストと同じプロパティを持つ既存のAccessテーブルの最後にExcelまたはCSVを追加することは問題です。データを追加すると、デフォルトですべての長いテキストが短いテキストになります。回避策は、データをExcelに出力し、データを1つのテーブルに追加してから、Accessの新しいテーブルとしてインポートすることでした。 Accessには、データの追加を、何をするかに関係なく、長いテキストではなく短いテキストとして扱うことに問題があります。

インポートウィザードを使用して列のプロパティをロングテキストに変更する場合は、必ず確認してください。

これがお役に立てば幸いです。

0
Karim Alazzawi

多くの場合、メモフィールドのテキスト形式を通常のテキストからRTFに変更するだけです。テーブルデータを開くと、インポートされたすべてのテキストを表示できるようになりました。

0
ettore ct