Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4126 / 13644 ツリー ←次へ | 前へ→

【58285】ADO接続にて テーブル名の取得 みそじのおじさん 08/10/16(木) 10:36 質問[未読]
【58287】Re:ADO接続にて テーブル名の取得 neptune 08/10/16(木) 11:20 回答[未読]
【58289】Re:ADO接続にて テーブル名の取得 みそじのおじさん 08/10/16(木) 15:42 お礼[未読]
【58297】Re:ADO接続にて テーブル名の取得 neptune 08/10/16(木) 22:06 発言[未読]
【58308】Re:ADO接続にて テーブル名の取得 みそじのおじさん 08/10/17(金) 19:30 お礼[未読]

【58285】ADO接続にて テーブル名の取得
質問  みそじのおじさん  - 08/10/16(木) 10:36 -

引用なし
パスワード
   毎度お世話になっております。

ADOの勉強の為、Excelのシートデータをmdbにインポートする
プログラムを作成しました。(Access操作は初めてです。)

そこで質問なのですが、ADOの接続が確立された時点で、.mdbの中の複数存在
するテーブル名を取得する方法はあるのでしょうか?
(自分で調べたかぎりでは、操作したいテーブル名が分かっていてのADO接続
 であり、自分のやり方が邪道のように感じています。)

作業の流れは

1 Excelフォーム上で.xlsファイルの指定(任意)
2 裏で一度そのファイルを開きすべてのシート名を取得、Comboboxにadditem
3 シートを選択
4 そのシートは何行目が見出し行なのかを指定
5 インポートされるmdbファイルを指定(任意)
6 対象となるテーブル名を指定
7 ADOで接続し、Recordsetよりそのテーブルにあるフィールド名すべてを
  UserFormに表示して、接続を一旦終了する。
8 個々のフィールドにシートのどの列を対応させるのか設定
9 フィールドとシートの列のデータ型に矛盾がないかチェック
10 再度接続して、インポートスタート

です。現在6の作業は一度mdbファイルを開きテーブル名を確認して、直接TextBox
に手入力していますが、プログラムでテーブル名が取得できれば、現在Textboxの
所をComboBoxに変更してそこから選択できるようにしたいです。


Const cnsMDBConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="

Sub Data_Inport()

Dim CN As ADODB.Connection
Dim Res As ADODB.Recordset
Dim strExlFileName As String
Dim strSheetName As String
Dim strMdbFileName As String
Dim strTable As String

'//////////////////////////////////////
'ファイル名取得やテーブル名取得は省略
'//////////////////////////////////////

Set CN = New ADODB.Connection

CN.Open cnsMDBConnect & strMdbFileName & ";"

'私の認識ではこれより先の操作では、必ずテーブル名が必要という認識です。
'connectionが確立したこの時点でテーブル名が取得できればと思っています。
'この時点でのconnectionのメンバを見渡した限りではそれらしい物は発見でき
'ませんでした。

Set Res = New ADODB.Recordset

  Res.Open strTable, CN,adOpenKeyset, adLockOptimistic, adCmdTable
 
以下省略

 
環境はexcel2003,access2000,os xpです。よろしくお願いします。 

【58287】Re:ADO接続にて テーブル名の取得
回答  neptune  - 08/10/16(木) 11:20 -

引用なし
パスワード
   ▼みそじのおじさん さん:
こんにちは

SQLServerの例ですが、connectionが違うだけで後は確か同じだった
と思います。
ht tp://homepage2.nifty.com/inform/vbdb/ado_sqlservertables.htm

【58289】Re:ADO接続にて テーブル名の取得
お礼  みそじのおじさん  - 08/10/16(木) 15:42 -

引用なし
パスワード
   neptuneさんこんにちは

参考サイトで解決いたしました。
私の環境では

Microsoft ADO Ext 2.8 for DDL and Securityにチェックをいれて

>Const cnsMDBConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
>
>Sub Data_Inport()
>
Dim Cat as ADOX.Catalog
Dim tbl as ADOX.Table

>Dim CN As ADODB.Connection
>Dim Res As ADODB.Recordset
>Dim strExlFileName As String
>Dim strSheetName As String
>Dim strMdbFileName As String
>Dim strTable As String
>
>'//////////////////////////////////////
>'ファイル名取得やテーブル名取得は省略
>'//////////////////////////////////////
>
>Set CN = New ADODB.Connection
>
>CN.Open cnsMDBConnect & strMdbFileName & ";"
>

Set Cat = New ADOX.Catalog

cat.ActieConnection = CN

For Each tbl in Cat.Tables
  If tbl.type = "TABLE" Then
   UserForm1.ComboBox3.AddItem tbl.Name
  end if
Next


>Set Res = New ADODB.Recordset
>
>  Res.Open strTable, CN,adOpenKeyset, adLockOptimistic, adCmdTable
> 
>以下省略
>
> 
これで出来るようになりました。ありがとうございました。

