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

このQ&Aに関連する最新のQ&A

A 回答 (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)
により、私たちのわかる文字コードに戻しています。

ご理解いただけたでしょうか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/27 14:12

どもども田吾作7です。



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

この回答への補足

サンプルを拝見させて頂きました。以下の部分が理解できません。

1.'文字列を Unicode からシステムの既定のコード ページに変換
wkSpotStr = StrConv(wkStr, vbFromUnicode)

2.'StartPositionバイト目からFiledLengthバイト文字列を抜き出す
wkSpotStr = MidB(wkSpotStr, StartPosition, SpotFldLength)

3.'システムの既定のコード ページを使って、文字列をUnicode に変換
wkSpotStr = StrConv(wkSpotStr, vbUnicode)

※特に、1.2が理解できません。回答よろしくお願いします。

補足日時:2001/07/24 12:05
    • good
    • 0

どもども田吾作7です。



さらに質問&提案を追加します。

質問1.固定長テキストファイルと、取込み先のmdbのテーブルのフィールドの順番は一緒ですか?
質問2.固定長テキストファイルの後ろの空白部分は削除しますか?
提案3.固定長テキストじゃなければいけないのですよね?カンマ区切りじゃダメなんですよね?
提案4.ヘッダ項目を追加するのはダメですか?

提案3・4を行っている意味は、もしカンマ区切り・ヘッダ項目ありのCSVテキストファイルであれば、SQL文1文で、全データのインポートが可能だからです。
もしこの提案がダメであれば、一つ一つのフィールドデータを書き込んでいかなければなりませんので、ちょっとレスが遅れるかもしれません。


以上を回答いただけたら、コードを記入します。

でわでわ

この回答への補足

質問&提案についての回答です。

質問1.固定長テキストファイルと取込み先mdbのテーブルのフィールドの順番は一緒です。

質問2.固定長テキストファイルの後ろの空白部分は削除します。

提案3.4につきましては、顧客先の仕様上、カンマ区切り及びヘッダ項目の追加は、困難です。申し訳ありません。

以上です。再度回答よろしくお願いしましす。
 

補足日時:2001/07/23 15:51
    • good
    • 0

どもども田吾作7です。


(普段はプログラミングのVisualBasicのページに回答しております。)

補足お願いします。

1.B.mdbからA.mdbにデータをインポート?それともB.csvからA.mdbにデータをインポート?

2.DBの接続方式はDAOですか?ADOですか?(DAOならばCurrentDBが使えるはず)

3.取り込むデータがCSV(などのテキスト形式)である場合、ヘッダ項目が記されていますか?

以上のことがわかれば、コードを書くことが出来るのですが・・・

でわでわ

この回答への補足

補足を以下に記述します。

1.CSV(Txt)からmdbにデータをインポートします。CSV(Txt)ファイルは固定長です。

2.DBの接続方式は、DAOを考えております。

3.CSV(Txt)にヘッダ項目は、記されておりません。

再度、回答よろしくお願いします。

補足日時:2001/07/23 09:56
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessでタブ区切りのテキストをインポートすると、71項目目以降のデータがインポートされない

WindowsXP
Access2000

いつもお世話になります。
どう対処してよいかわからなくなってしまったので質問
させてください。

社内システムから、ダウンロードしてきた、
テキストデータ(1登録あたり106項目、タブ区切りで保存、
登録データの切れ目は改行)があります。

エクセルに貼り付けてみると、↓のような見た目になります。
■=データ有りの意味


 A┃B┃C┃D・・┃・┃・┃BS┃BT┃BU┃BV┃・┃・┃DB
1■┃■┃■┃■・・┃■┃■┃■┃・┃・┃・┃・┃・┃・
2■┃■┃■┃■・・┃■┃■┃■┃・┃・┃・┃・┃・┃・
3■┃■┃■┃■・・┃■┃■┃■┃・┃・┃・┃・┃・┃・
・■┃■┃■┃■・・┃・┃・┃■┃・┃■┃■┃■┃・┃■
・■┃■┃■┃■・・┃・┃・┃■┃・┃■┃■┃■┃・┃■
・■┃■┃■┃■・・┃・┃・┃■┃・┃■┃■┃■┃・┃■

※BTの列は全て空白です。

それを、アクセスに取り込み、管理しようとしています。

登録数は特に決まっていません。
また、106項目は全て埋まっているわけではなく
空白の項目も多々あります。

インポート用のテーブルを用意し、インポートすると
何のエラーもなくインポートが完了するのですが、
なぜかBSの列までのデータは取り込むものの、
BT以降のデータは空白になります。

今回、200件弱のテスト用データで試したところ、
全てのデータにおいて、BT以降のデータが
空白になりました。

