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と関連する良く見られている質問

QACCESS2003のデータアクセスページの使い方について

イントラ内でACCESS2003のデータアクセスページを使いたい。

1.ACCESS2003のデータアクセスページを作成しました。
2.そのMDBファイルと、データアクセスページ(htmファイル)を、WINDOWS2000ServerのInetpub内のwwwrootフォルダの中へ入れました。
3.ここにはイントラ内のHPなどを置いています。(普通に見れています。)
4.クライアントから、データアクセスページのhtmファイルを見に行くと「データソースログオン」が立ち上がります。(パスワードを設定しています。)
5.パスワードを入れるとデータアクセスページ(htm)から、通常のアクセスのフォームのごとくデータ入力が出来る予定なのですが(泣)できません。(泣)

で、悩んでおります。

ACCESS2003のMDBファイルとデータアクセスページ(HTMファイル)をサーバーのwwwrootへ置いただけでは、データアクセスページを通してmdbファイルへの入出力は不可能なのでしょうか?

Aベストアンサー

MDBに接続されたAccessプロジェクトを開いている場合データアクセスページは自動的にそのデータベースに接続されてそのパスがデータアクセスページのConnectionString プロパティに設定されます。
ページを作成した後でデータベースを移動またはコピーした場合はConnectionString プロパティに設定されているパスを更新して新しい保管場所を設定する必要がありますがどうなっていますか?
そこを確認してみてください。

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項目、空白なしで加えて、インポートされてみてはいかがでしょうか。それでもだめでしたら、ごめんなさい。

QAccessの使い方

アクセスに関しては、まったくの素人なので困っています。
実は会社のパソコンが、ハードディスククラッシュしまして、アクセスのデータがなくなってしまいました。
商品(冊子)を発送するために、帯封を作成したいのです。B4の用紙に3面付するつもりです。
それで、発送のエクセルの名簿は残っているのですが、それをアクセスにどのように取り込んだらいいかわかりません。
取り込んだあとの面付けやデザインなどは、参考書を見ながら勉強するつもりですが、
まず取り込み方がわからないので困っています。
アクセスに詳しい方、ぜひご指導願います。

Aベストアンサー

ちょっと今手元に
Accessの入ったマシンがないので微妙ですが
メニュー⇒ファイル⇒外部データの取り込み⇒インポート
これで取り込めると思います。
まあ方法はいろいろあると思いますよ、他にも。

Excelファイルをテーブルとしてリンクしたり、
プログラムで取り込むようにも作れます。

とりあえず、上記の方法で試してみてください。

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

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

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

Aベストアンサー

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

Q.htaccessの使い方について教えてください!

こんにちは。私はHPを運営しているんですが、最近荒らしにあってしまい悩んでます。.htaccessというものを最近知ったのでそれを使ってみようと言うことになりました。それで、その荒らしのIPを弾くには

# アクセス制限
order allow,deny
allow from all
deny from ppp01.aaa.ne.jp # ppp01.aaa.ne.jp を拒否
deny from .bbb.co.jp # ???.bbb.co.jp を拒否
deny from .go.jp # 当局によるアクセスを拒否
deny from 130.90. # 130.90.???.??? を拒否

こういう風に書けばいいんだなと分かりましたが、その荒らしというのが、2ちゃんねるにHPアドレスを貼り付けたりして厄介な奴なんです。そこで、2ちゃんねるのアドレスを弾くって言うことも出来ますでしょうか?

# アクセス制限
order allow,deny
allow from all
deny from ppp01.aaa.ne.jp # ppp01.aaa.ne.jp を拒否
deny from .bbb.co.jp # ???.bbb.co.jp を拒否
deny from .go.jp # 当局によるアクセスを拒否
deny from 130.90. # 130.90.???.??? を拒否
※deny from http://●●/

↑の※のように一緒にこうやって書くのかなって思ったんですけど、どこにもそう言う書き方が載ってないのであっているかどうか教えてください。あってなかったら正しい書き方を教えてください。よろしくお願いしますm(_ _)m

こんにちは。私はHPを運営しているんですが、最近荒らしにあってしまい悩んでます。.htaccessというものを最近知ったのでそれを使ってみようと言うことになりました。それで、その荒らしのIPを弾くには

