MS Access에서 간단한 구성 프로그램을 작성하고 있습니다. 필수 및 무효의 두 가지 종류의 규칙이 있습니다. 잘못된 규칙의 나는이 SQL을 사용하고 잘 작동 :이 일을 tryed 한 필수 규칙에 대한Ms 액세스 : JOIN 및 NOT EQUAL 연산자로 DELETE 쿼리
DELETE DISTINCTROW RuntimeBOM.*
FROM CurrentInvalid
INNER JOIN RuntimeBOM ON ([RuntimeBOM].[OPTION] = [CurrentInvalid].[Invalid option])
AND ([RuntimeBOM].[FEATURE] = [CurrentInvalid].[Invalid feature])
WHERE RuntimeBOM.SessionID=fOSUserName();
하지만 실제로 테이블의 모든 레코드에 영향을주지 않습니다, 그것은 런타임 오류를 반환 "3086은"(그것은 지정된 테이블에서 삭제 불가능) :
DELETE DISTINCTROW RuntimeBOM.*
FROM CurrentMandatory
INNER JOIN RuntimeBOM ON (RuntimeBOM.FEATURE = CurrentMandatory.MandatoryFeature)
AND (RuntimeBOM.OPTION <> CurrentMandatory.MandatoryOption)
WHERE RuntimeBOM.SessionID=fOSUserName();
fOSUserName() 응용 프로그램을 실행하는 컴퓨터의 사용자 이름을 사용하려면 VBA 기능입니다. 이 시나리오에서는
╔══════════════╗ ╔══════════════════════════════════════════╗ ╔════════════════════════════════════════════╗
║ RuntimeBOM ║ ║ CurrentInvalid ║ ║ CurrentMandatory ║
╟───────┬──────╢ ╟────┬──────┬───────────────┬──────────────╢ ╟────┬──────┬────────────────┬───────────────╢
║FEATURE│OPTION║ ║Feat│Option│Invalid feature│Invalid option║ ║Feat│Option│MandatoryFeature│MandatoryOption║
╠═══════╪══════╣ ╠════╪══════╪═══════════════╪══════════════╣ ╠════╪══════╪════════════════╪═══════════════╣
║FT001 │OP001 ║ ║FTaa│OPaa │FT001 │OP001 ║ ║FTaa│OPaa │FT002 │OP008 ║
║FT001 │OP002 ║ ║FTaa│OPaa │FT001 │OP002 ║ ╚════╧══════╧════════════════╧═══════════════╝
║FT001 │OP003 ║ ║FTaa│OPaa │FT001 │OP004 ║
║FT001 │OP004 ║ ║FTaa│OPaa │FT001 │OP005 ║
║FT001 │OP005 ║ ╚════╧══════╧═══════════════╧══════════════╝
║FT002 │OP006 ║
║FT002 │OP007 ║
║FT002 │OP008 ║
║FT002 │OP009 ║
║FT002 │OP010 ║
╚═══════╧══════╝
는 사용자가 "FTAA"어딘가 "OPaa"선택한 상상하고, "CurrentMandatory"이런 이유로 "CurreintINvalid"및이 방법으로 채워집니다. 유효하지 않은 규칙에 대한 SQL은 RuntimeBOM에서 FEATURE가 FT001이고 OPTION이 "OP001", "OP002", "OP004", "OP005"("CurrentInvalid"에 정의 된대로) 인 레코드를 삭제합니다. 필수 규칙에 대한 SQL은 RuntimeBOM 내의 FEATURE가 FT002이고 OPTION이 "OP008"과 같지 않은 모든 레코드를 삭제합니다 ("CurrentMandatory"에서 정의 됨). 예상 결과 :
╔══════════════╗
║ RuntimeBOM ║
╟───────┬──────╢
║FEATURE│OPTION║
╠═══════╪══════╣
║FT001 │OP003 ║
║FT002 │OP008 ║
╚═══════╧══════╝
당신을 감사합니다!
문제가있는'DELETE' 쿼리의'SELECT' 버전을 확인하십시오. 업데이트 가능한 쿼리입니까? 이러한 조인 된 테이블 또는 쿼리는 구체적으로 * CurrentMandatory *입니까? – Parfait
당신의 대답에 감사드립니다, 그들은 테이블, 이상한 것은 첫 번째 삭제 잘 작동한다는 것입니다. 반면에 두 번째. 두 번째 쿼리를 SELECT로 변환하면 작동합니다. – Axel