2

説明レポートを作成するために、さまざまな場所のさまざまなフィールドのデータを含む、複雑な文字列の長いリストを作成する必要があります。Access 2010 で私が思いついた唯一の方法は、表示する文字列を構成するために使用されるフィールド名と共に、テキスト部分をテーブルに保存することです (図の line1 式を参照)。簡単に言うと:

//field A contain a string with a field name:
A = "[Quantity]"
//query expression:
=EVAL(A) 
//return error instead the number contained in field [Quantity], present in the query dataset

フィールド (A) で EVAL を実行して、フィールド A に含まれる名前のフィールド (B) の値を取得することを考えましたが、機能していないようです。存在する方法はありますか?

例 (非常に単純化): フィールドの値を取得するために、他のフィールド名を含むフィールドを EVAL するサンプル クエリ

何か案が?PS: 母国語ではなく英語で申し訳ありません。

4

1 に答える 1

2

別のフォーラムで興味深い回避策を見つけました。他の人も EVAL を使用して同じ問題を抱えていましたが、REPLACE 関数を使用して文字列をフィールドの内容に置き換えることができることがわかりました。

REPLACE("The value of field Quantity is {Quantity}";"{Quantity}";[Quantity])

( {} はわかりやすくするためにのみ使用されます。置換される単語が文字列内で比較されないことがわかっている場合は必要ありません)。このコードをクエリで使用し、使用したいフィールドと同じ数の REPLACE をネストします。

REPLACE(REPLACE("<Salutation> <Name>";"<Salutation>";[Salutation]);"<Name>";[Name])

フィールド名を文字列に埋め込んで、クエリでそのフィールドの現在の値に置き換えることができます。もちろん、後者の例は連結 (&) を使用してより簡単に実行できますが、文字列がハードコーディングされたフィールドではなくフィールドに含まれている場合は、必要に応じてレコードにリンクできます。

REPLACE(REPLACE([DescriptiveString];"[Salutation]";[Salutation]);"[Name]";[Name])

さらに、次のようにコンテキストベースの複雑な文字列を作成することもできます。

REPLACE(REPLACE(REPLACE("{Salutation} {Name} {MaidenName}";"{Salutation}";[Salutation]);"{Name}";[Name]);"{MaidenName}";IIF(Isnull([MaidenName]);"";[MaidenName]))

難しい部分は、文字列に挿入したいすべてのフィールドのプレースホルダー ({Quantity}、{Salutation}、{Name}、{MaidenName} など) を REPLACE 呼び出しで列挙することですが、EVAL を使用すると、この退屈な部分を回避できます。それが機能していれば。

私ほどきれいではありませんが、機能します。

于 2016-04-08T18:25:52.363 に答える