CSVからAccessにインポートするときにフィールドの順序が間違っている

ColeValleyGirl

アプリケーションにインポート機能を提供して、ユーザーが基本的な開始データをアプリケーションに入力できるようにします。インポートするデータをどのように作成するか、または実際に私が提供するインポート仕様に準拠しているかどうかを制御することはできません(これまでのベータテストの経験で十分に実証されています)。また、予想よりもはるかに大きいデータセット(これまでの最大は750,000レコード)をインポートしていることもわかったため、インポートを適切に実行する必要があります。

インポートするデータセットは4列から24列まで、5つまたは6つあります。私は、最も単純なデータセットから始めて、それらすべてに使用できる方法を考え出そうとしています。

この最も単純なインポートファイルは、ヘッダーのない4列のcsvファイルであり、次のようなフィールドを持つ一時的なAccessテーブルになります。

GenID: text (up to 255 chars) 

Surname: text (up to 255 chars)

GivenNames: text (up to 255 chars)

OtherInfo: multi-line memo (as long as they want)

データは一時テーブルにインポートする必要があります。ここで検証が実行されてから、最終的なホームの既存のデータに追加されます。

私は最初に、保存されたインポート仕様でdocmd.transfertextを使用しようとしましたが、これは機能しますが、最小のインポートファイル以外では非常に遅くなります。(徹底的にテストしていないため、以下の2番目の方法で説明するのと同じ欠陥のいくつかが表示されないことを誓うことはできません)。

私が試した次の方法は、https://stackoverflow.com/a/11147920/1943174のアプローチに基づいていますが、Xmlを使用してインポートを実行するときに期待する正確な動作に関するドキュメントを見つけるのに苦労しました仕様をインポートするか、XML構文で使用する必要があります。

VBAでインポート仕様を作成して実行します。strFilePathは、インポートされるcsvファイルを識別し、strTableNameは、インポートに使用される一時テーブルを識別します。

Dim strXML As String

strXML = ""
strXML = strXML & "<?xml version=""1.0"" encoding=""utf-8"" ?>" & vbCrLf
strXML = strXML & "<ImportExportSpecification Path=" & Chr(34) & strFilePath & Chr(34) & " xmlns=""urn:www.microsoft.com/office/access/imexspec"">" & vbCrLf
strXML = strXML & "   <ImportText TextFormat=""Delimited"" FirstRowHasNames=""false"" FieldDelimiter="","" CodePage=""437"" Destination=" & Chr(34) & strTableName & Chr(34) & " >" & vbCrLf
strXML = strXML & "      <DateFormat DateOrder=""DMY"" DateDelimiter=""/"" TimeDelimiter="":"" FourYearDates=""true"" DatesLeadingZeros=""false"" />" & vbCrLf
strXML = strXML & "      <NumberFormat DecimalSymbol=""."" />" & vbCrLf
strXML = strXML & "           <Columns PrimaryKey=""{none}"">" & vbCrLf
strXML = strXML & "                    <Column Name=""Col1"" FieldName=""GenID"" Indexed=""NO"" SkipColumn=""false"" DataType=""Text"" />" & vbCrLf
strXML = strXML & "                    <Column Name=""Col2"" FieldName=""Surname"" Indexed=""NO"" SkipColumn=""false"" DataType=""Text"" />" & vbCrLf
strXML = strXML & "                    <Column Name=""Col3"" FieldName=""GivenNames"" Indexed=""NO"" SkipColumn=""false"" DataType=""Text"" />" & vbCrLf
strXML = strXML & "                    <Column Name=""Col4"" FieldName=""OtherInfo"" Indexed=""NO"" SkipColumn=""false"" DataType=""Memo"" />" & vbCrLf
strXML = strXML & "         </Columns>" & vbCrLf
strXML = strXML & "     </ImportText>" & vbCrLf
strXML = strXML & "</ImportExportSpecification>"

CurrentProject.ImportExportSpecifications.Add "MyImportSpec", strXML 'Add it to the project
DoCmd.RunSavedImportExport "MyImportSpec"'Run it

インポートは非​​常に高速で、使用しているテスト入力データは正しく形成されていますが、結果は正しい構造のAccessテーブルになりますが、データは間違ったフィールドにインポートされます。

GenID -- in the right place

GivenNames  -- in the Other Info (memo) field

OtherInfo -- in the Surname (text) field

Surname -- in the Given Names (field).

インポートファイルの列の順序をアルファベット順に変更すると(GenID、GivenNames、OtherInfo、Surname)、インポートは正しく機能しますが、その順序はユーザーにとって意味がないか、簡単ではありません。生成されるため、インポートファイルに誤って入力される可能性があります。(さらに、これから説明する欠陥のために失敗します)。

