Create  Edit  Diff  Phillro Industries  Index  Search  Changes  History  Source  RSS  Note  wikifarm  Login

RDB::ClientDataSet

RDB::ClientDataSet

RDB::ClientDataSet は、じつは、物理的なデータベースとは無関係にも使えます。じっさい、dir_to_datasetは物理的なデータベースとは無関係です。

RDB::ClientDataSet は、実際のデータベースへの接続を別のプロバイダ?オブジェクト(set_providerメソッド)に任せて、そこから取得したデータをメモリ上に保管して、外部に対しては普通のデータセットのように振る舞う、ということをします。

プロバイダオブジェクトが提供するデータセットは単方向(上から下へ流れるだけ)のデータセットでも構いません。というか、BDE の RDB::DataSet から dbExpress の RDB::SQLDataSet に変ったときに、双方向の(自前でデータを保管する)データセット(DataSet)から単方向(SQLDataSet)に変わりました。よって、SQLDataSet とは別のオブジェクトで双方向性を確保する必要が出てきた。そのためのオブジェクトが RDB::ClientDataSet だともいえます。

RDB::DBGridなどで表示するためには、双方向のデータセットでなければなりません。従って、SQLDataSet では NG なのです。

メソッド一覧

require "phi"
require "methods_for_wiki"
require "rdb/dbx"
puts RDB::ClientDataSet.methods_for_wiki

[] => RDB::DataSet#[]

[]= => RDB::DataSet#[]=

_dump => Phi::Component#_dump

active

active=

active?

active_ex => RDB::DataSet_ex#active_ex

active_ex= => RDB::DataSet_ex#active_ex=

add_index

after_apply_updates

after_apply_updates=

after_cancel

after_cancel=

after_close

after_close=

after_delete

after_delete=

after_edit

after_edit=

after_execute

after_execute=

after_get_params

after_get_params=

after_get_records

after_get_records=

after_insert

after_insert=

after_open

after_open=

after_post

after_post=

after_refresh

after_refresh=

after_row_request

after_row_request=

after_scroll

after_scroll=

aggregates

aggregates=

aggregates_active

aggregates_active=

aggregates_active?

append => RDB::DataSet#append

apply_updates ( max_errors ) : error_count

apply_updates メソッドは,データベースへの書き込みのために,更新,挿入,削除されたすべてのレコードをクライアントデータセット?からプロバイダ?に送ります。

* ユーザからのデータセットへの変更は、RDB::DataSet#post で変更ログ?に入り、apply_updates で実際にデータベースに書き込まれる。

* 書き込むべきデータがあるかどうかは RDB::ClientDataSet#change_count を調べればよい。

引数:

max_errors は,何回エラーが発生すると更新処理が中止されるかを示します。max_errors を -1 に設定すると,エラー数は無制限です。

戻り値:

apply_updates は発生したエラーの数を返します。

auto_calc_fields

auto_calc_fields=

auto_calc_fields?

before_apply_updates

before_apply_updates=

before_cancel

before_cancel=

before_close

before_close=

before_delete

before_delete=

before_edit

before_edit=

before_execute

before_execute=

before_get_params

before_get_params=

before_get_records

before_get_records=

before_insert

before_insert=

before_open

before_open=

before_post

before_post=

before_refresh

before_refresh=

before_row_request

before_row_request=

before_scroll

before_scroll=

before_scroll イベントは,アプリケーションがあるレコードから別のレコードへスクロールする前に発生します。

* DBGrid などでカーソルのある行が上下に移動した場合に発生する。

グリッドが上下したタイミングでデータベースに書き込むなら次のようなハンドラを書けばよい。

   dataset.before_scroll=proc{|sender|
     if [RDB::DS_EDIT,RDB::DS_INSERT].include? sender.state
       sender.post
     end
     if sender.change_count != 0
       sender.apply_updates
     end
   }

bof? => RDB::DataSet#bof?

bookmark => RDB::DataSet#bookmark

cancel => RDB::DataSet#cancel

change_count

