COM経由でCache'
Objectを使用する
Use Cache' Object by COM.
Cache'
オブジェクトはCOM経由でのアクセスが可能とのことで、VBやExcelからCOMを経由してアクセスすることができるようです。
最近、個人的に操作の自動化で使用することが多いuwscもCOMが使えるとのことで、uwscのCOMからCache'のオブジェクトにアクセスすることができるのか試してみました。
uwscの簡単な導入
uwscをダウンロードし、解凍ソフトで解凍します。
uwsc.exeを実行します。 開くボタンからsample.uwsを開くと、サンプル動作を見ることができます。
uwscの使い方やサンプルは、Cache'と違ってネット上に沢山公開されていますので情報に困ることはないと思います。
Cache’への接続
テキストファイルを新規作成し、ファイル名をcache_test.uwsに変更します。 次に
メモ帳などのテキストエディタで以下のように記述します。
cfa = CreateOleObj("CacheActiveX.Factory")
// Cache接続のCOMオブジェクトを作成
str = cfa.ConnectDlg()
// Cacheへの接続ダイアログを表示
MsgBox(str)
//接続ダイアログの結果をメッセージボックスで表示
uwscからcache_test.uwsを開くと、Cache'の接続ダイアログが表示されます。
(COMにアクセスするために、Cache'のクライアントキットがインストールされている必要があります。)

この画面で接続先を選択し[OK]を押すと、メッセージボックスが表示されます。
 この文字列はcache'への接続文字列となり、 VisMの接続文字列と同一のようです。
接続先が決まっている場合は、接続文字列をConnect()関数に渡すことでダイアログを出すことなく接続が可能です。
Cache'Objectへアクセス
Cache' COMオブジェクトの説明はドキュメント内、 Caché
ActiveX API リファレンスにあります。 リファレンスによると、オブジェクトインスタンスの新規作成 (New)、検索 (DynamicSQL,
ResultSet)、開く (OpenId)、変更 (インスタンスプロパティの値を変更)、保存 (インスタンスを%Save)
とひと通りの操作がこれでできるようです。 いくつかの操作を試すuwscマクロを記述してみました。
cfa=CreateOleObj("CacheActiveX.Factory")
//s=cfa.ConnectDlg() // ->
cn_iptcp:localhost[1972]:TEST1
rev=cfa.Connect("cn_iptcp:localhost[1972]:SAMPLES")
//引数はConnectDlg()の戻り値
ifb rev=false then
MsgBox("接続に失敗"); EXIT
endif
//クエリの実行
crs=cfa.ResultSet("Cinema.Film","TopFilms")
rev=crs.Execute()
ifb
rev="True" then //戻り値がなぜか文字列
while crs.Next()
PRINT crs.Get("ID") +
" :: " + crs.Get("Description")
//PRINTで結果表示
wend
endif
cfa.Disconnect()
SLEEP(10)
EXIT
このuwscマクロを実行してみると以下のようにCinema.FilmオブジェクトのTopFilmsクエリの結果が表示されます。
システム管理ポータルから同じTopFilmsクエリを実行してみます。

同じ結果が表示されていることから、正しく動作していることが確認できました。
ダイナミックSQLの実行
以下のような記述で、ダイナミックSQLを実行することができました。
//ダイナミックSQLの実行
crs=cfa.DynamicSQL("SELECT COUNT(*) as CNT
FROM Cinema.Film WHERE Title='CARS'")
rev=crs.Execute()
ifb rev="True"
then //戻り値がなぜか文字列?
while crs.Next()
Count=crs.Get("CNT")
PRINT
"Count : " + Count wend
endif
インスタンスの作成・保存・削除
以下のような記述で、インスタンスの新規作成・保存・削除を行うことができました。
// インスタンスの作成、保存、削除
PRINT "新規作成中"
film = cfa.New("Cinema.Film")
// 新規インスタンス film // 各プロパティに値を設定
film.Title = "CARS"
film.Description = "2006 American animated family film
produced by Pixar and directed by both John Lasseter and Joe Ranft."
film.Category = 2
film.Length = 90
rev=film.%Save()
// 保存を実行
ifb rev<>"" then
MSGBOX(rev)
else id
= film.%Id() // IDを取得
film=""
// インスタンスを解放
PRINT "保存成功 id = "+id
// クラスメソッドの実行 -- オブジェクトの削除
classmethod = cfa.Static("Cinema.Film")
rev=classmethod.%DeleteId(id)
PRINT "削除:" + rev
endif
COMはOfficeマクロ、Visual Studio、各開発環境などで利用できるので、(Windows環境では)
ものすごく利用範囲が広いとおもいます。
|