2017-12-14 11 views
1

저는 초보자이며 Python에서 멀티 스레딩하는 법을 배웁니다. SQL 검색어가 필요합니다 (지금은 복잡한 SQL 자료를 준비 할 준비가되지 않았습니다). MS Access을 데이터베이스로 사용하고 있습니다.동시에 선택하고 업데이트 하시겠습니까?

ComputerName, isPing, inProgress의 세 가지 필드가 있습니다. 현재 inProgress이 아닌 ComputerName 중 하나를 선택하고 inProgress으로 표시해야하는 SQL 쿼리가으로 선택되었습니다.

SELECT TOP 1 
    Table1.ComputerName, 
    Table1.isPing, 
    Table1.inProgress 
FROM Table1 
WHERE (((Table1.inProgress) = FALSE)); 

UPDATE Table1 
SET Table1.inProgress = TRUE 
WHERE (((Table1.ComputerName) = [Enter computer name:])); 
+1

동일한 명령문에서 선택 및 업데이트를 수행 할 수 없습니다. 일반적으로이 문제는 저장 프로 시저 또는 트랜잭션을 사용하여 처리됩니다. 둘 다 원자 적으로 선택/업데이트 (업데이트/선택?)를 수행 할 수 있습니다. –

+0

@ tim-biegeleisen 어떻게 문제를 해결하도록 조언하겠습니까? 잠재적으로 나는 여러 컴퓨터에서 내 프로그램을 실행하여 핑 과정을 가속화하고 싶습니다. – user2978216

+0

질문을 편집하고 select 및 update 문을 포함하십시오. 어쩌면 우리는 둘을 하나의 업데이트로 결합 할 수 있습니다. –

답변

0

IT는 WHERE 절에 Access를 사용하여 하위 쿼리에서 TOP를 사용할 수있을 것으로 보인다. 당신이 일치의에 관한 어떤 논리를 제공하지 않기 때문에, ORDER BY 절없이 TOP 1를 사용하여 사용하는 것이 훨씬 이해가되지 않습니다

UPDATE Table1 
SET inProgress = True 
WHERE ComputerName = (SELECT TOP 1 ComputerName FROM Table1 WHERE inProgress = False) 

참고 : 그렇다면, 당신은 다음과 같은 UPDATE 문을 사용하여 시도 할 수 있습니다 기록을 먼저 선택해야합니다. 위의 하위 쿼리에 ORDER BY을 추가하려고합니다. 또한 주석에서 언급했듯이 동시에 업데이트하고 선택할 수는 없습니다. 원래 SELECT 필드를 필요로하는 경우 별도의 쿼리/명세서가 필요합니다. 한 가지 옵션은 갱신 사항에 시간 소인으로 레이블을 지정한 다음 사실 이후에 가장 최근에 갱신 된 레코드를 선택할 수 있습니다.

+0

특정 컴퓨터 이름에 대해 특정 스레드가 작동 할 것이라는 의미에서 상위 1이 필요합니다. 단일 스레드에는 단일 ComputerName이 필요합니다. 스레드는 다른 스레드가 작동중인 컴퓨터 이름을 모릅니다. 이 업데이트 쿼리는 스레드가 작동하는 컴퓨터 이름을 제공하지 않습니다. – user2978216

+0

나는 이미 내 대답을 더 이상 설명 할 수 없다. –