1

iif ステートメント (つまり: ) を使用して、ある列データの状態を別の列データに変更しようとしていますiif([major]="eet","electronic engineering technology")

PLS というグループに新しいメジャーを追加するまで、式が複雑すぎることを示すボックスが表示されるまで、動作するようになりました。

私がそれを取り出すと、うまくいきます。アクセスする iif ステートメントの量に制限はありますか?

Majors: IIf([Major]="EET","Electronics Engineering Technology",
IIf([Major]="DMA","Digital Media Arts Technology",
IIf([Major]="BAM","Business Administration - Management ",
IIf([Major]="Ess","Industrial Electronics Technology - Electronic Security Systems",
IIf([Major]="FMT","Facilities Management Technology",
IIf([Major]="FMTC","Facilities Management Technology Certificate",
IIf([Major]="HIT","Health Information Technology",
IIf([Major]="HSE","Human Services",
IIf([Major]="HVAC","Heating, Ventilation, Air Conditioning and Refrigeration Technology",
IIf([Major]="IENET","Industrial Electronics Technology - Computer and Networking Track",
IIf([Major]="Auto","Automotive Technology",
IIf([Major]="AT","Accounting Technology",
IIf([Major]="IETC","Industrial Electronics Technology-  Computer Track",
IIf([Major]="IETR","Industrial Electronics Technology - Railway Electronics Systems",
IIf([Major]="PLS","test","Ophthalmic Dispensing"))))))))))))))
4

6 に答える 6

1

1つのオプションは、IIf()の代わりにSwitch()ステートメントを使用することです。

Majors: Switch([Major]="EET","Electronics Engineering Technology",
               [Major]="DMA","Digital Media Arts Technology",
               ...,
               [Major]="PLS","test",
               True, "Ophthalmic Dispensing")

VBAスイッチ関数は多数のパラメーターを受け入れるように見えますが(テストを停止する前に22レベル深くなりました)、Jet /ACEdbエンジンのスイッチの実装は最大14レベルに制限されているようです。あなたが正しく指摘したように、それは15以上で窒息します。

これは、ルックアップテーブル(以下で説明)を唯一の実用的なオプションとして残しているように見えます。(任意の数のパラメーターを受け取る独自のSwitch()関数を作成するなど、あまり実用的でないオプションは他にもありますが、ルックアップテーブルがここで非常に明白な選択である場合、それはばかげていると思います。)


より良いオプションは、ルックアップテーブルを作成し、それをクエリに結合することです。すべての「メジャー」略語のルックアップテーブルに行があることが確実な場合は、INNERJOINを使用します。確信が持てない場合は、Nz()またはIIf()でOUTERJOINを使用してください。

于 2011-11-16T18:06:34.077 に答える
0

バックエンドが MS SQL Server にあり、ODBC 経由でテーブルに接続している場合CASE WHEN THEN END CASE、SQL コードでステートメントを使用できますが、MS Access では使用できません。

遭遇する可能性が高い制限は、SQL クエリのスタックの深さの制限です。すべてのネストされた式では、クエリ アナライザーが 1 段階深くなる必要があり、特定の時点でスタックが使い果たされて失敗します。また、SQL クエリ内のシンボルの総数には制限がありますが、これは十分な大きさであり、ここでは問題ありません。

DLookUp(Table, Field, Criteria)ソリューションの可能な迅速な解決策 (クエリが効果的に遅くなりますが) は、値を別のテーブルに配置し、MS Access の関数を使用してルックアップを実行することです。または、略語でテーブルを結合してから、クエリを本格的なテーブル (マテリアライズド ビュー) に変換することもできます。

于 2011-11-16T22:20:10.053 に答える
0

私がやろうとしているのは、メジャーごとに個別のクエリを作成し、iif または switch のいずれかを渡すことです。最終的には、データを並べ替える必要がないため、エンド ユーザーがデータを PowerPoint にエクスポートするのに役立ちます。

于 2011-11-17T13:44:35.587 に答える
0

2 列のルックアップ テーブルを作成し、IIFマッピングを入力してから、このテーブルに結合します。これにより、参照整合性などの利点が得られます。これらの値は、すべてのクエリを変更するよりもテーブルを変更する方が簡単です。

于 2011-11-17T10:04:24.863 に答える
0

このようなクエリで VBA ループを実行します

UPDATE TableName SET Major = [LongName] WHERE Major = [ShortName]

[LongName] と [ShortName] はパラメーターです。

しかし、実際には、省略形を列に残して、長い名前を使用したい場合に結合できるルックアップ テーブルを作成した方がよいでしょう。データストレージに関しては、はるかに効率的です。

于 2011-11-17T00:25:44.707 に答える