3

データベース列の値であるフィールドがデータウィンドウにあるとします([挿入]> [列])。保護する必要がある条件があります([プロパティ]>[一般]>[保護])。

保護するときは、フィールドの背景を灰色にします。現時点では、これを行う方法を理解する唯一の方法は、どんなに複雑であっても、保護条件をコピーし、色の値を1(保護)と0(保護しない)に置き換えることです。

列の保護値を参照する列の背景色の[式]フィールドで使用できる構文はありますか?私は試した

if(column.protect = 1、Grey、White)

ただし、TRUE/FALSE条件を予期しているというエラーが返されます。

私が不可能だったのはそれなのか、それとも正しい構文を取得するだけの問題なのか。

乾杯。

4

1 に答える 1

6

わお。あなたは複雑で階層化された質問が好きです。

最初の問題は値へのアクセスですが、これは説明したほど直接は行われません。実際のところ、Describe()を使用して値を取得します。これに関する唯一の問題は、引用符が付いた次の形式の文字列として返されることです(〜tがタブである標準のPowerScript文字列表記を使用していることに注意してください)

"<DefaultValue>~t<Expression>"

式が必要なので、引用符も削除して解析する必要があります。

式を取得したら、指定された行について式を評価する必要があります。これは、別のDescribe()呼び出しで実行できます。特に、次のようになります。

Describe ("Evaluate('<expression>', <rownum>)")

式が評価されている行番号は、GetRow()関数で取得できます。

これには、PowerScriptといくつかの中間値ストレージが必要なように聞こえるかもしれませんが、特定の値を複数回取得するために冗長な関数呼び出しを実行する場合は、次のような式でこれを行うことができます(例の列b)::

if (Describe ("Evaluate (~"" + Mid (Describe ("b.protect"), 
Pos (Describe ("b.protect"), "~t")+1, 
Len (Describe ("b.protect")) -  Pos (Describe ("b.protect"), "~t") - 1) 
+ "~", " + String (GetRow()) + ")")='1', 
rgb(128, 128, 128), 
rgb(255,255,255))

これは複雑に見えますが、結果を確認できるようにMid()式を計算フィールドに配置すると、Protect式を解析して、上記のDescribe(Evaluate())構文に配置するだけであることがわかります。

簡単にするために、コードに1つのチート入れました。Protect式には一重引用符しかないという知識を使用し、Evaluate()式の文字列を二重引用符で囲むことにしました。これを任意の列に対して一般的に実行しようとしていて、Protect式に二重引用符がないことを想定できない場合は、グローバル関数を使用して、Protect式の二重引用符をエスケープされた引用符に置き換える必要があります。 (〜 ")、これはあなたのコードがトリプルチルダと引用符のように見えると私は信じています。グローバル関数呼び出しを行い(行が多い場合、式でのグローバル関数呼び出しはパフォーマンスに大きな影響を与える可能性があることに注意してください)、Describe( "column.protect")とGetRow()を渡して、 PowerScriptの式全体。これにより、理解と保守が容易になります。

幸運を、

テリー。

于 2010-01-29T06:35:09.743 に答える