こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access2010でVBAでのインポート

csvファイルを指定したテーブルにインポートさせるのですが、この最初のフィールドに主キーを付与させようとしています。手動でインポートする際はメニューで指定するので主キーが付与されるのですが、VBAではcsvファイルそのままの状態でしかインポートされません。
このテーブルは、毎月更新させるので、一度データを削除してインポートさせます。
Mypath & Fdnは階層指定です。
いろいろネットで調べて下記の構文でインポートはできるのですが

DoCmd.TransferText acImportDelim, "222 更新データ インポート定義", "更新データ【更新根拠】(当月)", Mypath & Fdn & "\222 更新データ【請求根拠】.csv", True, ""

手動でインポートする時指定する”主キーを自動的に設定する”はどのようにすれば適用されるのかがわかりません。
どなたか教えてください。よろしくお願いいたします。

投稿日時 - 2014-11-06 15:05:50

QNo.8815850

すぐに回答ほしいです

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

質問返し?になってしまいますが
>後から別途オートナンバーを付与する方法を見つけたのですが、レコード数が17万ほどなのでエラーが出て、レジストリを触らないといけないと解説にあったため

の解説リンク先?または、具体的な方法を教えてもらえますか?
出来ればエラー内容も?
回答の際はなるべく検証してから行うようにしていますが
せっかく回答しても「それでダメだったんです。」だと辛いので。。。
当方の後学の意味でも是非。

再インポートの際にはオートナンバーは1から振り直しということで

下準備
取りあえずウィザードでインポートを完了させます。
(これは出来ているようですね)
出来たテーブルを開いて、Ctrl + A で全レコードを選択し、Delete します。
デザインビューに切り替えて、主キーフィールドを削除し一旦保存。
再度デザインビューで開いて、手作業で主キーフィールド(オートナンバー型)を設定します。
(ウィザードで作られた主キー(オートナンバー型)だと下記コードでエラーになります)
(フィールドのデータ型が正しくありません←バグっぽい?)

あとは、下記コードを実行する都度オートナンバーは1から始まるハズです。
Sub test1()
'要参照設定 Microsoft ActiveX Data Objects 6.x Library か Microsoft ActiveX Data Objects 2.x Library どちらかに
With CurrentProject.Connection
.Execute "DELETE * FROM [テーブル名];", dbFailOnError
.Execute "Alter Table [テーブル名] Alter Column [主キーのフィールド名] Identity( 1, 1 );", dbFailOnError
End With

DoCmd.TransferText acImportDelim, "インポート定義名", "テーブル名", "CSVファイルのフルパス", True

End Sub

※参照設定は多分、Objects 6.x Library は 6.1になっていると思います。
VBEのメニュー → ツール → 参照設定 からプルダウンしチェックを入れてください。

投稿日時 - 2014-11-07 12:19:47

補足

NotFound404さま

お礼に書き込めませんでしたので、すみません、補足欄に・・。

ありがとうございました!うまくできました☆
わかりやすく教えていただきありがとうございました。

投稿日時 - 2014-11-07 13:49:20

お礼

NotFound404さま

ご教示ありがとうございます。
早速やってみます。
結果前にお礼を記載していますが、お尋ねの内容を早くご連絡しようと思い記載いたしました。

エラー:
実行時エラー’3052’:
ファイルの共有ロック数が制限を超えています(Error 3052)。レジストリエントリ
MaxLocksPerFile の値を増やしてください。

このエラー関連の質問↓
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11126950316
ベストアンサーで紹介されていたサポートです↓
http://support.microsoft.com/kb/815281/ja

投稿日時 - 2014-11-07 13:13:23

このQ&Aは役に立ちましたか?

14人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

データだけ削除してインポートすれば
Currentdb.Execute "DELETE * FROM [更新データ【更新根拠】(当月)]",dbFailOnerror
DoCmd.TransferText acImportDelim, "222 更新データ インポート定義", "更新データ【更新根拠】(当月)", Mypath & Fdn & "\222 更新データ【請求根拠】.csv", True, ""
主キーなどなどの設定は変化しないハズです。
テーブル名やフィールド名などにたとえ全角文字であっても丸かっこを使用するのは
止めといた方が・・・。
http://support.microsoft.com/kb/826763/ja

投稿日時 - 2014-11-06 20:18:54

補足

NotFound404さま

ありがとうございます。
インポート対象のcsvファイルには元々ナンバーがふられていないため、インポートする際に"主キーを自動的に設定する"機能で番号を付与したいのです。
VBA構文で指定方法は有りますでしょうか。

別途、後から別途オートナンバーを付与する方法を見つけたのですが、レコード数が17万ほどなのでエラーが出て、レジストリを触らないといけないと解説にあったため"主キーを自動的に設定する"機能で番号を付与しようとしています。
それからテーブル名等の記載方法についてURLありがとうございます。大変参考になりました。
まだまだ初心者なので大変助かります。

投稿日時 - 2014-11-07 09:56:21

あなたにオススメの質問