change_count プロパティは,変更ログ内の変更の数を示します。

close => RDB::DataSet_ex#close

command_text

command_text=

component_count => Phi::Component#component_count

components => Phi::Component#components

connection_broker

connection_broker=

constraints

constraints=

create_data_set

data_set_field

data_set_field=

data_type_to_s => RDB::DataSet_ex#data_type_to_s

data_types => RDB::DataSet_ex#data_types

delete => RDB::DataSet#delete

disable_controls => RDB::DataSet#disable_controls

disable_string_trim

disable_string_trim=

disable_string_trim?

display => RDB::DataSet_ex#display

each => RDB::DataSet_ex#each

edit => RDB::DataSet#edit

eof? => RDB::DataSet#eof?

event_handle => RDB::DataSet#event_handle

extend => Phi::Persistent#extend

fetch_on_demand

fetch_on_demand=

fetch_on_demand?

field_defs

field_defs=

fields => RDB::DataSet#fields

file_name

file_name=

filter

filter=

filter_options

filter_options=

filtered

filtered=

filtered?

find_key

find_nearest

first => RDB::DataSet#first

index_defs

index_defs=

index_field_names

index_field_names=

index_name

index_name=

index_names

insert => RDB::DataSet#insert

inspect => RDB::DataSet_ex#inspect

last => RDB::DataSet#last

list => RDB::DataSet_ex#list

load

load_from_file

locate => RDB::DataSet#locate

locate_ex => RDB::DataSet_ex#locate_ex

master_fields

master_fields=

master_source

master_source=

move_by => RDB::DataSet#move_by

name => RDB::DataSet#name

name= => RDB::DataSet#name=

next => RDB::DataSet#next

object_view

object_view=

object_view?

on_calc_fields

on_calc_fields=

on_delete_error

on_delete_error=

on_edit_error

on_edit_error=

on_filter_record

on_filter_record=

on_new_record

on_new_record=

on_post_error

on_post_error=

on_reconcile_error

on_reconcile_error=

open => RDB::DataSet_ex#open

packet_records

packet_records=

params

params=

post => RDB::DataSet#post

prior => RDB::DataSet#prior

prop_info => Phi::Component#prop_info

provider_name

provider_name=

read_only

read_only=

read_only?

refresh => RDB::DataSet#refresh

remote_server

remote_server=

save

* 現在は save_to_file と同じ。本来は Stream への保管も可能のはず?

save_to_file ( file_name , format )

save_to_file メソッドは,クライアントデータセットのデータを外部ファイルに保存します。

save_to_file メソッドを呼び出すと,このクライアントデータセットまたはほかのクライアントデータセットが後で使えるように,クライアントデータセットのデータを外部ファイルに書き込むことができます。

file_name は,使用する外部ファイルの名前です。ファイルがすでに存在する場合は,ファイルの現在の内容は上書きされます。file_name パラメータに空の文字列が渡された場合(またはこのパラメータが省略された場合),データは,file_name プロパティで指定したファイルに保存されます。

format は,Phi-DataPacketFormat でバイナリ(RDB::DF_BINARY),XML(RDB::DF_XML),または UTF8 ベースの XML(RDB::DF_XMLUTF8)など,データの保存に使うフォーマットを示します。

* XML の形式でデータセットをファイルに保管することができるということです。

set_provider

sql_params => RDB::DataSet_ex#sql_params

sql_params= => RDB::DataSet_ex#sql_params=

sql_text => RDB::CommandTextDataSet#sql_text

sql_text= => RDB::CommandTextDataSet#sql_text=

state => RDB::DataSet#state

store_defs

store_defs=

store_defs?

struct => RDB::DataSet_ex#struct

table_name => RDB::CommandTextDataSet#table_name

table_name= => RDB::CommandTextDataSet#table_name=

to_a => RDB::DataSet_ex#to_a

to_s => RDB::DataSet_ex#to_s

value => RDB::DataSet_ex#value

values => RDB::DataSet_ex#values

write_res_file => Phi::Component#write_res_file