変化と追加情報
以下のトピックは、データベースと共にSenseTalkを使用する際に有用な、さまざまなアプローチと追加情報を提供します。
コネクションの開放と閉鎖
SenseTalkは、コネクション情報が提供され、table
expressionやデータベースからの情報が必要な他の表現が使用されると、自動的にコネクションを確立します。コネクションは、データベースからのテーブル情報やレコードデータが変数に入力されていない場合に閉じます。
しかし、データベースの接続を明示的に開いたり閉じたりすることも可能です。これは、open database
とclose database
のコマンドを使用して行います。
Open Database/ Close Database コマンド
動作: 明示的に指定したデータベース接続を開いたり閉じたりします。
通常、データベース接続はそれを参照する変数が使用中である限り開いたままになりますので、接続は通常、それらを作成するハンドラの終了時に閉じられ、あるいはそれよりも早く閉じられることがあります。 open connection
コマンドを使用して明示的に接続を開くと、他のスクリプトやハンドラへの呼び出し中も含めて、close connection
コマンドを使用して明示的に閉じられるまで開いたままになります。このアプローチは、データベースへの個別の接続の数を制限することが重要な場合、またはそのデータベースへの接続を確立することが特に時間のかかるプロセスである場合、効率性の観点から望ましいかもしれません。
パラメータ: データベース接続に必要なすべての情報を含むプロパティリスト。詳細については、データベース接続を参照。
例: ODBC
以下は、ODBCデータベース接続を開いて再度閉じる例です:
set myDB to {type:"odbc", DSN:"DataSource1", user:"root", password:""}
open database myDB
// Execute any database operations here
close database myDB
例: Excel
以下は、Excelデータベース接続を開いて再度閉じる例です:
set myExcelDB to {type: "excel", file: ResourcePath("MyCustomers.xlsx")}
open database myExcelDB
// Execute any database operations here
close database myExcelDB
データベース識別子
データベース接続が開かれると(open databaseコマンドにより明示的に、または必要に応じて自動的に)、それには一意の識別子が割り当てられます。
databaseIdentifier()
関数
動作: 指定したデータベースに関連付けられた一意の識別子を返します。
パラメータ: データベース参照(接続を定義する完全なプロパティリスト)。詳細については、データベース接続を参照。
例:
set myDB to {type:"odbc", DSN:"mySQLDB", user:"root", password:decodetext("AR@ts:%j")} -- Define a database conection
put the databaseIdentifier of myDB -- Returns empty if myDB isn't open
openDatabases()
関数
振る舞い: 現在開いているすべてのデータベース接続の識別子のリストを返します。
パラメータ: データベース参照(接続を定義する完全なプロパティリスト)。詳細については、データベース接続を参照。
例:
put the openDatabases
SQLを直接実行する
SQLデータベースに慣れているユーザーのために、任意のSQL文を直接実行するexecuteSQL()
関数が利用可能です。これは、選択文または他の情報を返す文のプロパティリストのリストを返します。情報を返さない操作を行うSQL文は、空のリストを返します。エラーは例外をスローします。
テーブルから1行以上を返すSQL select文の場合、executeSQL()
関数はSenseTalk record
オブジェクトを 返さない
ことに注意してください。この場合、返される値はデータベースとは無関係の普通のプロパティリストです。詳細については、Records vs. Property Listsを参照してください。
executeSQL 関数
値: executeSQL()
関数には、データベース接続と実行するSQL文の2つの値を渡す必要があります。
振る舞い: 指定したSQL文を直接実行し、プロパティリストを返します。
例:
この例では、データベース接続を定義し、そのデータベースに対してexecuteSQL()
関数を使ってSQLを直接実行します。
set myDB to {type:"odbc", DSN:"DataSource1", user:"root", password:""} -- Defines the database connection.
put executeSQL(myDB, "select * from Members") into listOfRowInformation -- Executes an SQL select statement against the defined database connection.
例:
この例では、データベースを定義し、executeSQL()
関数を使ってそのデータベースに対してSQLを実行します。ここではSQLのwhere句を使っています(これは機能的にはSenseTalkのwhere
expressionと同じです)。
set myDB to {type:"odbc", DSN:"qaDB", user:"testplant", password:"eggplant"} -- Database connection definition
put executeSQL(myDB, "select* from Members where language_id='1'") into listOfRowInformation -- Executes an SQL select statement against the database that selects all of the records for the table called "Members" where the column "language_id" contains a value of 1, and stores that information in the listofRowInformation variable.
自動対手動データベースの更新
データベースの更新はデフォルトで自動的に保存されます。しかし、autoSaveDatabaseUpdates
グローバルプロパティを使用すると、この設定を変更してデータベースの更新を手動にすることができます。