« override | トップページ | ParentColor »

2007年6月12日 (火)

PropertyEditor

今日、vcl for PHPを確認してみたら、vcl_for_php_07_06_10.tar.gzがupされてたので、さっそく中身を見てみた。
例のbuildqueryの中で、特定のDBの場合に対するコードが追加されていた。
今のところoci8だけのようなので、これは前にforumで文句言ったからさっそく反映してくれたのか!と思ったら、

またエラーが出てますよ。

テストした? ('A`)

回避方法は、LimitCountとLimitStartをいずれも-1に。
でもこのプロパティ、使う意味あるのかなStoredProcで・・・。強制的にoci8用コードの中で-1にすればいいのに。

さて、前回触れたQueryですが、Oracleのバインド変数を使う場合、ADODBのSelectLimitの第四引数で指定してあげるといいらしい。
でもdbtables.inc.phpのexecutelimitファンクション(databaseクラス)の中のSelectLimitではそれを指定していません。

そこで、考えたのは新しいプロパティを作り、そこでバインド変数へ渡す値を書けばいいかなと。
Paramsと同じような感じのにしたいので、いわゆるDelphi for win32で言うところのTStrings的なヤツですね。

新しいプロパティを作るには、packageファイルにregisterPropertyEditorを追加します。
TStrings的なヤツの場合はTStringListPropertyEditorなので、以下の通り。

registerPropertyEditor("OraQuery","ParamByNames","TStringListPropertyEditor","native");
※OraQueryはQueryを継承してアテクシが作ったクラス。

次にincファイルの、「class OraQuery extends Query」の中に、以下のコードを書きます。
※この場合、OraQuery.inc.php

protected $_parambynames=array();
function getParamByNames() { return $this->readParamByNames(); }
function setParamByNames($value) { $this->writeParamByNames($value); }

function readParamByNames(){return $this->_parambynames;}
function writeParamByNames($value) {$this->_parambynames=$value;}

function defaultParamByNames() { return array();}


赤字のgetとsetのところが、publishedなプロパティin IDEらしい。
これが無いとObjectInspectorに出ないお。
※最初書いた時これに気が付かず、半日悩んだあげくnews groupで質問したアテクシ。

つまりObjectInspectorに出したくないプロパティの場合、これを書かなければいいかもしれない。


というような手順で追加したParamByNamesプロパティですが、どういう風に使うかと言うと、例えば以下のようなSQLの場合、

SELECT IDX, HOGE FROM T_TEST WHERE INX = :IDX AND HOGE = :HOGE

ObjectInspectorに書く場合、

------------------
IDX,111
HOGE, hoge123
------------------
のように、最初に変数名を書いて、その後に値。


直接コードで書く場合、
------------------
$param= array();
$param["IDX"] = 111;
$param["HOGE"] = "hoge123";

$this->OraQuery1->ParamByNames = $param;
------------------
てな感じになります。
注意するのはParamsも同じですが、必ず変数に先に入れないと駄目ぽ。

ちなみにプロパティエディタは、Delphiを持ってれば自分で自作も可能らしい。
PHPでも書くことが出来るようです。


以上のコンポーネントはコンポーネント置き場に入ってます。

|

« override | トップページ | ParentColor »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/70189/15405586

この記事へのトラックバック一覧です: PropertyEditor:

« override | トップページ | ParentColor »