LoginSignup
0
0

More than 5 years have passed since last update.

VB.NETでInterSystems Cache'からデータを読み出す方法

Last updated at Posted at 2018-08-29

InterSystems Cache'側の準備
Cache’アイコン→スタジオを起動
20180829-1.PNG
ファイル→新規作成→Cache'クラス定義を選択
20180829-2.PNG
クラス名(=テーブル名)を入力(ここではUser.Main.TestClass)
20180829-3.PNG
%Persistentを選択して完了
User.Main.TestClassに以下のコードを入力

TestClass.cls
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
}
}

20180829-4.PNG

・データの入力(VB.NETを使って)
前回記事参照
https://qiita.com/torisan_/items/7ad7123409aa27b8c0f0
Visual StudioでObjectBindingでTestClassを出したVB.NETのコードを出力し、取り込んで、(フォームアプリケーションのForm1にボタンを作り)、レコードを作成する。

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

このように2レコードが追加される。
20180829-6.PNG

ボタンをもう一つつくり、Form1のButton2について次のように記述する。

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をする、という方法で、個々のレコードにアクセスします。

20180829-7.PNG

このプログラムでは、Sakuraiさんだけを入力したので、検索条件に合うので2レコードとも出力されましたが、違う名前が入っていると読み出されなくなります。(抽出機能)すべてのレコードを読み出したいときは、


Name_param1.Value = ""

と記述すれば読み出せます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0