インポートできるデータには「○項目めまで」という
決まりがあるのでしょうか?

WindowsXP
Access2000

いつもお世話になります。
どう対処してよいかわからなくなってしまったので質問
させてください。

社内システムから、ダウンロードしてきた、
テキストデータ(1登録あたり106項目、タブ区切りで保存、
登録データの切れ目は改行)があります。

エクセルに貼り付けてみると、↓のような見た目になります。
■=データ有りの意味


 A┃B┃C┃D・・┃・┃・┃BS┃BT┃BU┃BV┃・┃・┃DB
1■┃■┃■┃■・・┃■┃■┃■┃・┃・┃・┃・┃・┃・
2■┃■┃■┃■・・┃■┃■┃■┃・┃・┃・┃・┃・┃・
3■┃■┃■...続きを読む

Aベストアンサー

回答がつかないようですので、たぶん見当違いでしょうが、コメントさせてもらいます。

Excel上で「※BTの列は全て空白です。」というのが気になりますね。

1行目のデータが70項目目の後ろで改行されている、ということはないのでしょうか。

そんなことはないのなら、データの先頭行はフィールド名ではないように見えますので、先頭に仮のフィールド名(例えば、a、b、c、・・・)のデータを1件分106項目、空白なしで加えて、インポートされてみてはいかがでしょうか。それでもだめでしたら、ごめんなさい。

Qアクセス(MSAccess)でカレントデータベースのパスを取得するには?

■MS Accessでカレントデータベースのパス(ファイル名まで)を取得できるのでしょうか?

[テキストボックス]の[コントロールソース]に使用する場合、
"=CurDir$()"を使えばデータベースのパスまでは取得できますが、
"c:\my documents\data.mdb"といったように、データベース名まで
取得する方法を教えてください。

Aベストアンサー

"=CurDir$()" に倣って書けば "=CurrentDb.name" でいいと思います。
でも "=CurDir$()" では文字通り現在のディレクトリを示すだけで
そのとき開いているデータベースのパスを示さないのではないでしょうか?

QACCESS アクセスで他のデータベースからのデータインポート

アクセスど初心者です。
Aというデータベースファイルにあるテーブルaのデータを、Bというデータベスファイルにあるテーブルbに
インポートできますか?フィールド等詳細は両テーブルとも一緒だとします。
イメージ的には、テーブルbの最終レコードの後にテーブルaのデータがくっつくという感じです。
コピー&ペーストだとエラーになってしまうのですが・・・。宜しくお願いします。

Aベストアンサー

コピーで出来ます。
コピーし貼り付けで既存のテーブルにデータを追加でできます。
ただしテーブルbに主キーの設定がある場合重複する値があるNullの値があるなどエラーになります。
その辺の確認をしてください。
通常はBデータベースのテーブルにAデータベースのテーブルaをリンクしてクエリでテーブルbにレコードを追加するなどの方法でやります。

Qmdbの破損「データベース形式・・・・を認識できません」

フォームのみのDBとテーブルのみのDBがあります。

突然フォームのみのDBがタイトルのメッセージが表示されて、開けなくなりました。
なんとか、フォームの情報とVBAコードを吸い上げたいのですが
行き詰まっています。
JetCOMP.exeを使ってみたりもしたのですが、うまく行きませんでした。

レコードのmdbの方には一切問題はありません。

バックアップはこまめに取っていたつもりですが、
ちょうど重要な更新をした後に上記の状態になってしまい
できればVBAの差分だけでも拾いたいと思っています。

どなたか助けて下さい。よろしくお願い申し上げます。

Aベストアンサー

テーブルデータの回収は色々と方法があるのですが、モジュールの方は殆どありません。よっぽど状態がよくない限りは1番さんの推薦のソフトでもテーブルしか救い出せません。残念ながら諦めてその救出に手間暇かける時間を再度コードを打ち込む時間にかけた方が近道になるかと思います。

QAccess2000 テキストデータのインポート

質問させていただきます。
テキストデータ(カンマ切り、項目A,項目Bともにテキスト型)をインポートしたのですが、項目Aはたとえば、1または2バイト目がスペースのデータ、スペースなしのデータなど混在しています。テキストデータの通りにインポートしたいのですが、Accessに取り込むとスペースのないデータ(すべて左詰)になってしまいます。
どうすればテキストデータ通りにインポートできるでしょうか?

Aベストアンサー

テキストデータの各項目が「"」で区切られていれば、インポートの時に「テキスト区切り記号」の指定で「"」を指定してやれば、ご希望通りにインポートできますよ!

(ACCESS2000にて実験、△は空白)
"△△△△1","1△△△△"
"△△△△2","2△△△△"

頑張ってくださいヽ(^。^)ノ


このカテゴリの人気Q&Aランキング

おすすめ情報