• 締切済み

IIF文が使えない?

Access97にODBC接続して以下のSQL文を投げます。 MySql="select iif(code=1,"普通","特殊") as codename from テーブル" 通常ちゃんと「普通」か「特殊」の値が返ってくるのですが、WindowsXPのある環境下ではNULLが返ってくるのです。 どうもIIF文が効いていないようなのです。 おそらくODBCドライバのバージョンなのだと思うのですが、そんなことってあるんでしょうか? 実機がそばにないので確認できないのですが、「このバージョンのODBCドライバなら確かにそうなる」ということをご存知の方、教えていただけますか?

みんなの回答

  • tom777
  • ベストアンサー率77% (14/18)
回答No.3

別途、以下のコードテーブルを追加して リレートするのはどうでしょうか? =====コードテーブル===== Code,Naiyo 1,普通 2,特殊 ・ ・ ・ =====SQL文===== SELECT コードテーブル.Naiyo As codename FROM テーブル LEFT JOIN コードテーブル ON テーブル.Code = コードテーブル.Code; 以上

AnyBody
質問者

補足

教えていただきたいのは、IIFが正常に処理されないAccessのODBCドライバが存在するのか、そしてそのバージョンとは?ということです。 とりあえずIIFを使わないようSQL文を変更し、既に解消しているのですが、原因不明のままなのです。

全文を見る
すると、全ての回答が全文表示されます。
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

MDACのバージョンをあげてみるとか。

参考URL:
http://www.microsoft.com/japan/msdn/data/
全文を見る
すると、全ての回答が全文表示されます。
  • i536
  • ベストアンサー率32% (75/231)
回答No.1

SQL文内でダブルクオテーションは使えないので、シングルクオーテーションに直せば に変更するといいと思います。 【例】 MySql="select iif(code=1,'普通','特殊') as codename from テーブル"

AnyBody
質問者

補足

