こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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で作成しています。

投稿日時 - 2010-03-09 21:58:18

QNo.5739002

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

No.1の方と同様、私も詳細は確認していませんが(汗)

> UPDATE No1 SET iif(チェック = False, チェック = True , チェック = False)

IIF関数を使用するのであれば、上記の式を以下に差し替えます:
Update No1 Set チェック = IIF(チェック = False, True, False)

今回の例に限定して、もっと単純にするなら、以下でもOkかと思います:
Update No1 Set チェック = (チェック = False)

投稿日時 - 2010-03-09 23:56:16

お礼

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

投稿日時 - 2010-03-10 00:16:43

ANo.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

投稿日時 - 2010-03-09 22:08:29

補足

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

投稿日時 - 2010-03-09 23:16:43

あなたにオススメの質問