mdbファイルに保存するには?

解決


みそ  2005-11-30 20:20:30  No: 128427

使用しているのはVB6です。
初歩的な質問で大変申し訳ないのですが。

CSVファイルを読み込んでデータグリッドに表示しました。
今度はその表示したデータすべてを「取り込み」というコマンドボタンを新たに作成してそれを押すとmdbに保存できるようにしたいのです。

SQL文を使う、ということはヒントでいただいたのですが、どうやったらmdbに保存できるのかがいまいちつかめないのです。
検索をいろいろしたのですがパっとこなくて・・・
なにかアドバイス、参考になるサイト等ありましたらよろしくお願いします。


もげ  2005-11-30 20:50:23  No: 128428

目的のMDBは、空のMDBが用意されている状態ですか?
無ければそれを作成するところから始める必要があります。
http://www.microsoft.com/japan/msdn/data/techmat/ado/dao2ado_4.asp
の「データベースの作成」の項に、DAO、ADOXでの作成方法があります。

SQL文は、このへんとか。
http://www.geocities.co.jp/SiliconValley/4805/vbtips/vbtips019.htm
データによっては、schema.iniの作成が必要だったり、
ヘッダ行が無いとダメだったりと、いくつか制約があるので、 
AccessのクエリデザインのSQLビューに貼り付けて確認する
などで実際に試しながら構文を調整していくとよいかと思いますよ。


みそ  2005-11-30 20:58:11  No: 128429

>もげ様

回答ありがとうございます。
目的のMDBは空の状態で用意されています。
(テーブルのフィールド名も記入済みでデータ入力待ちの状態になってます)

読み込んでデータグリッドに表示しているCSVファイルの内容なのですが、フィールド数が14、レコード数が2000程のデータです。

教えていただいたサイトを参考にもう少し勉強してみようと思います。
またなにか参考になるサイトや情報がありましたらよろしくお願いします。
お忙しい中このような初歩的な質問に丁寧に回答してくださってありがとうございました!


もげ  2005-11-30 21:01:15  No: 128430

読み込んだデータをDataGrid上で修正するのであれば、
修正内容を一旦CSVに吐き出してからMDBへとなりますが、
で、あれば、むしろ、
CSV→MDBへインポート→MDBをデータソースにしてDataGridで表示(そのまま修正可能)
という流れのほうが自然かもしれません。


みそ  2005-11-30 21:13:01  No: 128431

>もげ様

特にDataGrid上での修正とかはしないんです。
ただCSVファイルをvsFlexGrid上に全部表示→表示データ全部をmdbに保存
という単純な流れなんです。

教えていただいた「Jetデータベース(DAO)〜」の関連項目を読んではいるのですがイマイチパっとしないんです。

すごい初歩な質問なんですが、JetデータベースというものはAccessで作れるデータベースと同じもの、ということなんでしょうか・・・?
Microsoft DAO Object Libralyというものを使って作れるデータベースというのはわかったのですがそれがどう機能するのかがさっぱりで。

実は上サイトからサンプルをDLしたのですが「ISAMドライバがみつかりませんでした」と表示されてしまいどういった動きをするのかがわからなかったんです。すみません。


もげ  2005-11-30 21:53:47  No: 128432

>JetデータベースというものはAccessで作れるデータベースと同じもの
そうです。AccessはJetデータベースを利用したアプリケーションです。

「ISAMドライバがみつかりませんでした」
のエラーの場合は、本当にドライバ(MDAC)がインストールされていない場合の他にも、
いろいろ原因が考えられるので、以下の情報を教えてください。
・あなたの開発環境(OS、サービスパック)
・Accessのバージョンとサービスパックの適用状況
・VBのサービスパック
(Access2000形式のファイルを扱うにはSP3以上、WinXPならSP5以上)
ISAMドライバはVB6.0のCD-ROMからも導入できmすが、ちょっと古いので、
取りあえず、MDAC2.5以上と(Access2000以上なら)Jet4.0の最新サービスパックを当てておくことをお薦めします。


みそ  2005-11-30 22:00:26  No: 128433

開発環境ですが

WindowsXP HomeEdition
Access 2000
VB6.0 (SP5)

です。

ただ、VBをインストールしたときにカスタムでいろいろ削ってインストールされている状態でして・・・(自分でインストールしたのではなく、指示されてインストールしたのでなにを削ったのか覚えてないのです)
おまけにVBのディスク自体も自由に使えないのでISAMドライバを入れたくてもできないのです。


みそ  2005-11-30 22:31:26  No: 128434

なんとかサンプルファイルを起動させて目的を達成することができました。
「グリッドのデータから」じゃなくて「CSVファイルそのものから」という考え方がようやくできました(^^;)

ただ、これではコピペで作ったようなもので自分の知識にはなってないと思います。
今、コードがどういったことをあらわしているのか調べています。


みそ  2005-11-30 23:28:27  No: 128435

上記サイトのプログラムをみていたのですが以下の部分がなにを言っているのかイマイチわかりません。
ヘルプで単語の意味は調べているのですがそれらが組み合わさるとなんともいえなくて・・・

Set wsTxt = DBEngine.Workspaces(0)
Set dbTxt = wsTxt.OpenDatabase(StripFileNam(strTxtPath),0,0, "Text;")

Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(strDbPath, False, False)

strConnect = "[Text;database=" & StripFileName(strTxtPath) & "]."

これらの文はいったいどういった働きをしているものなのでしょうか?


もげ  2005-12-01 01:25:58  No: 128436

>ただ、これではコピペで作ったようなもので自分の知識にはなってないと思います。
>今、コードがどういったことをあらわしているのか調べています。

素晴らしい心掛けですね。

Jetデータベースエンジンでは、ISAMドライバを使用して
テキストファイルやExcelファイル等をデータベースとして扱えます。
その際の文法は、テキストファイルの場合は、
テーブル名に相当する部分が、
[Text;database=ファイルが存在するフォルダ名].[ファイル名]
のように表されます。
前述のサンプルですと、
strConnect のところは、その構文を途中まで組み立てていて、
StrSql変数のところで、
INSERT INTO 新規テーブル SELECT * FROM [Text;database=C:\TEMP\vbtips019].export.csv
のようなSQLになります。

このサンプル、
>Set wsTxt = DBEngine.Workspaces(0)
>Set dbTxt = wsTxt.OpenDatabase(StripFileNam(strTxtPath),0,0, "Text;")
のところは使用していませんね。(コメントにしても動作に影響無し)
テキストファイルをデータベースとして開こうとしていますが。


みそ  2005-12-01 01:58:16  No: 128437

もげ様

>Set wsTxt = DBEngine.Workspaces(0)
>Set dbTxt = wsTxt.OpenDatabase(StripFileNa(strTxtPath),0,0, "Text;")

やはりこの2行は無くても大丈夫でしたか。
実は意味がわからないので削除して実行したらきちんと動いてしまったのでそのまま削除しちゃいました(^^;)

あと大変詳しい解説ありがとうございました。
おかげで理解できました。
本当にありがとうございます!!


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加