# アクセス制限
order allow,deny
allow from all
deny from ppp01.aaa.ne.jp # ppp01.aaa.ne.jp を拒否
deny from .bbb.co.jp # ???.bbb.co.jp を拒否
deny from .go.jp # 当局によるアクセスを拒否
deny from 130.90. # 130.90.???.??? を拒否

こういう風に書...続きを読む

Aベストアンサー

モジュールmod_setenvifを使って、リファラ情報から2ch.netからのリンクをたどってきたものを除外する手法がよく使われてます。
絶対確実ではないですが。

ここらへんを利用可能かどうかを、Webサーバの管理者に確認されてみては。

参考URL:http://oshiete1.goo.ne.jp/goo_search.php3?MT=setenvif+referer+allow+deny+env

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

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

Aベストアンサー

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

Qaccessでのフィルタの使い方

住所録をアクセスで管理しています。
フィルタの使い方なんですが、抽出したもの以外を表示する方法ってあるんですか?例えば、東京都の住所を抽出して、逆に東京のレコード以外の住所だけを表示させることです。
まだ、初心者なのでさっぱりわかりません。
また、例えば、現住所と本籍が違う人だけを表示する方法ってあるんですか?

Aベストアンサー

こんばんはっ。
テーブルがどのようになっているかが良くわからないので、違うかもしれませんが
>東京都の住所を抽出して

"フォームフィルタ"をクリック(レコード→フィルタ→フォームフィルタでも可)
住所のところに(フィールドの名前がわからないので、勝手に住所と書いています)
Like "東京都*"
と入力し、フィルタを実行すると
東京都だけが抽出されます。

>東京のレコード以外の住所
上記と同じ要領で
Not Like "東京都*"
と入力し、フィルタを実行すると
東京と以外が抽出されます。

>現住所と本籍が違う人だけ
フィールドの名前が、仮に"現住所"と"本籍"だったら
上記と同じ要領で
現住所のフィールドの箇所に
<>[本籍]
と入力し、フィルタを実行すると
出来ると思います。

フィルタの実行の仕方は大丈夫ですか?
杯(さかずき)の様なアイコンが、フィルタの実行です。
全然違ったらごめんなさい。

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

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

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

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

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

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

Aベストアンサー

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

QAccess テキストボックスの使い方について

先日、以下の通り質問をさせて頂いた者です。
https://oshiete.goo.ne.jp/qa/9529939.html

アクセスで、テキストボックスに値を入れてコマンドボタンを押すと、
検索された値が先頭に来るようにVBAを作成しました。

さらに発展系で、コマンドボタンを押さなくともテキストボックスに値を入れるだけで、
検索された値が先頭に来るようにしたいと思っているのですが、
そんな事はAccessで可能なのでしょうか。

もし可能な場合、どのような構文を使い作成すれば良いかを御教示頂けませんでしょうか。
よろしくお願いします。

(わかりづらいかもしれませんので、イメージ図を添付させて頂きました)

Aベストアンサー

BeforeUpdateで行けると思いますが。

QAccess 外部データのインポート

Access初心者です。

Access2007の既存テーブルにExcel2007のシートをインポートしようと思っているのですが、
フィールド名が完全に一致しなければならないのは理解しているのですが、フィールド名の
半角/全角は気にしなくても良いのでしょうか。
問題なくインポートできたのですが、これは2007の仕様でしょうか。
それともどのofficeのバージョンでもそうでしたでしょうか。

ご存知の方教えてください。

Aベストアンサー

一部ですがAccessはAccessを使って作られています
VBAでの確認ですが、文字列の比較はテキストモードのようですね。
全角・半角、英語の大文字と小文字、ひらがな・カタカナは同一視されます。
?"A"="A"
?"A"="a"
?"あ"="ア" ※全角大文字のアです
?"あ"="ア" ※半角大文字のアです
?"1"="1"
みなTrueが返ってきます。
でも
?"あ"="ァ" ※全角小文字のァです
はFalse
なんとなく気持ちがよくありません。
ちょっと不便なことも起きたりします。当方Acc2002
経験上ですが、半角カタカナや全角英数は使わないほうが『吉』かと。


人気Q&Aランキング