一時テーブルに作成されたフィールドの名前をXA、XB、XC、XDに変更すると(インポート後にフィールド名を変更する予定です。データが検証され、最終的なホームとなるテーブルが追加されたら)右のデータは「右」フィールドに入力されますが、インポートファイルに正確に4つの列がある場合に限ります。5番目が存在する場合、次のフィールドが表示されます。

Field5 -- contains GenID data

XA -- contains Surname

XB -- contains GivenNames

XC -- contains OtherInfo

XD -- contains the data that was in the 5th column in the import file

インポートで新しいテーブルを作成するのではなく、インポートしたデータを正しい構造で既存の(空の)テーブルに追加した場合にも、同じ問題が発生します。

これをどのように機能させることができるか、またはユーザーが最後に無関係な列を含まないことを保証できない大規模なインポートcsvデータセットのテキストおよび複数行のメモフィールドの迅速なインポートを処理する他のアプローチについての提案はありますか?インポートcsvを編集する機能がありません。すべてのデータ変更はAccess内で行われる必要があり、csvファイルは変更されずにプロセスを通過する必要があります。

このアップデートは、Blindingly Obviousの部門によって提供されました:

インポートしたフィールドに「Field1」、「Field2」などの名前を付けると、追加のフィールドはそれらの後に順番に挿入する必要があるため、追加のフィールドは問題になりません。私はまだ正しいフィールド名にインポートしたいと思います。

ハンサップ

クエリを使用してCSVデータをインポートすることを検討してください。このクエリは、CSVファイルから最初の4列を選択します。

SELECT csv.F1, csv.F2, csv.F3, csv.F4
FROM [Text;FMT=Delimited;HDR=NO;IMEX=2;CharacterSet=437;DATABASE=C:\Users\hans\Documents].[no_field_names.csv] As csv;

そのCSVファイルにはフィールド名が含まれていないため、AccessはそれらをF1からF4として割り当てます。実際、CSVには4つ以上の列が含まれていますが、最初の4つだけが必要でした(これはあなたの状況に対応していると思います)。

クエリデザイナで同様のクエリを作成してテストする場合は、FROM句が次のように変更される可能性があることに注意してください...

FROM (Text;FMT=Delimited;HDR=NO;IMEX=2;CharacterSet=437;DATABASE=C:\Users\hans\Documents) no_field_names.csv As csv;

...そしてそれはうまくいきません。そのため、Accessが役に立たない変更を加えるたびに、もう一度確認して修正する必要があります。

SELECT必要なものを返すクエリを取得したら、それをINSERTクエリに変換できます。

INSERT INTO YourTable (GenID, Surname, GivenNames, OtherInfo)
SELECT csv.F1, csv.F2, csv.F3, csv.F4
FROM [Text;FMT=Delimited;HDR=NO;IMEX=2;CharacterSet=437;DATABASE=C:\Users\hans\Documents].[no_field_names.csv] As csv;

ただし、データソースのメモフィールドがどうなるかはわかりません。クエリが正しく機能するのを妨げない場合は、少なくともこのアプローチでは、正しいフィールドを抽出して、正しい宛先フィールドに保存できるはずです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

tfrecordsからデータをインポートするときに、バッチ処理後にラベルの順序が間違っている

分類Dev

csvをmysqlにインポートしているときに日付フィールドの値が間違っている

分類Dev

csvファイルをインポートするときの列数が間違っています

分類Dev

出力をファイルにパイプするとき、なぜstderrとstdoutの順序が間違っているのですか?

分類Dev

Sqlの小さなレポートで、csvファイルにエクスポートするときに列が間違った順序で表示されます

分類Dev

いずれかのフィールド内に改行があるURLからCSVをインポートする

分類Dev

パンダ:csvファイルからデータをインポートする際の列名が間違っています

分類Dev

ページのタイトルとコンテンツの順序が間違っている (wordpress/bootstrap/php)

分類Dev

バイナリコードの順序が間違っています-正しくシフトする方法は?

分類Dev

フォーマットファイルの列の順序がテーブルの列の順序と異なっていても、bcp.exeを使用してデータを正常にインポートする

分類Dev

フォーマットファイルの列の順序がテーブルの列の順序と異なっていても、bcp.exeを使用してデータを正常にインポートする

分類Dev

ユーザーをFirebaseにインポートするときのパスワードが間違っています(SHA256を使用したpassword_hash)

分類Dev

RFC 4180に従ってCSVファイルを検証するには、「レコードの最後のフィールドの後にコンマを続けてはならない」というルールがあります。違う?

分類Dev

