Page 69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼インポートエラー mini 02/10/15(火) 16:41 ┗Re:インポートエラー yu-ji 02/10/16(水) 10:03 ┗Re:インポートエラー mini 02/10/16(水) 10:32 ┗Re:インポートエラー yu-ji 02/10/16(水) 11:02 ┣Re:インポートエラー yu-ji 02/10/16(水) 11:21 ┗いろいろ調べてみたんです・・・。 mini 02/10/18(金) 14:54 ┗Re:いろいろ調べてみたんです・・・。 yu-ji 02/10/18(金) 16:19 ┗大変お世話になりました。 mini 02/10/21(月) 10:29 ┗参考までに。 yu-ji 02/10/21(月) 11:26 ─────────────────────────────────────── ■題名 : インポートエラー ■名前 : mini <miffy-m@bea.hi-ho.ne.jp> ■日付 : 02/10/15(火) 16:41 -------------------------------------------------------------------------
こんにちは。すいませんが、みなさんのお知恵を 貸して下さい。 エクセル2000のファイルをアクセス2000に インポートしたいんですが、1台のパソコンでは問題 なくインポート出来るんですが、もう1台のパソコン ではインポートエラーテーブルが作成されて一部の フィールドの値がインポートできません。どうして同じ エクセルファイルを同じデータベースでインポートしよう とするのに2台ともうまくいかないのかが分かりません。 エクセルデータの内容 日付|品番|注文番号|数量 21010|3005 |10000 |360 21010|3006 |20000 |200 21010|3007 |30000 |400 21010|140-1 |P-1A-50|130 21010|300必要|在庫分 | 30 インポートエラーの内容 エラー |フィールド|行 データ型の変換エラー|品番 |4 データ型の変換エラー|注文番号 |4 データ型の変換エラー|品番 |5 データ型の変換エラー|注文番号 |5 アクセスのフィールド名・データ型 日 付 | 品 番 |注文番号 |数量 テキスト型|テキスト型|テキスト型|数値型 この変換エラーを発生させないためにはどうしたら いいでしょうか?&インポートした時に日付が5桁 ならゼロを頭に自動的につけるなんて方法ありますか? 021010としたいんですが、エクセルの日付データが 21010のため、何とかならないかなと・・・。 すいません、説明不足かもしれませんが、ヒントでも 結構です。ご教授ください。 |
▼mini さん: >エクセルデータの内容 > >日付|品番|注文番号|数量 >21010|3005 |10000 |360 >21010|3006 |20000 |200 >21010|3007 |30000 |400 >21010|140-1 |P-1A-50|130 >21010|300必要|在庫分 | 30 > >インポートエラーの内容 > >エラー |フィールド|行 >データ型の変換エラー|品番 |4 >データ型の変換エラー|注文番号 |4 >データ型の変換エラー|品番 |5 >データ型の変換エラー|注文番号 |5 > >アクセスのフィールド名・データ型 > > 日 付 | 品 番 |注文番号 |数量 >テキスト型|テキスト型|テキスト型|数値型 これは、手動でのインポートの話ですか? VBAを使ったインポートの話ですか? 2台が同じ結果にならないのは不明ですが、同じExcelデータで同じAccessファイル を使ってます? とりあえず、エラーとデータから想像できるのは、インポートするAccessのテーブル の、品番と注文番号の型が、テキスト型とかかれてますが、数値型になって ないですか? 以下、手動でのインポートをしてるとして。 ウィザードを使ってインポートをしいるなら、品番と注文番号が最初のデータを見て、 最初にウィザードは勝手に数値型だと判断すると思うのですが、意図的にテキスト型 を指定しないと、このようなエラーが出ると思います。 まず、Accessのインポートするテーブルのデータ型をもう一度確認してみてください。 >この変換エラーを発生させないためにはどうしたら >いいでしょうか?&インポートした時に日付が5桁 >ならゼロを頭に自動的につけるなんて方法ありますか? > >021010としたいんですが、エクセルの日付データが >21010のため、何とかならないかなと・・・。 > >すいません、説明不足かもしれませんが、ヒントでも >結構です。ご教授ください。 インポート時にテーブルに入れるデータを上記のように変更する方法は ないと思います。 なので、インポート前のエクセルの日付の表示形式で、6桁になるようにしておくか、 取り込み時は5桁で取り込んで、インポート後にVBAなり更新クエリなりでデータを 変更するということになると思います。 |
yu-ji さんへ 解説ありがとうございます。 説明が不足していまして、申し訳ないです。 >これは、手動でのインポートの話ですか? >VBAを使ったインポートの話ですか? インポートの方法はVBAを使っています。 こんな感じです。↓ DoCmd.TransferSpreadsheet acImport, acSpreadsheet- TypeExcel9, Me!txtテーブル, Me!txtファイル, True フォームにインポート先のテーブル名(Me!txtテーブル)と インポートするエクセルファイル名(Me!txtファイル)を 入力し、インポートボタンをクリックするとインポートが 始まると言った感じです。 >2台が同じ結果にならないのは不明ですが、同じExcelデータで同じAccessファイル >を使ってます? はい、同じエクセルデータを同じアクセスファイルでインポート しています。 >とりあえず、エラーとデータから想像できるのは、インポートするAccessのテーブル >の、品番と注文番号の型が、テキスト型とかかれてますが、数値型になって >ないですか? 品番と注文番号のデータ型は確認しましたが、テキスト型です。 でも、エクセルのデータを確認したら、数字しかないセルも 文字が含まれているセルも数値型となっていました。これが問題 ですか? >ウィザードを使ってインポートをしいるなら、品番と注文番号が最初のデータを見て、 >最初にウィザードは勝手に数値型だと判断すると思うのですが、意図的にテキスト型 >を指定しないと、このようなエラーが出ると思います。 エクセルのファイルをいじらないとすると、上記の方法で意図的に テキスト型とする方法になりますか?それはウィザードを使用しなく てもそうですか? >インポート時にテーブルに入れるデータを上記のように変更する方法は >ないと思います。 >なので、インポート前のエクセルの日付の表示形式で、6桁になるようにしておくか、 >取り込み時は5桁で取り込んで、インポート後にVBAなり更新クエリなりでデータを >変更するということになると思います。 アドバイスありがとうございました。参考にして6桁になるよう、考えて みます。 |
▼mini さん: >>これは、手動でのインポートの話ですか? >>VBAを使ったインポートの話ですか? > >インポートの方法はVBAを使っています。 >こんな感じです。↓ >DoCmd.TransferSpreadsheet acImport, acSpreadsheet- >TypeExcel9, Me!txtテーブル, Me!txtファイル, True では、うまくいかないPCで、手動インポートした場合はどうでしょうか? あと、2台のPCのAccessはバージョン・パッチは共通ですか? >品番と注文番号のデータ型は確認しましたが、テキスト型です。 >でも、エクセルのデータを確認したら、数字しかないセルも >文字が含まれているセルも数値型となっていました。これが問題 >ですか? 可能性がないかどうかは分からないので、問題ないなら、試しに文字列にして テストされてはどうですか? >>ウィザードを使ってインポートをしいるなら、品番と注文番号が最初のデータを見て、 >>最初にウィザードは勝手に数値型だと判断すると思うのですが、意図的にテキスト型 >>を指定しないと、このようなエラーが出ると思います。 すみません、これは間違いです(^^; そういう可能性もあるってだけで、必ずそうなるわけじゃないです。 |
もう一点。 使われているAccessのバージョンが記載されていらっしゃらないですが、 以下のページが参考になるかもしれません。 #レジストリ キーの "TypeGuessRows" 値が二つのPCで違う? http://support.microsoft.com/default.aspx?scid=kb;ja;JP109376 これは、97用の資料なので、2000や2002だとどうなるか分かりませんが、 (2000では)同じレジストリキーが存在しているので、規定値(2000では25?) を越えれば同様のエラーになりそうですね。 |
yu-ji さんへ お返事遅くなってすいません。 教えて頂いたサイトを見て私の勉強不足なんですが、 何を書いてるのかさっぱり分からなかったので、今日まで 調べてみたんですが、よく分かりません・・・。 このサイトで記載の、 「以下のレジストリ キーの "TypeGuessRows" 値を変更します。」 って、どこの事ですか?どうやったら値を変更できますか? >では、うまくいかないPCで、手動インポートした場合はどうでしょうか? >あと、2台のPCのAccessはバージョン・パッチは共通ですか? 手動でも試してみましたが、同じでした。アクセスのバージョンは どちらも2000です。 >可能性がないかどうかは分からないので、問題ないなら、試しに文字列にして >テストされてはどうですか? 文字列に変更したら、インポートが問題なく出来ました。 何度もいろいろ聞いてすいません・・・。m(__)m |
▼mini さん: >このサイトで記載の、 >「以下のレジストリ キーの "TypeGuessRows" 値を変更します。」 >って、どこの事ですか?どうやったら値を変更できますか? レジストリについての知識がなければ、下手に行わないほうがいいとは思う ので、周りに詳しい方はいらっしゃらないですか? #下手にレジストリを修正したり削除したりすると、PC自体が動かなくなったり #するんで。下手しなきゃ問題はないんですが。 もし自分ひとりで行わなければいけないということであれば、念のために、 最初にレジストリファイルの書き出しを行って、バックアップを取っておいた方が いいです。 で、以下、確認する為の説明。 ****** 1.[スタートメニュー]-[ファイル名を指定して実行]を選択 2.regedit と入力して、OKボタンを押す 3.レジストリエディタが開かれるので、まずレジストリの書き出しを行う 4.レジストリエディタの左メニューにある以下の中身を開く HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel 5.右メニューに出てくるImportMixedTypesが"Text"になってるのを確認する 6.同じく、TypeGuessRowsがいくつになってるかを確認する ****** という手段で確認はできます。 ところで、リンクの所に書いてあった内容は理解できました? 要は、上記で調べたTypeGuessRowsの行数までのデータをチェックして、 その中が単一の型式だったらその型に、複数の型が存在していればImportMixedType の型に(通常Textになっていると思う)するようです。<Access で、想像したのは、「片方の上手くいくPCではその指定行までにテキスト型と判断される セルを含まれていて、上手くいかないPCではその指定行までにテキスト型と判断される セルを含んでいない」のではないかと思ったわけです。 >>では、うまくいかないPCで、手動インポートした場合はどうでしょうか? >>あと、2台のPCのAccessはバージョン・パッチは共通ですか? > >手動でも試してみましたが、同じでした。アクセスのバージョンは >どちらも2000です。 当ててあるパッチも同じですか? <ServicePackを片方は当ててあって片方あててないとか。 #もし”バグ”であるなら、ServicePackなどで修正されている可能性があるので。 #それを片方にしか当てていないと、二つのPCで差が出てきます。 >>可能性がないかどうかは分からないので、問題ないなら、試しに文字列にして >>テストされてはどうですか? > >文字列に変更したら、インポートが問題なく出来ました。 問題なく出来たら、解決というわけではないんですね(笑)? 自動的に、文字列にするということは出来ないということなんでしょうか? それが、正当な解決法だと思うのですが。 どうしても無理ということであれば、 該当ExcelファイルをCSV形式に変換しちゃって、そのCSVをAccessで読み込むという形 すれば、エラーはでないかも? |
yu-ji さんへ 沢山の回答ありがとうございました。 レジストリについては殆ど無知に近い私ですので、 勉強してから教えて頂いた方法も考えてみます。 とりあえずは、サービスパックかどうかの環境が 関係しているかもしれなので、エラーの起こるPCに インストールしてやってみます。それでもだめなら、 テキスト型で出力して、インポートしてみます。 それでもだめなら、レジストリってのをこわごわやって みます。 貴重なアドバイスを沢山親切に教えていただいて、 本当に感謝しております。 ありがとうございました。 miniより >▼mini さん: >>このサイトで記載の、 >>「以下のレジストリ キーの "TypeGuessRows" 値を変更します。」 >>って、どこの事ですか?どうやったら値を変更できますか? > >レジストリについての知識がなければ、下手に行わないほうがいいとは思う >ので、周りに詳しい方はいらっしゃらないですか? >#下手にレジストリを修正したり削除したりすると、PC自体が動かなくなったり >#するんで。下手しなきゃ問題はないんですが。 > >もし自分ひとりで行わなければいけないということであれば、念のために、 >最初にレジストリファイルの書き出しを行って、バックアップを取っておいた方が >いいです。 > >で、以下、確認する為の説明。 > >****** > >1.[スタートメニュー]-[ファイル名を指定して実行]を選択 >2.regedit と入力して、OKボタンを押す >3.レジストリエディタが開かれるので、まずレジストリの書き出しを行う >4.レジストリエディタの左メニューにある以下の中身を開く > >HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel > >5.右メニューに出てくるImportMixedTypesが"Text"になってるのを確認する >6.同じく、TypeGuessRowsがいくつになってるかを確認する > >****** > >という手段で確認はできます。 > >ところで、リンクの所に書いてあった内容は理解できました? > >要は、上記で調べたTypeGuessRowsの行数までのデータをチェックして、 >その中が単一の型式だったらその型に、複数の型が存在していればImportMixedType >の型に(通常Textになっていると思う)するようです。<Access > >で、想像したのは、「片方の上手くいくPCではその指定行までにテキスト型と判断される >セルを含まれていて、上手くいかないPCではその指定行までにテキスト型と判断される >セルを含んでいない」のではないかと思ったわけです。 > > >>>では、うまくいかないPCで、手動インポートした場合はどうでしょうか? >>>あと、2台のPCのAccessはバージョン・パッチは共通ですか? >> >>手動でも試してみましたが、同じでした。アクセスのバージョンは >>どちらも2000です。 > >当ててあるパッチも同じですか? ><ServicePackを片方は当ててあって片方あててないとか。 >#もし”バグ”であるなら、ServicePackなどで修正されている可能性があるので。 >#それを片方にしか当てていないと、二つのPCで差が出てきます。 > >>>可能性がないかどうかは分からないので、問題ないなら、試しに文字列にして >>>テストされてはどうですか? >> >>文字列に変更したら、インポートが問題なく出来ました。 > >問題なく出来たら、解決というわけではないんですね(笑)? >自動的に、文字列にするということは出来ないということなんでしょうか? >それが、正当な解決法だと思うのですが。 > >どうしても無理ということであれば、 >該当ExcelファイルをCSV形式に変換しちゃって、そのCSVをAccessで読み込むという形 >すれば、エラーはでないかも? |
▼mini さん: >>問題なく出来たら、解決というわけではないんですね(笑)? >>自動的に、文字列にするということは出来ないということなんでしょうか? >>それが、正当な解決法だと思うのですが。 >> >>どうしても無理ということであれば、 >>該当ExcelファイルをCSV形式に変換しちゃって、そのCSVをAccessで読み込むという形 >>すれば、エラーはでないかも? >とりあえずは、サービスパックかどうかの環境が >関係しているかもしれなので、エラーの起こるPCに >インストールしてやってみます。それでもだめなら、 >テキスト型で出力して、インポートしてみます。 >それでもだめなら、レジストリってのをこわごわやって >みます。 元のExcelは修正できないんですね(笑)? CSVにして・・・ってやるより、他の方法のがいいかも。 Accessから、元となるExcelを問題の列をテキスト型に修正して別名で保存 (TEMPフォルダなんかに)した後、その修正済みExcelファイルAccessで読み込む というやり方のほうが、(元Excelが変更できないということであれば)正攻法な 気がします。 一応、参考までにってことで。 |