すみません。質問文上のタイプミスです。 シングルクォーテーションでやってだめなのです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PDOのデータ取得方法について

    お世話になります。 以前まで「mysql_query」でSQLを実行していたのをPDOで行うように変更しております。 prepareの「?」の部分までのSQLにした場合(1)、データ取得出来ますが (2)ですとエラーも返ってこなくデータ取得出来ません。 色々と試してはいますが、全く出来なくて大変困っています。どうかご教示くださいませ。 1)SELECT * FROM table WHERE data_code = ? and data_code2 = ? 2)SELECT * FROM table WHERE data_code = ? and data_code2 = ? and (data_code3 = "null" or data_code3 is null or data_code3 = "") ※PHP5.3、MySQL5.0です。

    • 締切済み
    • PHP
  • PostgresSQL文→MySQL文への変換について

    始めまして、soulutionと申します。 この度、社内イントラネット構築により、備品発注機能をポータルサイトに追加することになりました。 ポータルサイトはphp+mysqlにて動作しております。 なのでphp+mysqlにて備品発注機能を実装しようと思いまして、ベースはショッピングカート機能で作成しようかと思っております。 googleなどでphpによるショッピングカート作成しているフリープログラムを見つけ、プログラム解析をしていたのですが、そのプログラムのデータベースはPostgresSQLベースで組まれており、当方ではPostgresSQL文をMysql文に変換できなかったため、皆様にお力添えしていただけたらと思っております。 いろいろ思考錯誤しましたが、エラーとなりました。。 一応下記に構文を載せておきます。 どうぞよろしくお願い致します。 開発環境(サーバ) OS:windows XP sp2 PHP:バージョン5.28 MySQL:バージョン5.1 エディタ:Adove DreamweaverCS3 ブラウザ:Internet Explore ver6.0 PostgreSQL文(これをMySQL用に変換します) ------------------------------------------------------------ if($mode == 'sort'){ if($a){ $sql = "select * from db01 where a = " . $a . " order by " . $b . " " . $c; }else{ $sql = "select * from db01 order by " . $b . " " . $c; } }else{ $sql = "select * from db01 order by " . $b . " " . $c; } MySQL(当方が考えました) ------------------------------------------------------------ if($mode == 'sort'){ if($a){ $sql = "select * from db01 where a=$a ORDER BY $b.$c "; $mysql->query($sql); }else{ $sql = "select * from db01 ORDER BY $b.$c"; $mysql->query($sql); } }else{ $sql = "select * from db01 ORDER BY $b.$c"; $mysql->query($sql); } エラー ------------------------------------------------------------ Fatal error: Call to undefined function pg_query() in C:\Program Files\Apache Group\Apache2\htdocs\Prototype\equipment-order.php on line 408

    • 締切済み
    • PHP
  • PHP+MySQL SQL文を外部ファイル化したい。

    表題のとおりなのですが… $result = mysql_query( "SELECT * FROM FOO" ); では、動作しています。 このセレクト文を、selectFOO.sql として外部ファイル化し、 (ファイルの中身は、「SELECT * FROM FOO」) $result = mysql_query( selectFOO.sql ); とすると、 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'selectFOO.sql' at line 1 が返ってきます。 SQL文が正しくないよ。マニュアル見てね。 と言われてるのは分かるのですが、 マニュアルのどこを見れば良いのかさえ分かりません。 助けてください。 よろしくお願いします。

    • 締切済み
    • PHP
  • 自作関数でIF文はできないのか?

    SELECT テーブル1.ID, IIf([テーブル1]![ID]=1,"1です","1ではない") AS 1かどうか FROM テーブル1; というクエリ1を作成しました。 「IIf([テーブル1]![ID]=1,"1です","1ではない")」の部分を vbaのFunctionプロシージャーで記述したいのですがうまくできないです。 標準モジュールに Public Function IF文() IF文 = "IIf([テーブル1]![ID]=1,""1です"",""1ではない"")" End Function を作成し、 クエリ1のSQL文を SELECT テーブル1.ID, IF文() AS 1かどうか FROM テーブル1; としたら 「1かどうか」フィールドには関数式の結果ではなく、 関数式が文字列として表示されました。 (添付参照) 訳あって、 SQL文の一部をvbaで記載したいのですが上記のようなことは不可能でしょうか? ご教授よろしくお願い致します。

  • SQLステータス:37000について

    今MySQLの勉強をしているのですが、LIKEを使ったあいまい検索を行うと以下のエラーが吐き出されます。 以下のクエリを実行しました select * from tb where like 'A101'; 【Common SQL Enviromentの場合】 MySQL][ODBC 3.51 Driver][mysqld-5.1.33-community]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'like 'A101'' at line 1 SQLステータス:37000 【SQLモニタの場合】 ERROR1064(42000) DOSプロンプトなので、コピーできました。すみません。 MySQLユーザー会などで調べてみたのですが、よくわかりませんでした。 SQLステータス:37000でググるとODBCドライバの入れなおしで解消するようなのですが、私の使っているODBCドライバのバージョンは3.51なので問題はないかと思います。 根拠は、多くの方がこのトラブルで3.51を入れなおしているからです。 どなたか、このトラブルの解決法を知っている方がいらっしゃったらご教授ください。

    • ベストアンサー
    • MySQL
  • accessでDISTINCT 句と矛盾

    IIFで置き換えをした結果をソートしようとしましたが、 SELECT DISTINCT a,IIF(IsNull(b), 0, 1) AS c FROM shain ORDER BY a,c [Microsoft][ODBC Microsoft Access Driver] ORDER BY 句 (c) が DISTINCT 句と矛盾しています。 というエラーになりました。 正しいSQLを教えてください。 SELECT DISTINCT a,IIF(IsNull(b), 0, 1) AS c FROM shain ORDER BY a,b も試しましたが同じようにエラーになりました。

  • IIFのTRUE時に、2つのデータを対象としたい

    アクセスで管理簿を作成しています。 テーブル→クエリ→フォームと作成しています。 テーブル    請求の有無 処理状況 ・・・・・・・ 1  未請求      2  請求中     完了 3            未完了 4   済       完了 抽出フォーム  テキストボックス 請求の有無 [select請求の有無]             処理状況  [select処理状況] このようなテーブル、フォームを作っています。 クエリに、 Like IIf(IsNull([Forms]![F_メニュー]![select請求の有無]),"*",[Forms]![F_メニュー]![select請求の有無]) Like IIf(IsNull([Forms]![F_メニュー]![select請求の有無]),Null,[Forms]![F_メニュー]![select請求の有無]) Like IIf(IsNull([Forms]![F_メニュー]![select処理状況]),"*",[Forms]![F_メニュー]![select処理状況]) Like IIf(IsNull([Forms]![F_メニュー]![select処理状況),Null,[Forms]![F_メニュー]![select処理状況]) と2つのフィールドに抽出条件を2行ずつ記載していますが、SQLをみると、 抽出条件が最終的に、    select請求の有無"*" and select処理状況"*" or  select請求の有無Null and select処理状況Null という条件になっており、1行目や3行目の様に、NULL+データありが抽出できません。 Like IIF(IsNull(フォームA), NULL と"*" ,フォームA)                  ↑↑↑  この部分をNULLと"*"の両方とするような記述方法はありますでしょうか? ご教示の程よろしくお願い致します。

  • SQLの結果が返ってこない

    PHP+mysqlで以下のようなSQL文で処理を行ったのですがデータが返ってきません。 $sql = 'SELECT * FROM books WHERE id=3'; $recordSet = mysql_query($sql); if(mysql_fetch_assoc($recordSet)){ while ($table = mysql_fetch_assoc($recordSet)) {        処理     } } mysqlの画面で SELECT * FROM books WHERE id=3 を入力してみるとしっかりと結果が返ってきます。 ちなみに1行目を、違うテーブルの $sql = 'SELECT * FROM podcast WHERE code=3 ORDER BY dcdate DESC LIMIT 0,3'; にしてみると、データが表示されます。 2日間かけてずっと試行錯誤してみたのですが、完全に行き詰ってしまったので、何か考えられる原因はありませんでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • Oracl[10g]の SQL文について(No.8)

    何度も恐縮です。前回の質問の続きとなるかと思いますが・・・ Oracl[10g]の SQL文について、教えて下さい。 [A]テーブルに [CODE](key) と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [A2]テーブルに[NO](key) [CODE1] と [CODE2] と [CODE3]フィールドがあるとします。 内容は、 1 A-1 A-2 (null) 2 A-2 A-1 A-3 3 (null)A-3 A-2 と、します。 結果が、 1 A-1 NAME-1 A-2 NAME-2 (null) (null) 2 A-2 NAME-2 A-1 NAME-1 A-3 NAME-3 3 (null/null)A-3 NAME-3 A-2 NAME-2 と、なる様にする為のSQL文は、 >select a2.no, a2.code1,a_1.name, a2.code2,a_2.name, a2.code3,a_3.name >from a2, >(select code, name from a) a_1, >(select code, name from a) a_2, >(select code, name from a) a_3 >where >a2.code1 = a_1.code(+) and >a2.code2 = a_2.code(+) and >a2.code3 = a_3.code(+) と、教えて頂き、完成致しました。 これを、アレンジして、 SELECT A2.NO, A2x.N1, A2x.N2, A2x.N3 FROM A,A2 , ( select a2.no, a2.code1,a1x.name AS N1, a2.code2,a2x.name AS N2, a2.code3,a3x.name AS N3 from a2, (select code, name from a) a1x, (select code, name from a) a2x, (select code, name from a) a3x where a2.code1 = a1x.code(+) and a2.code2 = a2x.code(+) and a2.code3 = a3x.code(+) ) A2x WHERE A2.NO='1' GROUP BY A2.NO, A2x.N1, A2x.N2, A2x.N3 ORDER BY A2.NO と、作りました。つまり、 1 A-1 NAME-1 A-2 NAME-2 (null) (null) と、言う結果が欲しいのです。 ところが、 1 (null) NAME-3 NAME-2 1 NAME-1 NAME-2 (null) 1 NAME-2 NAME-2 NAME-3 と、3行も出てしまいます。 よろしくお願い致します。

  • 以下のSQL文を実行したのですが、MySQL server has g

    以下のSQL文を実行したのですが、MySQL server has gone awayというエラーが発生してしまいます。 さまざまなサイトを確認したのですが間違いが分からないため質問をさせていただきました。 よろしくお願いします。 SELECT * FROM t1 WHERE f1 = ANY (SELECT f1 FROM t2 WHERE group = '1'); (SELECT f1 FROM t2 WHERE group = '1')では30件程度が該当し、t1は5万行前後です。 MySQL クライアントのバージョン: 5.1.22-rc