null判定について

このQ&Aのポイント
  • javascriptでDBのデータを表示・追加・削除・更新している際に、空欄項目をnullではなく空欄にしたいが、null判定がうまく機能しない問題が発生しています。
  • 普通にnull判定をしているつもりなのですが、access上で空欄の場合でもif文内に入り、「null」という文字列が表示されてしまいます。
  • accessから取得したデータではなく、javascript内でnullを設定した場合はチェックが正常に動作しています。何が原因なのか教えていただきたいです。
回答を見る
  • ベストアンサー

null 判定について

javascriptに関して質問させて下さい。 accessのDBのデータをHTML上で表示・追加・削除・更新を行っています。 DB上のデータで空欄の項目を表示させたときに null が表示されます。 nullではなく空欄にしておきたいので、null判定チェックを 行っているのですが、ひっかかってくれない状態です。 ------------- var database; database = new ActiveXObject("ADODB.Connection"); database.Open("Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:\\mydb.mdb;"); var mySql = "select 種別, 内容 from Aテーブル; var recordSet = database.Execute(mySql); var tempHtml = "種別=" + recordSet(0); if(recordSet(1) != null){ tempHtml = tempHtml + "<br>内容=" + recordSet(1); }else{ tempHtml = tempHtml + "<br>内容="; } (略) --------------- recordSet(0)=種別 recordSet(1)=内容 上記のように普通にnull判定をしてるつもりなのですが、 recordSet(1)=内容 が access上で空欄の場合=null もif文内に入り、 「null」という文字列が表記されます。 ※accessからとってきたデータではなく、  javascript内で null を設定した場合はチェックにひっかかっています。 var tmp = null; if(tmp == null){ alert("nullである"); } 何が悪いかお分かりになる方、ご回答お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

