リンク
インターシステムズ(日) └日本語ドキュメント インターシステムズ(US) (有)エムブイビイ ダイナシステム(株) Googleグループ(英語) Googleグループ(日本語) George James Software cache'infoアーカイブ 【広告】
|
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オブジェクトを作成
uwscからcache_test.uwsを開くと、Cache'の接続ダイアログが表示されます。
(COMにアクセスするために、Cache'のクライアントキットがインストールされている必要があります。)str = cfa.ConnectDlg() // Cacheへの接続ダイアログを表示 MsgBox(str) //接続ダイアログの結果をメッセージボックスで表示 この画面で接続先を選択し[OK]を押すと、メッセージボックスが表示されます。 この文字列はcache'への接続文字列となり、VisMの接続文字列と同一のようです。 接続先が決まっている場合は、接続文字列をConnect()関数に渡すことでダイアログを出すことなく接続が可能です。 Cache'Objectへアクセス
Cache' COMオブジェクトの説明はドキュメント内、Caché
ActiveX API リファレンスにあります。
リファレンスによると、オブジェクトインスタンスの新規作成(New)、検索(DynamicSQL, ResultSet)、開く(OpenId)、変更(インスタンスプロパティの値を変更)、保存(インスタンスを%Save) とひと通りの操作がこれでできるようです。 いくつかの操作を試すuwscマクロを記述してみました。
cfa=CreateOleObj("CacheActiveX.Factory")
このuwscマクロを実行してみると以下のようにCinema.FilmオブジェクトのTopFilmsクエリの結果が表示されます。//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 システム管理ポータルから同じ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環境では) ものすごく利用範囲が広いとおもいます。 |