InterSystems Cache'側の準備
Cache’アイコン→スタジオを起動
ファイル→新規作成→Cache'クラス定義を選択
クラス名(=テーブル名)を入力(ここではUser.Main.TestClass)
%Persistentを選択して完了
User.Main.TestClassに以下のコードを入力
Class User.Main.TestClass Extends %Persistent
{
Property name As %String;
// field name 1
Property age As %Numeric;
// field name 2
Query ByName(str As %String = "") As %SQLQuery(CONTAINID = 1, SELECTMODE = "RUNTIME") [ SqlName = SP_TestClass_By_Name, SqlProc ]
{
SELECT *
FROM TestClass
WHERE (name %STARTSWITH :str)
ORDER BY ID
}
}
・データの入力(VB.NETを使って)
前回記事参照
https://qiita.com/torisan_/items/7ad7123409aa27b8c0f0
Visual StudioでObjectBindingでTestClassを出したVB.NETのコードを出力し、取り込んで、(フォームアプリケーションのForm1にボタンを作り)、レコードを作成する。
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim cacheConnectStr As String = "Server = localhost; Port=1972;" +
"Log File = C:\VSProject\NewCarte\NewCarte\NewCarte\bin\NewCarte.log; Namespace = USER;" +
"Password = yourpass; USER ID = yourid"
Dim cnCache As CacheConnection = New CacheConnection(cacheConnectStr)
cnCache.Open()
Dim d As User.Main.TestClass
d = New User.Main.TestClass(cnCache)
d.name = "Sakurai Ichiro"
d.age = 25
d.Save()
d.Close()
d = New User.Main.TestClass(cnCache)
d.name = "Sakurai Jiro"
d.age = 32
d.Save()
d.Close()
d.Dispose()
cnCache.Close()
End Sub
End class
ボタンをもう一つつくり、Form1のButton2について次のように記述する。
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim cacheConnectStr As String = "Server = localhost; Port=1972;" +
"Log File = C:\VSProject\NewCarte\NewCarte\NewCarte\bin\NewCarte.log; Namespace = USER;" +
"Password = yourpass; USER ID = yourid"
Dim cnCache As CacheConnection = New CacheConnection(cacheConnectStr)
cnCache.Open()
'Cache'内のコマンドを呼び出す方法(ここではByName関数を呼び出している。)
Dim cmd1 As CacheCommand
cmd1 = User.Main.TestClass.ByName(cnCache)
Dim Name_param1 As CacheParameter = New CacheParameter("name", CacheDbType.NVarChar) '読みだしたいフィールドの指定。パラメータにしてよい
Name_param1.Value = "Sakurai" '該当氏名を検索
cmd1.Parameters.Add(Name_param1) '検索条件をパラメータに追加 "name = "Sakurai""
Dim reader1 As CacheDataReader = cmd1.ExecuteReader() 'BasicPatientInformationの中でptidは一意
'読み出し用。OpenIdで既存のレコードと結び付けられるので、Newは不要
Dim d1 As User.Main.TestClass
'データがある分だけ読み出す。ここでは2個
Dim id As String
While reader1.Read()
id = reader1(reader1.GetOrdinal("ID")).ToString() 'データが格納された先頭からID番号を拾う
d1 = User.Main.TestClass.OpenId(cnCache, id) 'ID番号でデータベースにアクセスする
MsgBox(d1.Id + " " + d1.name + " " + CStr(d1.age))
End While
End Sub
実行結果は次の通り。ここではMsgBoxで表示するだけですが、この読み取ったデータから、登録されたID番号を知ることができ、このIDでOpenIdをする、という方法で、個々のレコードにアクセスします。
このプログラムでは、Sakuraiさんだけを入力したので、検索条件に合うので2レコードとも出力されましたが、違う名前が入っていると読み出されなくなります。(抽出機能)すべてのレコードを読み出したいときは、
Name_param1.Value = ""
と記述すれば読み出せます。