「これはヤバかったな」という遅刻エピソード

コーディング設計の質問です。
Oracle10gのDBに以下のテーブルがあります。
テーブル名:TEST_TABLE
カラム名:CODE, NAME

これから値を取得する際以下の方法をとっているのですが、VBA的に変なやり方ではないでしょうか。

クラスモジュール:TestDao, TestBean
ExcelObjects-----------------
Set ArrayList = TestDao.GetSQLResult(Conn, "検索条件", "0")
For i = 1 To ArrayList.Count Step 1
Set Bean = New TestBean
Set Bean = ArrayList.Item(i)
Call Draw(Sheet, Bean, 1, 1)
Row = Row + 1
Set Bean = Nothing
Next i
描画メソッド--------
Private Sub Draw(ByVal Sheet As Object, _
ByVal Bean As Object, _
ByVal Row As Integer, _
ByVal Col As Integer)
Sheet.Cells(Row, Col).Select
ActiveCell.FormulaR1C1 = Bean.GetCode()
Sheet.Cells(Row, Col + 1).Select
ActiveCell.FormulaR1C1 = Bean.GetName()
End Sub

JAVAに触った方ならわかると思うのですが、
TestDaoにはSQL文を記述・実行し、取得した結果を格納する。
TestBeanにはテーブルのカラムのプロパティを配置しています。

VBAの場合、こういったクラスを作成する必要はありますでしょうか。
(より良いやり方はありますでしょうか)

A 回答 (1件)

先ず、S2で言うDAOとVBAで言うDAOは全然別物です。


それにS2だからBeanを使える(S2がセッタを呼び出してくれる)ので
あって、S2を利用できない環境では誰がネタを仕込んでくれると言う
のでしょう?
ADOによるDBアクセスを参照する方が良いでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>誰がネタを仕込んでくれると言うのでしょう?
S2DaoなどO/Rマッピングツールは使用していません。
BeanもDaoも全て自前で作りました。

>ADOによるDBアクセスを参照する方が良いでしょう。
的外れなことを言っていたら申し訳ありません。

色々調べたのですが、ADOはDB接続を簡単にしてくれるだけでDaoやエンティティといった思想はないですよね。
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …

(ADOの役割?)
Set Conn = CreateObject("ADODB.Connection")
Conn.Open "Provider=MSDAORA;" & "Data Source=" & _
oracle_sid & ";", oracle_user, oracle_password
'Set ResultSet = Conn.Execute(Sql)
'Set Bean = New TestBean
'Bean.SetCode = ResultSet(0).Value
'ArrayList.Add(Bean)
'Set ResultSet = Nothing
'Conn.Close
'Set Conn = Nothing

ですのでデータベース層とロジック層を切り分ける手段にどのようなものがあるのかと考え質問しました。

お礼日時:2009/12/14 15:20

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