2016-08-25 4 views
0

오늘 응용 프로그램에서 일부 삽입/업데이트 쿼리를 통해 작업하여 예상하지 못한 결과가 나타났습니다.Access 매개 변수 쿼리에서 필드 이름을 매개 변수로 사용할 수없는 이유는 무엇입니까?

쿼리

내 삽입 쿼리 이것에 유사 :

PARAMETERS nm TEXT(10), st TEXT(2); 
INSERT INTO park(pname, pstate) 
VALUES([nm],[st]); 

그리고 자신의 동반자 업데이트는 다음과 같이했다 : 그들은 업데이트 된 테이블이 유사했다

PARAMETERS id LONG, nm TEXT(10), st TEXT(2); 
UPDATE park 
SET 
pname = [nm], pstate = [st] 
WHERE 
ID = [id]; 

:

쿼리를 작성을 통해 근무

예기치 않은 결과

, 나는 데이터베이스에 대해 그것을 실행하고 다양한 매개 변수 테스트 값을 제공하여 각각을 테스트했다. 삽입 쿼리 후 새로 삽입 된 레코드를 업데이트하여 업데이트를 테스트 할 것입니다.

대부분의 경우 테이블이 비어있어 업데이트로 단일 레코드를 단순히 업데이트합니다.

그러나는 최대한 빨리 이전에 채워 테이블에 업데이트를 실행, 나는 쿼리가 ALL 기록, 누구의 ID 매개 변수를 통해 제공되고 있었다뿐만 아니라 하나를 업데이트하는 것을 발견했다.

질문은 입니다.

답변

5

문제

ID 확실히 파라미터는 본질적으로 상기 WHERE 절 다음 알리는되었을 id를 사용 park 테이블의 필드 동안 :

WHERE ID = id; 

또는

WHERE ID = ID; 

ID이고 항상 인 경우 UPDATE은 제공된 ID로 예상 레코드 대신 ALL 개의 레코드를 업데이트하려고 시도했습니다. 이 문제를 해결하려면

솔루션

, 나는 단순히 테이블의 첫 번째와 마지막 문자가 나는 그것의 ID에 의해 식별되는 기록을 갱신하고 각각의 경우에 대한 id 전에 업데이트되고 사용. 그래서 작업 코드 - 레코드 만이 확인 업데이트 -이다 :

PARAMETERS pkid LONG, nm TEXT(10), st TEXT(2); 
UPDATE park 
SET 
pname = [nm], pstate = [st] 
WHERE 
ID = [pkid]; 
분명히

내가 쿼리를 작성하는 동안 내가주의를 지불하지 않은 - 내가 다른 매개 변수에 대해 다른 이름을 사용했던 반면, I didn를 업데이트 쿼리에 대해 ID에 왔을 때 그렇게하지 마십시오.

결론

paramaterized 쿼리 작업을 할 때마다 테이블의 필드 이름과 일치하지 마십시오 확인하여 매개 변수 이름을 확인합니다.

이렇게하면 위에 언급 된 문제는 물론 다른 관련 문제가 방지됩니다.

테이블, 필드 및 매개 변수 이름에 예약어는 사용하지 않는 것이 좋습니다.

희망 사항은 누군가가 레코드를 업데이트 할 때 또는 필자의 매개 변수 쿼리가 제대로 작동하지 않는 이유를 알아 내려고하는 데 도움이되기를 바랍니다.