データベースへの書き込み
データベースへの書き込みは、データベース内のデータを操作することを意味します。書き込みにより、データベースの内容を変更できます。これは新しいデータの収集と保存、既存の情報の更新、または削除などを意味することがあります。これは、テストを通じてテスト対象のアプリケーションからデータを収集してさらなる分析のために使用する場合に有用です。
この操作が有用な一例は、ホテルを運営していて、ゲスト、部屋、ベッドに関する情報を含むデータベースを持ち、その情報を適切なサイズの部屋とゲストを関連付けることで操作したい場合です。また、テスト対象のアプリケーションからデータを収集したり、Eggplant Functionalのテスト結果自体を収集して未来の分析のために保存するためにデータベースを使用する場合にも有用です(さらなる自動化テストを経由して可能性があります)。
レコード vs. プロパティリスト
レコード
は通常のプロパティリストとは異なります。これはデータベースへのアクティブな接続を持つプロパティリストの一種です(Property Lists参照)。データベースの行に対応するプロパティリストが取得されると、それはレコード
として知られています。レコードは可視のプロパティに加えて、それが取得されたデータベーステーブルに関する隠れた情報も含んでいます。
単純に言えば、レコードはデータベーステーブルの行に接続を持つプロパティリストです。レコードのプロパティの値を変更すると、データベースの対応する値が直接更新されます。レコードにはデータベーステーブルのカラムに対応しないプロパティが割り当てられる場合がありますが、データベースのカラムでないプロパティが割り当てられたり変更されたりした場合、その値はレコードオブジェクト内だけで変更され、データベースには影響しません。
例:
この例では、データベーステーブルのレコードにアクセスしてログに記録し、実際にレコードがどのように見えるかを示します:
set myDB to {type:"odbc", DSN:"qaDB", user:"Ellen", password:"securePassword"} -- ODBCデータベース接続定義
put table "film" of myDB into myTable -- "film"データベーステーブルへの参照を変数myTableに格納
set Member to the record of myTable where title is "ACADEMY DINOSAUR" -- "film"テ ーブルの特定のレコードにアクセスして変数Memberに格納
Log Member -- Logs: {description:"A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies", film_id:"1", language_id:"1", last_update:"2017-06-28 15:47:10 -0700", length:"86", original_language_id:<missing value>, rating:"PG", release_year:"2006", rental_duration:"6", rental_rate:"3.99", replacement_cost:"20.99", special_features:"Deleted Scenes,Behind the Scenes", title:"ACADEMY DINOSAUR"}
テーブル間でのレコードのコピー
レコードが別の変数に割り当てられると、そのプロパティがすべてコピーされますが、コピーはデータベースへの接続を保持しません。これは、予期しない結果を避けるための設計です。データベースへの接続は、新しいコピーもレコードであるべきであることを示すas record
演算子を使用してコピーに保持することができます。
同じ効果は、元のレコードへの参照を作成することによって単一のレコードでも達成できますが、この手法はレコードのリストでは機能しません。as record
演算子の使用が推奨されます。
例:
set member to the record of memberTable where memberNumber is desiredMemNum -- メンバー変数はデータベースへの接続を持っています
put member into newMember -- newMemberはデータベースへの接続を持っていません
put member as record into member2 -- member2はデータベースへの接続を持っています
レコード演算子
is a record
演算子は、値がデータベースへの接続を持つ実際のレコードか、単にプロパティリストかをテストするために使用できます。これは、データベース接続を使用するSenseTalkスクリプトのトラブルシューティングに役立ちます。
例:
Set myDB to {type:"Excel", file:"~/Desktop/ClubData.xlsx", Writable:yes} -- データベース接続を定義します。ExcelまたはODBCです。
put table "Members" of myDB into MemberTable-- 修正する必要のあるテーブルの参照情報を取得します
put {NameFirst:"Heidi", NameLast:"Mullers", StartDate:"2019-01-02"} into MemberToAdd -- これは、データベーステーブルに複数のメンバーを追加する場合に、反復子を使用して再帰的に行うこともできます
add record MemberToAdd to table "Members" of myDB -- データベースのテーブルにレコードを追加します
Put the Record of MemberTable where "NameFirst" is "Heidi" into member3-- ちょうど追加したレコードを取得して変数に格納します
if member3 is a record then log "Success!" -- レコードが実際のレコードで、アクティブなデータベース接続を持っていることを確認します