0

편집 : 질문 맨 아래의 답변 됨/해결 방법.JavaScript Access Database SQL 조건 식의 데이터 형식이 일치하지 않습니다.

나는이 같은 오류에 관해서 다른 모든 질문을 이미 보았지만 이것은 매우 독특한 시나리오이다.

나는 다음과 같은 문제가 오전 자바 스크립트를 사용하여 자체 내장 된 웹 사이트에서 Access 데이터베이스 관리 꽤 많이입니다 :

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

IE9에서 :

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"를 추가하는 것입니다.이 트리거는 값을 가져 와서 연도가 추가 된 날짜로 변환하고,이 새 값을 다른 입력에 전달하고,이 새 입력을 전달합니다 주요 기능. 나는 그것을 피하려고 노력하고있다.

왜 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라고 생각합니다.toLocaleDateString(). toString() IE11에서 자바 스크립트와 함께 좋은 재생되지 않는 몇 가지 이유입니다 및 JavaScript 문자열로 복용하지 않습니다. 내 임의의 추측.

0

[평가 일]이 날짜/시간 유형 필드로 정의되어 있습니까? 나는 SQL 문장이 아포스트로피 대신에 날짜의 # 구분자를 필요로하기를 기대한다. 그래서 그것을 시도해라. IE9가 아포스트로피를 허용하고 IE11이 evDate 변수를 사용하지 않는 이유는 알 수 없습니다.

+0

예, 날짜/시간으로 정의됩니다. 파운드 노래가 전혀 작동하지 않습니다, 나는 아포스트로피를 사용해야합니다. 테이블에 3 개의 날짜 필드가 있고 아포스트로피가있는 날짜 값을 제공하고 있습니다. 나는 "업데이트 된"날짜가 IE11에서 취해지고 있지 않다는 것을 알기 전까지 각 필드 값과 해당 값이있는 INSERT 문을 보내 "Debuged"합니다. 나 또한 별도의 테스트에서 다른 두 필드에 업데이트 된 날짜를 보냈고 오류도 발생했습니다. 내가 질문 게시글에서 언급했듯이, 보통 날짜 문자열 (hDate)을 1 년 후에 변환하지 않고 그냥 보내면 올바르게 작동합니다. –

관련 문제