if(recordSet(1) != null){ これでは RecordSetオブジェクトが nullかどうかの判断になってしまいます if(recordSet(1).value != null){ といった形で比較しましょう

minoru_y
質問者

お礼

早速のご回答ありがとうございます! 回答どおりに if文の修正を行ったところ、 期待どおりの結果を出すことができました。 null判定の問題ではなく、比較対象の間違い とは、初歩的すぎますね・・・ 勉強になりました。

関連するQ&A

  • 卒業研究でホームページを作成しています

    今、卒業研究でホームページ作成をしています。accessのデータをホームページに反映させるためにjavascriptを使用しているのですが知識がなくエラーがたくさん出ます。ソースを貼りますので誰かわかる方教えて下さい エラーの内容は「~はnullまたはオブジェクトではありません」というものです。 var database; var r01; var r02; onload = init; onunload = dbClose; function init(){ dbConnect(); dataDisp(); } //データベースに接続 function dbConnect() { database = new ActiveXObject("ADODB.Connection"); database.Open("Driver={Microsoft Access Driver (*.mdb)}; DBQ=F:\\ikumi\\SampleDB010\\SampleDB010.mdb;"); alert("データベースに接続しました。"); } //データベースを切断 function dbClose() { database.Close(); database = null; alert("データベースを切断しました。"); } function focus(obj){ obj.style.backgroundColor = "#ffff00"; } function blur(obj){ obj.style.backgroundColor = "#ffffff"; } //データ表示 function dataDisp() { if (r01[0].checked){ var mySql = "SELECT * FROM 1 WHERE [1].station='大分'"; alert("SQL"); var recordSet = database.Execute(mySql); var tempHtml=""; document.getElementById("disp").innerHTML = ""; while (!recordSet.EOF){ tempHtml = tempHtml + recordSet(0) + "; " + "<br />"; recordSet.MoveNext(); } document.getElementById("disp").innerHTML = tempHtml; recordSet.Close(); recordSet = null; /**/; var mySql = "SELECT * FROM 1 "; var recordSet = database.Execute(mySql); var tempHtml=""; document.getElementById("disp").innerHTML = ""; while (!recordSet.EOF){ tempHtml = tempHtml + recordSet(0) + "; " + "<br />"; recordSet.MoveNext(); } document.getElementById("disp").innerHTML = tempHtml; recordSet.Close(); recordSet = null; /**/}; } SQL文がいまいちよく分からないので、 多分SQLの部分のエラーだと思います。

  • MSアクセスの、サーバーでの設定について

    よろしくお願いします。 マイクロソフトアクセスのデータベースを対応したサーバーにアップロードしたところ、ローカルでは動いていたのですが、サーバー上では、動かなくなりました。その時のJavascriptファイルを書きます。 var database; onload = init; onunload = dbClose; function init() { document.getElementById("txtPrefCd").onblur = function (){blur(this);} document.getElementById("txtPrefCd").onfocus = function (){focus(this);} document.getElementById("txtPrefName").onblur = function (){blur(this);} document.getElementById("txtPrefName").onfocus = function (){focus(this);} dbConnect(); dataDisp(); } //データベースに接続 function dbConnect() { database = new ActiveXObject("ADODB.Connection"); database.Open("Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("/hogehoge/db/SampleDB010.mdb"); alert("データベースに接続しました。"); } //データベースを切断 function dbClose() { database.Close(); database = null; alert("データベースを切断しました。"); } function focus(obj){ obj.style.backgroundColor = "#ffff00"; } function blur(obj){ obj.style.backgroundColor = "#ffffff"; } //データ表示 function dataDisp() { var mySql = "select * from T01Prefecture order by PREF_CD"; var recordSet = database.Execute(mySql); var tempHtml=""; document.getElementById("disp").innerHTML = ""; while (!recordSet.EOF){ tempHtml = tempHtml + recordSet(0) + ":" + recordSet(1) + "<br />"; recordSet.MoveNext(); } document.getElementById("disp").innerHTML = tempHtml; recordSet.Close(); recordSet = null; /**/ } 以上です。 どうも、データベースに接続のところがうまくいきません。 Dim Conn Set Conn = Server.CreateObject("ADODB.Connection") strConnection = "DRIVER=Microsoft Access Driver(*.mdb);DBQ=" & Server.MapPath("/USERNAME/db/yourdatabase.mdb") Conn.Open(strConnection) としても、 Dim Conn Set Conn = Server.CreateObject("ADODB.Connection") Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ Server.MapPath ("/YourUSERNAME/db/yourdatabase.mdb") & ";" Conn.Open としても、ダメでした。 どうすればよいのか分からないので、どこをどうすればよいのか、どなたかご教授願います。 よろしくお願いします。

  • 変数にNULLを代入したい

    変数にNULLを代入してMYSQLに保存したいのですが、 $var = NULL; これでやってもMYSQLにはNULLで保存されずに、空欄のままになってしまいます。 MYSQLの構造は ヌル(NULL) → はい デフォルト値 → NULL にしてあります。 何が原因でしょうか?

    • ベストアンサー
    • PHP
  • VBA null判定

    Accessでテキストボックスの値をテーブルへ書き込むVBAを作成しているのですが、Null判定がうまくいきません。 ◎環境 OS:Windows7Pro Var:Access2010 DB:MySQL5.6 Private Sub cmdSubmit_Click() Dim Rst As DAO.Recordset Dim ErrT As String Set Rst = CurrentDb.OpenRecordset("m_plan", dbOpenDynaset) '各テキストボックス、Null判定 If IsNull(txtPid) Then MsgBox "プランID[" & txtPid & "]が未入力です" Call txtCrer Exit Sub End If If IsNull(txtPName) Then MsgBox "プラン名が未入力です" Call txtCrer Exit Sub End If If IsNull(txtPsdate) Then Me!txtPsdate = #01/01/2010# End If If IsNull(Me!txtPedate) Then Me!txtPedate = #01/01/2010# End If Debug.Print "プランID["; Me.txtPid & "]" Debug.Print "プラン名[" & Me!txtPName & "]" Debug.Print "開始日[" & Me!txtPsdate & "]" Debug.Print "終了日[" & Me!txtPedate & "]" ↑↑↑↑↑↑↑↑↑ ここで、Null判定を行ってますが、データがあるにも関わらず、処理が続行されたり、Null判定結果が起動するたびに変わります。 On Error GoTo err With Rst .MoveLast .AddNew .Fields("PlanID") = Me!txtPid .Fields("PlanName") = Me!txtPName .Fields("PlanSt") = CDate(Me!txtPsdate) .Fields("PlanEn") = CDate(Me!txtPedate) .Fields("P_Remaks") = Me!txtPbikou .Update End With Rst.Close Set Rst = Nothing err: MsgBox "DBエラー" Debug.Print Rst.Type Debug.Print err.Description Call txtCrer End Sub ただし、下記判定だけのボタンとプロシージャーでは、正常に判定されます。 判定だけの、プロシージャー 'Null判定テスト Private Sub cmdtest_Click() If IsNull(txtPid) Then Debug.Print "[" & txtPid & "]" & "Nullです。" Else Debug.Print "[" & txtPid & "]" & "Not Nullです。" End If If IsNull(txtPName) Then Debug.Print "[" & txtPName & "]" & "Nullです。" Else Debug.Print "[" & txtPName & "]" & "Not Nullです。" End If If IsNull(txtPsdate) Then Debug.Print "[" & txtPsdate & "]" & "Nullです。" Else Debug.Print "[" & txtPsdate & "]" & "Not Nullです。" End If Debug.Print "===============================" End Sub どこが間違っているかまったくわかりません、アドバイスを頂けましたら幸いです。

  • 配列に格納した値が保存されない

    DB(Access)から取得した内容を配列に格納し、その内容を取り出すプログラムを 以下のように書いてみました。 whileループ内の alert("ループの中=" + data_array[i]); では配列の中の値が参照できるのですが whileループの外で for(var i=0;i < data_array.length; i++){ alert("ループの外:" + data_array[i]); } 配列の中身を表示させようとしたところdata_array.length の長さが0になっており 配列の中身が参照できない状態です。なにが原因かわかりますでしょうか。 <html> <script language="javascript" type="text/javascript"> function dbSearch() { var sql="select * from URL where flg=0"; var database = dbConnect(); var recordSet = database.Execute(sql); var data_array = new Array(); while (!recordSet.EOF){ data_array[i] = recordSet(0); alert("ループの中=" + data_array[i]); recordSet.MoveNext(); } alert("長さ=" + data_array.length); for(var i=0;i < data_array.length; i++){ alert("ループの外:" + data_array[i]); } database.Close(); return; } //データベースに接続 function dbConnect() { var database = new ActiveXObject("ADODB.Connection"); database.Open("Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:\\test.mdb;"); return database; } </script> <body> <input type="button" value="DB接続" onclick="dbSearch()"> </body> </html>

  • 配列からNULL以外のキーを取得したいのですが……

    配列からNULL以外のキーを取得したいです。 [0, 3]を期待しているのに、[0, 3: 3] で返ってきます。 なんででしょうか? function test(data) {  var result = [];  for (var i = 0, l = data.length; i < l; i++) {   if(data[i] !== null){    result[i] = i;   }  }  return result; } var data = ["1", null, null, "5"]; var last = test(data); console.log(last); ・console.logだから? ・もしそうなら、どうして[ 0: 1, 3: 3] ではないのでしょうか?

  • データコンボのNullについて

    何度もすいませんm(__)m データコンボで 値が選択されてない場合は nullをデータベースに格納したいんですが、 できません。nullの使い方が不正です。と出ます。 教えてください。 VB6を使ってますデータベースはMySQLです。 Dim id As Integer If Me.DataCombo1.Text = "" Then id = Null Else id = Me.DataCombo1.SelectedItem End If datacombo1はInteger型のデータを データベースに格納します

  • エラ-9 ” Null値が不正です!! ”の解消方法は?

    Private Sub ComboBox1_Change() Dim db As Database Dim Tname As Recordset Set db = OpenDatabase("c:\Sam1.mdb ", True) Set Tname = db.OpenRecordset("Table1", dbOpenTable) N = ComboBox1.ListIndex Tname.Move N TextBox1.Text = Tname.Fields(0).Value TextBox2.Text = Tname.Fields(1).Value TextBox3.Text = Tname.Fields(2).Value Tname.Close db.Close Set Tname = Nothing Set db = Nothing End Sub エクセルよりmdbファイルを開けて、ComboBoxのリストインデクッス番号 値とmdbのレコ-ド数値が合致することから、各フィ-ルドの値をTextBox に返すプログラムを作りました。デ-タが各フィ-ルドに存在する時はう まくいくのですが、空の時(Null値の時)は”Null値が不正です!!”とい うエラ-がでて止まってしまいます。Null値はNull値として、TextBoxに 返したいのですが、どうすればよいでしょうか?

  • Null値件数をカウントする式について

    あるテーブル(UserLog)から、「LogOffTime」フィールドの値が空欄(Null)のデータを探す式ですが、 Access_97で・・・ DCount("*", "UserLog", "[LogoffTime] = Null") ・・・としていたのを、Access2000にしたら上手く動きません。 アレコレ試行錯誤して・・・ DCount("[UL_Id]", "[UserLog]", "[LogoffTime] is Null") ・・・だと上手く行くのですが、資料類を見ても「=」が使えるハズなんですけど、なぜダメなんでしょう?

  • NULLを含むフィールド値の条件分岐

    どなたかご存知の方はご教示願います。 使用言語はVB6_SP5、DBはMdb(アクセス97形式)です。 ADOでDBに接続し、レコードセットを取得しそのレコードの任意のフィールドの値により処理を3通りに分けたいのです。(値はNULL、"1"、"9" の3つです。) IF文で条件分岐を行いたいのですが、うまく振り分けができずにおります。 IF ISNULL(RS.FIELDS("HHH").VALUE) THEN NULLの場合の処理 ELSE "1"の場合の処理 END IF ' "9" の場合はなにもしない 結果は全てNULLの場合の処理を実行してしまいます。 どこを修正すれば宜しいのでしょうか?

専門家に質問してみよう