追伸

先日、neptuneさんにC/C++では、との提案を受けてまして本気で勉強を始めました
が,Cの文字列の扱いには完全にやられましたねー。まるでVBの概念が通用しない...
VBでは Left、Right、Mid辺りを扱えばだいたいの事ができましたが....
恐るべしchar型って感じですね。 (C++のStringクラスは扱いやすいですが)
 現在は,猫でもわかる...のC言語編を100章ぐらいまでこなしてからWindowsSDKプロ
グラミングに挑戦中です。
C/C++をやってみると、いかにVB(A)の暗黙的な型変換に助けられていたのかを思いし
らされました。C/C++では明示的な型変換(キャスト)をしないとだめなんですもんね。
(コンパイラにひどく怒られています...)でも楽しいですねー。メッセージフックや
サブクラス化についてもいい感じになってきています。
 というのもneptuneさんに背中を押してもらえた(勝手に思っています。)からだと
思っています。いつもありがとうございます。

 今参考にしているサイトは猫でもわかる...ぐらいしかないのですが、レスが盛ん
なこの質問箱みたいなサイト、VB(A)をプログラム言語の基礎として持つ人が見るのに
よさそうなサイトを紹介して頂けないでしょうか?普段はmougやVBレスキュー花ちゃん
、WinApi Database for VB Programmer,VB中学校あたりをよく見ています。C/C++でな
かなかこれは、というのを見つけられないももので..よろしくお願いします。

【58297】Re:ADO接続にて テーブル名の取得
発言  neptune  - 08/10/16(木) 22:06 -

引用なし
パスワード
   ▼みそじのおじさん さん:
こんにちは

すごい頑張ってますね。私なんかもう何年も殆ど進歩ないです。
C、C++に関しては私は万年初心者って所です。
>恐るべしchar型って感じですね。 (C++のStringクラスは扱いやすいですが)
私と同じ事思ってますね。でもC++等でADOやVBへの受け渡しなどをやると
今度はBSTRってのが出てきて更に混乱したりします。^ ^;
> 現在は,猫でもわかる...のC言語編を100章ぐらいまでこなしてから
>WindowsSDKプログラミングに挑戦中です。
私も猫で勉強させていただきました。
でも最近はVB2008,C#の無償版でボチボチ勉強しながら楽しんでます。
Cを少しかじっておくとC#も抵抗はないですね

>C/C++をやってみると、いかにVB(A)の暗黙的な型変換に助けられていたのかを思いし
>らされました。
これは為になりますよね。


>レスが盛んなこの質問箱みたいなサイト、VB(A)をプログラム言語の基礎
>として持つ人が見るのによさそうなサイトを紹介して頂けないでしょうか?
以前はもう少しあったんですが、
「らららのProgramersラウンジ 」の「VC++ラウンジ」
ht tp://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi
等はくらいしか私も知りません。

もうやってませんが、「VC++超初心者のHP」の過去ログは宝の山
ht tp://m--takahashi.com/bbs/pastlog/
ここはそろそろなくなるので、保存しておくと言う手も。
ちょうど、DB勉強してることだし。
textファイルに落として、そこからレコード追加していけばどうですか。
textファイルに落とすのはWebBrowserコントロールを使えば、簡単です。
単機能なのでVB2005、2008等のVBでも、C#でも使えば楽チンです。

一度にたくさん落とすと落とされる側は迷惑なのでその辺は適当に気を使って。
実は何年か前ですが、何回かに分けてやってしまいました。^ ^;
mdbで7〜80MB程度あります。

もうひとつ知っているかもしれませんが、
保存版を紹介しておきます。VB + C なら絶対知りたくなります。
[VB5] Visual Basic 5.0 から呼び出し可能な DLL の作成例
ht tp://support.microsoft.com/kb/410837/ja

お互い頑張りましょう。ボチボチと。

【58308】Re:ADO接続にて テーブル名の取得
お礼  みそじのおじさん  - 08/10/17(金) 19:30 -

引用なし
パスワード
   neptuneさん こんばんは

ためになるサイトのご紹介ありがとうございます。さっそくお気に入りに登録させてもらいました。活用させてもらいますね。

ADOにACCESSとくれば、neptuneさんが答えてくれるのでは、と思っていました。
(半分確信犯です....)neptuneさんに私の現況を報告したかったもので...すいません。最近はRS-232Cを用いて、工作機械とPC間のデータを送受信するソフトを作って
いました。VBAからは、MSCommが参照できないので、APIの完全武装になってしまいましたが(portのオープンやら、通信設定まで)、開通した時のあの喜び....これだからプログラミングはやめれませんね。目下の目標は、自分で使用しているフリーソフトすべてを自作の物にしようと奮闘しています。
 また何かあった時はよろしくお願いします。

4126 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free