• 締切済み

sqlでのIIFの使用方法

accsessのテーブルデータで4列10000レコードのデータを作成し 先頭列にチェックボックスを配置したうえでvb2008 express editionで作成したソフトのdatagridview上でデータを表示し、使う人がチェックボックスをチェックすることにより、選択したレコードデータを別ファイルに保存できるようにしています。mdbのテーブル名は"No1"です。データ連結はdatatableを使用しています。そこで、datagridviewのチェックボックスの変化をmdbテーブルに反映させる処理をdatagridviewのcellcontentclickイベントに Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & basePath) Dim SQLCM As OleDbCommand = Cn.CreateCommand SQLCM.CommandText = "UPDATE No1 SET iif(チェック = False, チェック = True , チェック = False) WHERE ID = " & e.RowIndex + 1 Cn.Open() SQLCM.ExecuteNonQuery() Cn.Close() と書き込んで処理しようとしていますが、UPDATEステートメント構文エラーと表示され処理できません。TRUEに変更する処理は Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & basePath) Dim SQLCM As OleDbCommand = Cn.CreateCommand SQLCM.CommandText = "UPDATE No1 SET チェック = True WHERE ID = " & e.RowIndex + 1 Cn.Open() SQLCM.ExecuteNonQuery() Cn.Close() でうまくいってます。IIFの使用方法が間違っていると思うのですが。どなたかお教えねがえないでしょうか。開発環境は、Vista Home premium、mdbはaccess2003で作成しています。

みんなの回答

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

No.1の方と同様、私も詳細は確認していませんが(汗) > UPDATE No1 SET iif(チェック = False, チェック = True , チェック = False) IIF関数を使用するのであれば、上記の式を以下に差し替えます: Update No1 Set チェック = IIF(チェック = False, True, False) 今回の例に限定して、もっと単純にするなら、以下でもOkかと思います: Update No1 Set チェック = (チェック = False)

koutukasa
質問者

お礼

DexMachinaさん ありがとうございます Update No1 Set チェック = IIF(チェック = False, True, False) で解決しました。3日間悩んでいましたので本当に助かりました。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

まずはHelpを検索することをしてください。 マイクロソフトさんのWebページも(2007ですが) http://office.microsoft.com/ja-jp/access/HA012288531041.aspx > iif(チェック = False, チェック = True , チェック = False) 全体をみてませんが、むしろ「チェック = False」はWhere句では? "UPDATE No1 SET チェック = True WHERE チェック = False and ID = " & e.RowIndex + 1

koutukasa
質問者

補足

bin-chanさん 早速の回答ありがとうございます。 私もチェック=Trueは 最初 WHERE句ではないかとおもいましたが、 この場合、チェックの内容がTrueかFalseかによって 処理の分枝が必要なのでWHERE句での分枝方法がわからず case文で処理できないかと調べましたがaccessデータではIIF文しか 使用できないとのことでIIF文で処理しようとしてます。 通常のIIF文での使用方法は調べた結果先に記述した方法でいいのでは ないかと何度も形式を少しづつ変えて試してみましたが、同じ構文エラーになってしまうので、お尋ねしたところです。 処理としては、datagridviewのチェックボックスでTrueとFalseを切り替えそれがそのまま元のmdbデータに反映する処理をしようとしています。IIF構文のおかしな点がありましたら、ご指摘いただければありがたいのですか。よろしくお願いいたします。

関連するQ&A

専門家に質問してみよう