- 締切済み
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で作成しています。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- DexMachina
- ベストアンサー率73% (1287/1744)
No.1の方と同様、私も詳細は確認していませんが(汗) > UPDATE No1 SET iif(チェック = False, チェック = True , チェック = False) IIF関数を使用するのであれば、上記の式を以下に差し替えます: Update No1 Set チェック = IIF(チェック = False, True, False) 今回の例に限定して、もっと単純にするなら、以下でもOkかと思います: Update No1 Set チェック = (チェック = False)
- bin-chan
- ベストアンサー率33% (1403/4213)
まずは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
補足
bin-chanさん 早速の回答ありがとうございます。 私もチェック=Trueは 最初 WHERE句ではないかとおもいましたが、 この場合、チェックの内容がTrueかFalseかによって 処理の分枝が必要なのでWHERE句での分枝方法がわからず case文で処理できないかと調べましたがaccessデータではIIF文しか 使用できないとのことでIIF文で処理しようとしてます。 通常のIIF文での使用方法は調べた結果先に記述した方法でいいのでは ないかと何度も形式を少しづつ変えて試してみましたが、同じ構文エラーになってしまうので、お尋ねしたところです。 処理としては、datagridviewのチェックボックスでTrueとFalseを切り替えそれがそのまま元のmdbデータに反映する処理をしようとしています。IIF構文のおかしな点がありましたら、ご指摘いただければありがたいのですか。よろしくお願いいたします。
お礼
DexMachinaさん ありがとうございます Update No1 Set チェック = IIF(チェック = False, True, False) で解決しました。3日間悩んでいましたので本当に助かりました。