• 締切済み

テキストファイルをAccessへインポートする自動化の記述方法は?

Accessの画面より、コマンドボタンをクリックして、外部データベース(MDB)にテキストファイルをインポートするプログラムを作っているのですが、記述方法がわかりません。どなたか回答願います。カレントデータベース(mdb)へテキストファイルをインポートするプログラムは作成したことはあります。

みんなの回答

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.4

どもども田吾作7です。 解説いたします。。。 "コード ページ" とは、記号 (文字、数字、区切り文字) を文字番号にマップするために、オペレーティング システムが使用する内部テーブルです。 異なるコード ページは、異なる国で使用される文字セットをサポートしています。コード ページは番号で表され、たとえば、コード ページ 932 は日本語の文字セットを表します。また、中国語の文字セットの 1 つは 950 というコード ページで表されます。 "Unicode" とは、ISO (International Standards Organization) の文字標準。Unicode は 16 ビット (2 バイト) のコード方式を使用して、65,536 文字の領域を確保しています。Unicode には、句読点、数学記号、および注釈記号が含まれています。また、将来の拡張用に空き領域も確保されています。 という説明ではわからないですよね? 要は、1バイトはきちんと1バイトに扱おうということです。 例をあげると・・・ LenB("ア") ← 半角 LenB("あ") ← 全角 これはどちらも2を返します。 固定長となると、全角は2バイト、半角は1バイトとして表現されます。 このままでは、半角文字が2バイトとして計算されるために、半角と全角を切り分ける必要があります。 試しに LenB(StrConv("ア"),vbFromUnicode) ← 半角 LenB(StrConv("あ"),vbFromUnicode) ← 全角 を行ってください。 半角と全角では、返り値が違うと思います。 半角は1 全角は2 ついでに・・・ LenB(StrConv("アあ"),vbFromUnicode) ← 半角と全角 返り値は3 これは例えをLen関数でしておりますが、MIDB,LEFTB,RIGHTBと言ったような、バイト数による文字列操作には欠かせない処理です。 実際に書いたコードでいうと 1.wkSpotStr = StrConv(wkStr, vbFromUnicode) で変換して 2.wkSpotStr = MidB(wkSpotStr, StartPosition, SpotFldLength) で、変換した文字列をStartPositionバイト目から、長さSpotFldLengthバイトの文字列を抜き出してます。 しかし、このままでは1番の処理を行っているために、何が書いてあるのかチンプンカンプンなので、抜き出した文字列を 3.wkSpotStr = StrConv(wkSpotStr, vbUnicode) により、私たちのわかる文字コードに戻しています。 ご理解いただけたでしょうか?

mino3
質問者

お礼

理解いたしました。そして、数々の回答ありがとうございました。 また何かあったらよろしくお願いします。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.3

どもども田吾作7です。 サンプルです。 Accessの1番目です。 解らなかったら、カキコしてください。

mino3
質問者

補足

サンプルを拝見させて頂きました。以下の部分が理解できません。 1.'文字列を Unicode からシステムの既定のコード ページに変換 wkSpotStr = StrConv(wkStr, vbFromUnicode) 2.'StartPositionバイト目からFiledLengthバイト文字列を抜き出す wkSpotStr = MidB(wkSpotStr, StartPosition, SpotFldLength) 3.'システムの既定のコード ページを使って、文字列をUnicode に変換 wkSpotStr = StrConv(wkSpotStr, vbUnicode) ※特に、1.2が理解できません。回答よろしくお願いします。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

どもども田吾作7です。 さらに質問&提案を追加します。 質問1.固定長テキストファイルと、取込み先のmdbのテーブルのフィールドの順番は一緒ですか? 質問2.固定長テキストファイルの後ろの空白部分は削除しますか? 提案3.固定長テキストじゃなければいけないのですよね?カンマ区切りじゃダメなんですよね? 提案4.ヘッダ項目を追加するのはダメですか? 提案3・4を行っている意味は、もしカンマ区切り・ヘッダ項目ありのCSVテキストファイルであれば、SQL文1文で、全データのインポートが可能だからです。 もしこの提案がダメであれば、一つ一つのフィールドデータを書き込んでいかなければなりませんので、ちょっとレスが遅れるかもしれません。 以上を回答いただけたら、コードを記入します。 でわでわ

mino3
質問者

補足

質問&提案についての回答です。 質問1.固定長テキストファイルと取込み先mdbのテーブルのフィールドの順番は一緒です。 質問2.固定長テキストファイルの後ろの空白部分は削除します。 提案3.4につきましては、顧客先の仕様上、カンマ区切り及びヘッダ項目の追加は、困難です。申し訳ありません。 以上です。再度回答よろしくお願いしましす。  

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

どもども田吾作7です。 (普段はプログラミングのVisualBasicのページに回答しております。) 補足お願いします。 1.B.mdbからA.mdbにデータをインポート?それともB.csvからA.mdbにデータをインポート? 2.DBの接続方式はDAOですか?ADOですか?(DAOならばCurrentDBが使えるはず) 3.取り込むデータがCSV(などのテキスト形式)である場合、ヘッダ項目が記されていますか? 以上のことがわかれば、コードを書くことが出来るのですが・・・ でわでわ

mino3
質問者

補足

補足を以下に記述します。 1.CSV(Txt)からmdbにデータをインポートします。CSV(Txt)ファイルは固定長です。 2.DBの接続方式は、DAOを考えております。 3.CSV(Txt)にヘッダ項目は、記されておりません。 再度、回答よろしくお願いします。

関連するQ&A

専門家に質問してみよう