初めて質問します。
よろしくお願いします。
今テキストファイルをデータベース化(ACCESS)する変換ツールをVBで作りたいのですが、VBからACCESSを呼ぶにはどのようにしたら良いですか?
簡単なものでいいので教えて下さい。お願いしますm(__)m
>VBからACCESSを呼ぶ
これはVBでMDBに接続する、と解釈してよろしいでしょうか?
答えを書くのは簡単ですが、色々と模索していただきたいので下記のサイトを
ご紹介します。っていうかほぼ答えですが、色々試してください。
解らないことがありましたらまたお答えいたします(^^
http://homepage2.nifty.com/inform/vbdb/
S.Sさんありがとうございます!
また質問になってしまうのですが、
①デフォルトのワークスペースを定義するとは?
②テーブル名を指定してレコードセットを作成するとは?
質問ばかりでスミマセンが回答よろしくお願いします。(^^;
質問の答えですが、形式的なもので・・・
1.ワークスペースとは、JET エンジンとプログラムが情報を交わらせる領域と
解釈していただいたら良いかと思います。(下記で例を記します)
2.レコードセットとは、テーブルをレコード単位に扱うことができるオブジェクトのことです。(下記で例を示します)
それと、予断になりますが、質問で1、2と書かれていますが、囲み文字(数字が○で囲まれているもの等)は表示されないブラウザがありますので使用しないようにしてください(^^
さてワークスペースとレコードセットの例ですが、簡単に書きます。
コメントを見ながら理解してください。
抜粋です。コメントを変えておきます。
' DAOのオブジェクト変数を宣言する
Dim ws As DAO.Workspace
Dim rs As DAO.Recordset
Dim db As DAO.Database
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase("C:\My Documents\db1.mdb")
'上記2行は下記1行で表現できます。何をしているかというと、どこのデータベースを使用するかを定義しているだけです。
'Set db = DBEngine.Workspaces(0).OpenDatabase("C:\My Documents\db1.mdb")
'レコードセットですが、"Table1"と書かれた部分にSQL(Select句)を書くことでデータの指定を行えます。
Set rs = db.OpenRecordset("Table1", dbOpenDynaset)
'上記の場合はTable1の全データがrsにセットされます。
Set rs = db.OpenRecordset("Select * From Table1 Where QUANTITY > 100", dbOpenDynaset)
上記の場合はTable1内のQUANTITYが100より大きいデータのみ抽出しrsにセットされます。
これでDBよりデータの抽出が行えるわけですが、ADO、RDO、DAOと接続方法にも色々ありますので目的に応じた方法を使用してください。それぞれの特長は検索すると簡単に見つかると思います(^^
すみません、予断ではなく余談です(^^;
編集 削除S.Sさん
分かりやすい説明ありがとうございます!
ただ自分がやりたかったのは
既存のテキストファイルをACCESSにインポート(で言い方あってるのかな?(..;))
したいのでDBには何もデータは入っていないんです。
S.Sさんに教えていただいたサイトを見てもそのようなことは載ってなかったようです。
S.Sさんにおんぶに抱っこになっていては迷惑だと思うので…自分のやりたいことが
載っているようなサイトを知っていたら教えていただけますか?
S.Sさんが知っているのなら教えていただけたら幸いです。
たびたびすみませんm(__;)m
すみません、ちょっと整理します。
まずテキストファイルをVBで読み込むのですか?
それともACCESSの機能で取り込むのでしょうか?
テキストファイルのデータ形式もお教えください。
まずそこから始めましょう(^^;
ほんとにすみません(-o-;)
実際のところVBで読み込むのか、ACCESSで読み込むのか、やり方自体分かっていないので…どっちとは言えません。
ただデータの形式としては例として
Test.txtに1行だけ「1234」と入っていたとします。
それをACCESSのテーブル1のフィールド1に「12」、フィールド2に「34」と言った形で入れたいのです。
データベースにしたいテキストファイルの量が多いのでこのようなことをしたい。といったわけです。
わかりますか...(^^;)
それでは勝手に仮定(笑)して話を進めます(^^
あるフォルダにテキストファイルが複数存在するんですね。
そのテキストファイルには1行だけデータが入っていると。
そのデータを読み込み、MDBに更新する・・・
で、よろしいでしょうか?
とりあえずフォルダ内のテキストファイルの検索方法と、テキストファイルの読み込み方について記述します。私が上記に記述したとおりだとおっしゃるのであれば、次のレスで続きを書きます(笑)
Dim Selectfile As String
Dim TextLine As String
Selectfile = ""
'C:\TEST内のテキストファイルを抽出
Selectfile = Dir("C:\TEST" & "\*.txt")
Do Until Selectfile = ""
Open "C:\TEST\" & Selectfile For Input As #1
Do While Not EOF(1) ' ファイルの終端までループを繰り返します。
Line Input #1, TextLine ' 行を変数に読み込みます。
Debug.Print TextLine ' イミディエイト ウィンドウに表示します。
Loop
' 他のモードで開く前に、このファイルを一度閉じます。
Close #1
'次のファイル名へ
Selectfile = Dir
Loop
テストしてませんが、多分大丈夫です。
これでテキストファイルを読み込むことができます。
HELP等より抜粋して組み合わせただけですので、ステートメントや
関数の意味、使用方法はHELPを見ていただいたら解ると思います。
S.Sさんありがとうございます!
実はさっき自分も最初にファイルを読み込んでからMDBに更新すれば…って思いました。(^^;
それでなんですが、
ファイルを読み込んでからMDBに更新する際は色々調べたんですが、「AddNew」を使えばよろしいんでしょうか?
試しにこのように使ってみたんですが,
rs.AddNew
Test1 = "100"←(1)
Test2 = "200"←(2)
rs.Update
フィールドのTest1,2とも空白のレコードが追加されていました。
(1),(2)の指定の仕方がおかしいのか、AddNewの使い方が悪いのか分かりません。
正しい使い方知っていたら教えて下さいm(__)m
すみません!
rsはレコードセットされた変数です!
え〜っとですね〜
Update、Edit、AddNew等でも更新できるのですけど、今後のことも考慮してSQLの構文を習得されてはいかがでしょうか?
それを踏まえて書きます。
まず、テキストファイルの読み込みには成功してるのですね?
それを前提にですが、MDBへの接続はできてますでしょうか?
接続ができているのであれば、下記内容で更新できます。
13:53:19に私が書き込んだ内容で、Set db までを行って下さい。
それで db.Execute SQL文 を実行。
これだけです。
SQL文の内容はInsert、Update、Deleteの書式にしたがって書いてください。
参考リンクは下記です。それではまた(^^
http://homepage2.nifty.com/inform/vbdb/sql_basic.htm
さよならしたのにすみません。
db.Execute INSERT INTO テーブル1(Test1,Test2)VALUES('100', '100')
と打ったところ「INTO」の部分で
「コンパイルエラー:
修正候補:ステートメントの最後」
とエラーが出ました…
なにがいけないんでしょうか?
めんどくさかったら返信はしなくてもだいじょぶです(^^;
db.Execute "INSERT INTO テーブル1(Test1,Test2) VALUES('100', '100')"
ダブルコーテーションがないだけってことはないですよね?
参照設定は大丈夫ですか?
ダブルコーテーションをつけたらできました!
本当にありがとうございます(TT)
最初から最後までおんぶに抱っこで申し訳ありませんでしたm(__)m
あと分からないことは自力で解決したいと思います。
でも、もし「たろ」の名前を見つけたときはよろしくお願いします!
では、お世話になりました(^^)