NodeJSイベントループの順序が間違っています

分類Dev

フィールドリストでの並べ替えの順序が間違っています

分類Dev

NSDateをNSDateコンポーネントに変換するときにNSDateComponentsの値が間違っていた

分類Dev

C コードをベア メタル (raspberry pi) にコンパイルするときに何が間違っているのでしょうか。

分類Dev

デフォルトのシェルが間違っているときにsshでログインする方法

分類Dev

LinuxをPCにインストールしようとして燃え尽きてしまった.....私は何が間違っているのですか?

分類Dev

ソートされたファイルをMacOS Xで印刷する(順序が間違っている)

分類Dev

テール コマンド - fseek() と getline() を使用 - 出力の順序が間違っている

分類Dev

大きなcsvファイルをコードとマウスでSASにインポートすることの違いは何ですか?

分類Dev

コードをトレースしているときにたどるルートが間違っているのはなぜですか?

分類Dev

Pythonインポートモジュール、正確に何が間違っているかを調べます

分類Dev

RTSPストリームをファイルに保存するときのフレームレートとメタデータが間違っています

分類Dev

スプレッドシートをAccessにインポートするときに、Excelがデータフィールドタイプを自動割り当てしないようにするにはどうすればよいですか?

分類Dev

Set <E>をString []にカバーすると、要素の順序が間違ってしまいます

分類Dev

ユーザーがdjangoboto3を使用してAWSからファイルをダウンロードできるようにすることで何が間違っていますか?

分類Dev

Pythonが間違った順序でファイルに上書きする

Related 関連記事

  1. 1

    tfrecordsからデータをインポートするときに、バッチ処理後にラベルの順序が間違っている

  2. 2

    csvをmysqlにインポートしているときに日付フィールドの値が間違っている

  3. 3

    csvファイルをインポートするときの列数が間違っています

  4. 4

    出力をファイルにパイプするとき、なぜstderrとstdoutの順序が間違っているのですか?

  5. 5

    Sqlの小さなレポートで、csvファイルにエクスポートするときに列が間違った順序で表示されます

  6. 6

    いずれかのフィールド内に改行があるURLからCSVをインポートする

  7. 7

    パンダ:csvファイルからデータをインポートする際の列名が間違っています

  8. 8

    ページのタイトルとコンテンツの順序が間違っている (wordpress/bootstrap/php)

  9. 9

    バイナリコードの順序が間違っています-正しくシフトする方法は?

  10. 10

    フォーマットファイルの列の順序がテーブルの列の順序と異なっていても、bcp.exeを使用してデータを正常にインポートする

  11. 11

    フォーマットファイルの列の順序がテーブルの列の順序と異なっていても、bcp.exeを使用してデータを正常にインポートする

  12. 12

    ユーザーをFirebaseにインポートするときのパスワードが間違っています(SHA256を使用したpassword_hash)

  13. 13

    RFC 4180に従ってCSVファイルを検証するには、「レコードの最後のフィールドの後にコンマを続けてはならない」というルールがあります。違う?

  14. 14

    NodeJSイベントループの順序が間違っています

  15. 15

    フィールドリストでの並べ替えの順序が間違っています

  16. 16

    NSDateをNSDateコンポーネントに変換するときにNSDateComponentsの値が間違っていた

  17. 17

    C コードをベア メタル (raspberry pi) にコンパイルするときに何が間違っているのでしょうか。

  18. 18

    デフォルトのシェルが間違っているときにsshでログインする方法

  19. 19

    LinuxをPCにインストールしようとして燃え尽きてしまった.....私は何が間違っているのですか?

  20. 20

    ソートされたファイルをMacOS Xで印刷する(順序が間違っている)

  21. 21

    テール コマンド - fseek() と getline() を使用 - 出力の順序が間違っている

  22. 22

    大きなcsvファイルをコードとマウスでSASにインポートすることの違いは何ですか?

  23. 23

    コードをトレースしているときにたどるルートが間違っているのはなぜですか?

  24. 24

    Pythonインポートモジュール、正確に何が間違っているかを調べます

  25. 25

    RTSPストリームをファイルに保存するときのフレームレートとメタデータが間違っています

  26. 26

    スプレッドシートをAccessにインポートするときに、Excelがデータフィールドタイプを自動割り当てしないようにするにはどうすればよいですか?

  27. 27

    Set <E>をString []にカバーすると、要素の順序が間違ってしまいます

  28. 28

    ユーザーがdjangoboto3を使用してAWSからファイルをダウンロードできるようにすることで何が間違っていますか?

  29. 29

    Pythonが間違った順序でファイルに上書きする

ホットタグ

アーカイブ