0

編集:質問の末尾にある回答/回避策。JavaScript AccessデータベースSQL条件式のデータ型の不一致

私はすでにこの同じエラーに関する他のすべての質問を見てきましたが、これは非常に肯定的です。これは独自のシナリオです。

私は次の問題が生じています、JavaScriptを使用して自己構築されたWebサイトからAccessデータベースを管理し、かなり午前:IE9で

"INSERT INTO PendingChanges([Eval Date]) VALUES ('‎04‎/‎19‎/‎2018')" 

var evDate = new Date(hDate); 
evDate.setFullYear(evDate.getFullYear() + 1); 
evDate = evDate.toLocaleDateString().toString(); 
var SQL = "INSERT INTO PendingChanges([Eval Date]) VALUES ('" + evDate + "')"; 

これは、次の文字列を提供しますこれは問題なく動作しますが、IE11ではエラー"条件式のデータ型の不一致"が表示されます。

私はそれに年を追加せずに、日付ピッカーで入力から来ており、代わりにHDATE値を使用した場合:

var SQL = "INSERT INTO PendingChanges([Eval Date]) VALUES ('" + hDate + "')"; 

私は次の文字列になってしまいますが。

"INSERT INTO PendingChanges([Eval Date]) VALUES ('‎04‎/‎19‎/‎2017')" 

これはIE9とIE11で正常に動作します。これを回避するには、hDate入力でも "onchange"を追加してください。このトリガーで値を取得し、それを1年の日付に変換し、この新しい値を別の入力に渡して、この新しい入力を渡します主な機能に。私はそれを避けようとしています。

IE11がevDateの文字列値を有効にしていない理由はありますか? (私を信じて、それはhDateと同じに見えますが、違いは2017/2018です)。

編集:これは、SQL変数を使用してデータベースにクエリを行う方法です。

var pad = "Access Database File Path"; 
var cn = new ActiveXObject("ADODB.Connection"); 
var strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pad; 
cn.Open(strConn); 
var rs = new ActiveXObject("ADODB.Recordset"); 
rs.Open(SQL, cn); 
//if i close the rs after the rs.Open, the function returns an error that the change can not be completed on a closed connection, so i just close the connection. 
cn.Close(); 

編集2:私は簡単に回避策を見つけ

回答。代わりに年を追加、HDATEとクレートへのコードの3行日を使用すると、短い日付文字列に変更し、私はこれは私が働いていた同じ値を返しているmoment.jsに

var evDate = moment(hDate).add(1, 'year').format('MM/DD/YYYY'); 

を使用しましたこれまではIE9とIE11の両方で機能が正常に動作しています。

私の質問と私を助けようとした人に感謝します。

+0

どのように 'SQL'変数を使用していますか? – Barmar

+0

質問にコードを入れたり、質問を明確にするように編集したりしないでください。 – Barmar

+0

私はこのコードで質問を編集しました。ありがとう。 –

答えて

0

解決策にはなりません。

私は私の日付ピッカーのためのmoment.js拡張子を使用しておりますので、私は次のことをしようとすることを決めた:

var evDate = moment(hDate).add(1, 'year').format('MM/DD/YYYY'); 

これは私の前の方法として、いくつかのランダムに同じ値を提供するエンドでありますそれはIE9とIE11の両方でうまく動作するユニークな理由です。私の推測は、evDateです。IE11のtoLocaleDateString()。toString()は何らかの理由でjavascriptでうまく動作しないため、javascriptは文字列として受け取りません。私のランダムな推測。

0

[Eval Date]は、[Date/Time type]フィールドとして定義されていますか?私は、#ステートメントがアポストロフィの代わりに日付の区切り文字を要求すると期待しているので、試してみてください。なぜIE9がアポストロフィを受け入れ、IE11がevDate変数を持たないのか分かりません。

+0

はい、日付/時刻として定義されています。ポンドの歌が全く動かない、私はアポストロフィを使わなければならない。私はテーブルに3つの日付フィールドがあり、私はアポストロフィで日付値を提供しています。私はIE11で "更新された"日付が取られていないことがわかるまで、それぞれのフィールド値とそれぞれの値でinsert文を送ることでこれを "デバッグ"しました。別のテストで、更新された日付を他の2つのフィールドに送信しました。また、エラーが発生しました。質問欄で述べたように、それを1年後に変換せずに通常の日付文字列(hDate)を送信するだけで正常に動作します。 –

関連する問題