

# 動作環境

ブラウザ：IE8  
sqlserver：Microsoft SQL SERVER 2008

# やりたいこと

ASPXファイルから下記のJavascript関数を呼び出して処理しています。  
sqlServerに対するSELECT結果がテーブルに存在しない[object]だったときに、if文のelse処理が動作するはずですが、else以降の処理が動作せず、関数呼び出しが終了してしまいます。

SELECT結果の[object]を条件分岐で正常に判断させる方法を知りたいです。  
もしくはSELECT結果の使用方法が間違っていたり、他の方法で判断する方法があるのであれば正しい使用方法、その手段も知りたいです。

[code]

    function checkSMT_Z120(regClass, obj, z120, ovday, odlvprice) {
        //エラー回避　※try{～
        try {
            var objADO = new ActiveXObject("ADODB.Connection");     //ADODBモジュールを使用してDBへ接続
            var inputchk = obj.value                                //入力された品番を引数として取得
            var companyGrp = z120.value                             //入力されたz120グループを引数として取得
            var formVday = frmFormData.elements[ovday];             //旧有効開始日をフォームに返す
            var formoDlvPrice = frmFormData.elements[odlvprice];    //旧納品価格をフォームに返す
            var formregClass = frmFormData.elements[regClass];      //登録区分をフォームに返す
    
            //1.ADOを使いSQL ServerのDBを開きます
            objADO.Open("Driver={SQL Server};" +
                        "server=[ip]; database=[db名]; uid=[****]; pwd=[****];");
    
            //2.SQLを実行して対象テーブルの登録状況を参照
            if (inputchk != "") {
                var ret = objADO.Execute("select 品番,金額,数量,開始日付 from Z120 where 得意先G5 = '" + companyGrp
                                                                                                     + "' and 品番 = '" + inputchk
                                                                                                     + "' and 終了日付 = '99991231'");
                if (ret("品番") != "[object]") {
                    window.alert("true")
                } else {
                    window.alert("false")
                }
            }
            
            //ADOをクローズします
            objADO.Close();
            objADO = null;
    
        }
        catch (e) {}
    
    }
[/code]


CC BY-SA 3.0
2017-02-21T09:28:26.473
32838
2017-02-22T00:54:33.687
20761
question
javascript sql-server
SQL文の実行結果をif文の条件判定に利用して[object]が返ってきたときに後続のスクリプトが動作しない


おそらく処理に必要な値は`ret("品番")`ではなく`ret("品番").Value`なのではないでしょうか。

`ret("品番")`は`ADODB.Field`型です。この型は文字列に変換すると`[object]`となりますが、文字列`"[object]"`と比較しても一致することはありません。


CC BY-SA 3.0
2017-02-21T10:00:02.587
32839
2017-02-21T10:00:02.587
5750
32838
answer


Connection オブジェクトの Execute の実行結果は Recordset オブジェクトが返ります。  
エラー出ない限りオブジェクトが返されるので、[object]しか返らないと思います。  
レコードが正常に取得できたかどうかについては、自分が HTA などで作る場合は Recordset オブジェクトの EOF
プロパティで判定します。ブール型で返すので、if (ret.EOF) {} みたいな使い方でいけるはずです。

[Connection.Execute メソッド - MSDN](https://msdn.microsoft.com/ja-
jp/library/cc364125.aspx)

先頭の1行だけを取得するならこのコードで良いですが、複数行処理する場合は MoveNext, EOF などを使ってループ処理にします。


CC BY-SA 3.0
2017-02-22T00:54:33.687
32853
2017-02-22T00:54:33.687
12906
32838
answer