Ultra Light は、テーブルのローを一度に 1 つずつアプリケーションに公開します。ULTable オブジェクトにはカレント・ポジションがあります。カレント・ポジションは、テーブルのローの上、最初のローの前、または最後のローの後ろになります。
アプリケーションがロケーションを変更すると、Ultra Light はバッファにそのローのコピーを作成します。値を取得または設定する操作はすべて、このバッファにあるデータのコピーにのみ影響します。データベースのデータには影響しません。
次の文は、バッファの最初のカラムの値を 3 に変更します。
tCustomer.setInt( 1 , 3 ); |
Ultra Light モードによって、バッファ内の値を使用する目的が決まります。Ultra Light には、デフォルト・モードに加えて、次の 4 つの操作モードがあります。
挿入モード ULTable.insert メソッドを呼び出すと、バッファ内のデータが新しいローとしてテーブルに追加されます。
更新モード ULTable.update メソッドを呼び出すと、現在のローがバッファ内のデータに置き換えられます。
検索モード ULTable.find メソッドの 1 つが呼び出されたときに、値がバッファ内のデータに正確に一致するローの検索に使用されます。
ルックアップ・モード いずれかの ULTable.lookup メソッドが呼び出されたときに、バッファ内のデータと一致するか、それより大きい値のローを検索します。
更新するローに移動します。
テーブルをスクロールするか、find メソッドや lookup メソッドを使用して検索し、ローに移動できます。
更新モードを開始します。
たとえば、次の指示は、tCustomer テーブル上で更新モードを開始します。
tCustomer.updateBegin(); |
更新するローの新しい値を設定します。
たとえば、次の指示は新しい値を Elizabeth に設定します。
tCustomer.setString( 2, "Elizabeth" ); |
Update を実行します。
tCustomer.update(); |
更新操作が終了すると、直前に更新したローが現在のローになります。ULTable オブジェクトを開いたときに指定したインデックスのカラム値を変更した場合は、現在の位置は不確定です。
デフォルトでは、Ultra Light は autoCommit モードで動作するため、更新は永続的な記憶領域のローに即時適用されます。autoCommit モードを無効にした場合は、コミット操作を実行するまで、更新は適用されません。autoCommit モードの詳細については、トランザクションの管理を参照してください。
ローのプライマリ・キーを更新しないでください。代わりに、ローを削除して新しいローを追加してください。
ローの挿入手順は、ローの更新手順とほぼ同じです。ただし、挿入操作の場合は、テーブル内の特定のローにあらかじめ指定する必要はありません。ローは、テーブルを開くときに使用したインデックスで自動的にソートされます。
挿入モードを開始します。
たとえば、次の指示は、CustomerTable テーブル上で更新モードを開始します。
tCustomer.insertBegin(); |
新しいローの値を設定します。
カラムの値を設定しない場合、そのカラムにデフォルト値があるときはデフォルト値が使用されます。カラムにデフォルト値がない場合は、NULL が使用されます。カラムが NULL を許可しない場合は、次のデフォルトが使用されます。
数値カラムの場合は 0
文字カラムの場合は空の文字列
明示的に値を NULL に設定するには、setNull メソッドを使用します。
colID = tCustomer.schema.getColumnID( "id" ); colFirstName = tCustomer.schema.getColumnID( "fname" ); colLastName = tCustomer.schema.getColumnID( "lname" ); tCustomer.setInt( colID, 42 ); tCustomer.setString( colFirstName, "Mitch" ); tCustomer.setString( colLastName, "McLeod" ); |
挿入を実行します。
挿入されたローは、Commit を実行したときに永続的にデータベースに保存されます。autoCommit モードでは、Insert メソッドの一部として Commit が実行されます。
tCustomer.insert(); |
挿入モードや更新モードに対応する削除モードはありません。
次のプロシージャは、ローを削除します。
削除するローに移動します。
削除を実行します。
tCustomer.deleteRow(); |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |