=IIf(IsDate([テキストボックス]) AND [チェックボックス] AND [コンボボックス] Like "済","完了","")
先日教えていただいた条件付き書式、コントロールソースに上記式を入れる件ですが
どうもうまくいきません。(なんだかうまくいった気がしたこともあったのですが、コンボボックスのソースを変更したりなんだりしていたらまたうまくいかなくなった。)
そこで、色々検索していて思い当たったのが以下の件です。
↓↓
「AccessとADOではワイルドカードが違う!」
教えていただいたときはワイルドカードは使っていなかったのですが、実際はワイルドカードを使っていました。コントロールソースではワイルドソースは使えないと考えた方が良いのでしょうか。ADOの件がコントロールソースにかかわってくるか教えてください。
(関わるならOrでつなげて式を長くするしかないと思っているのですが、すごくごちゃついてくるので質問しました。)
コントロールソースの式に関してADOはまったく関係ないです。
ワイルドカードは普通にLike 演算子 - Access
上記で紹介されているワイルドカードは使えます。(Access内のコントロールソースやクエリでは * だが、ADOでは % になるというだけのことです。)
式がまちがっているのでしょう。
こんにちは。この件ですが、どうもうまくいきません。式にエラーが出て、修正(一度消して打ち直す)すると見た目全く何も変化していないのにうまくいったり、同じことを何度も繰り返しています。時々「式が長すぎます」というようなエラーも出ます。実際すごく式が長いので、トライアンドエラーにすごく時間がかかっています。クエリのデザインビューで設定することはできますでしょうか。具体的には下記のような式が、長いものになります。(そもそも式が間違っているのでしょうか…)
=IIf((IsDate([テキストボックス1]) Or [チェックボックス1]) AND (([コンボボックス2] Like "済") Or [チェックボックス2]),"完了","")
テキストボックス1かチェックボックス1がTRUEで、コンボボックス2かチェックボックス2がTRUEなら完了、といった式が15個程度続いている
式ですが、実際は「済」のあとに「*」を使っています。関係ないと思いましたが一応修正したものを載せます。
=IIf((IsDate([テキストボックス1]) Or [チェックボックス1]) AND (([コンボボックス2] Like "済*") Or [チェックボックス2]),"完了","")
実際のうまくいかない式を提示してもらえますか。(長くてもいいので)
あと、そのフォームは連結フォームですか、非連結フォームですか。
連結フォームの場合は、単票フォームですか、帳票フォームですか。
ごちゃついた式ですみません。少しずつトライ&エラーで試しているところで、この式の半分程度で行き詰っていますが、全文作って載せました。
以下になります。連結フォーム、帳票フォームになります。
=IIf([cboTD01] Like "※" And [cboTD02] Like "※" And [cboTD03] Like "※" And [cboTD04] Like "※" And(IsDate([txtTD05]) Or [chkTD05]) And (IsDate([txtTD06]) Or [chkTD06]) And (IsDate([txtTD07]) Or [chkTD07]) And (IsDate([txtTD08]) Or [chkTD08]) And ([cboTD09] Like "※" Or [chkTD09]) And ([cboTD10] Like "※" Or [chkTD10]) And ([cboTD11] Like "※" Or [chkTD11]) And ([cboTD12] Like "※" Or [chkTD12]) And ([cboTD13] Like "※" Or [chkTD13]) And ([cboTD14] Like "※" Or [chkTD14]) And (IsDate([txtTD15]) Or [chkTD15],"済","")
「※」のあとには「*」があります。なぜかきえているようです。すみません。
マークダウンのコードブロックに入れると * は消えません。
詳細は下記を参照してください。
Microsoft Access 掲示板 の使い方 Microsoft Access 掲示板 - zawazawa
下記のようになります。
提示の式の場合は、閉じカッコがひとつ少ないです。
,"済"
の前に閉じカッコが必要。ただし、
コントロールソースに設定できる式の長さには制限があったと思います。
また、このような長い式になるということは、テーブルの設計がまずい可能性が高いです。
「テーブルの正規化」ができているかをまずは確認すべきですね。
ご確認ありがとうございます。すみません。最後の「)」抜けの件は、投稿したあと気づきました…
仰る通り、式が長すぎるようでエラーが出ます。正規化は考えているつもりなのですが…
ちなみにTDというのはTODOのことで、1つの案件に15個のTODOが存在しており、それらがすべて終わったら「済」が表示されるようにするための式になります。15個すべて1つずつの案件に紐づいているTODOなので、これ以上テーブルは分割できないかと思ったのですが、何か方法がありますでしょうか。。
すみません!今アクセスを立ち上げなおしてコピーしなおしたら「長すぎる」とのエラーが出ず、どうも反映されたようです。原因は不明ですが、とりあえずうまくいきました。お手数をおかけいたしました。正規の件につきましては、なにかありましたらご助言いただけると助かります。
ありがとうございました。