1

CSV ファイルから Access テーブルにデータをインポートしています。数値は
-21000000 (-2.1E7) のようなものです。インポートには TransferText を使用しています。

DoCmd.TransferText acImportDelim, , "matching report temp", Source_folder & "\" & Source

「照合レポート一時」テーブルでは、フィールドは Double として設定されます。インポートは型変換エラーを生成します。ただし、Excel で CSV ファイルを開いて問題のある行をコピーすると、[追加の貼り付け] を使用してテーブルに手動で追加できます。そのため、数値がフィールドの容量を超えません。

私が知る限り、これは大きな負の数でのみ発生します。小さい数値と同じ大きさの正の数値は問題なくインポートされるようです。TransferText でインポート仕様を指定できることはわかっていますが、フィールド タイプを Double に設定する方法がわかりません。

どうすればこの問題を回避できますか? インポートエラーを手動で追跡して手動で追加する必要はありません。

4

1 に答える 1

2

TransferTextAccess テーブルを作成させないでください。最初にアクセス先テーブルを作成し、必要なフィールド タイプを割り当てます。

を実行するTransferTextと、CSV データがその既存のテーブルに追加されます。Access フィールドに互換性のあるデータ型を選択している限り、エラーなく動作するはずです。

あなたの CSV ファイルを調べました。一部のフィールド名が欠落しているため、ヘッダー行は面倒です。

Reporting Unit,,$ Dollars,Offset Unit,,$ Dollars,Variance

それは にとって厄介なことのようでしDoCmd.TransferTextた。そのため、Access UI から手動でインポートしました。そして、3列目と6列目の49行目にインポートエラーが発生しました。Access では、送信先フィールドは両方とも Long Integer として作成されました。ただし、CSV 行のこれらのフィールドの値は 2262169190 と -2262169190 です ... どちらも Access の Long Integer の容量である -2,147,483,648 から 2,147,483,647 を超えています。

安価な回避策として、インポート時にこれら 2 つの列のデータ型にテキストを選択しました。これにより、インポートがエラーなしで機能するようになりました。データを Access に正常に取得したら、それらの (文字列) 値を使用する必要があるときに、それらの (文字列) 値を数値型にキャストできます。

これらの 2 つの列のタイプとして Double を選択した場合にも機能しました。それがあなたが実際に望んでいることのように聞こえます。

でインポートを機能させたい場合はDoCmd.TransferText、インポート仕様を作成する必要があると思います。可能であれば、最初に CSV ファイルのヘッダー行も変更して、すべてのフィールドに名前を付けます。

私は実際に、CSV ファイルを変更せずにそのアプローチをテストしました。Access UI でインポート仕様を作成した後 (以下のスクリーン キャプチャを参照)、このTransferText操作は Access 2007 でインポート エラーなしで機能しました。

DoCmd.TransferText acImportDelim, _
    "IC_Y1301_Specification", _
    "IC_Y1301_LD10279_F25210001", _
    "C:\Users\hans\Downloads\IC_Y1301_LD10279_F25210001.CSV", _
    True

TransferText インポート仕様

于 2013-08-07T16:06:37.247 に答える