HI델파이 - I 독점 데이터 세트를 사용하여 데이터베이스에 액세스하는 제어 할 수 있습니다
자신의 프로세스에서 실행 컨트롤을 만들기. 데이터베이스는 오래된 ISAM 데이터베이스입니다.
컨트롤은 백그라운드 스레드를 사용하여 전용 데이터 집합을 사용하여 데이터베이스를 쿼리합니다.
폼에는이 컨트롤이 여러 개 포함되어 있으며 각 컨트롤은 각각의 스레드를 사용하여 동시에로드해야하는 데이터에 액세스합니다.
소유권이있는 데이터 세트는 VCL TForm을 표시하여 동시성을 처리하여 열려있는 테이블이 다른 사용자에 의해 잠겨져 있고 데이터 세트가 잠금이 해제 될 때까지 기다리고 있음을 사용자에게 알립니다.
양식에 취소 대기 버튼이있어 사용자가 잠금 대기를 취소 할 수 있습니다.
문제 :
스레드 내에서 독점적 인 데이터 세트를 사용하여 응용 프로그램이 충돌이 중단되거나 잠금이 표시 형성 기다리면 몇 가지 오류를 줄 것이다. 나는 이것이 스레드 안전하지 않은 VCL과 관련이 있다고 생각한다.
그러나 Dataset.Open을 동기화하여이 문제를 해결했지만 dataset.open이 반환 될 때까지 주 스레드를 유지하므로 쿼리의 복잡성에 따라 상당한 시간이 걸릴 수 있습니다.
사용자에게 진행 상황을 알리는 모달 진행률 표시 줄이 표시되었지만 사용자가 진행률 표시 줄을 기다리는 동안 앉아있을 때이 아이디어가 마음에 들지 않습니다.
독점 데이터 세트 코드는 주 응용 프로그램으로 컴파일됩니다. 즉, 별도의 DLL에 저장되지 않습니다. 우리는 잠금이 작동하는 방식이나 개발 프로세스의이 단계에서 양식이 표시되는지 여부를 변경할 수 없습니다. 출시 단계에 너무 가까워서입니다.
이상적으로는 Dataset.open을 주 스레드를 사용하는 대신 제어 스레드에서 실행하고 싶습니다. 그러나 이것은 작동하지 않는 것 같습니다.
다른 사람이 해결 방법을 제안 할 수 있습니까? 부디.
당신의 질문은 나에게 의미가 없습니다. 별도의 프로세스에서 컨트롤을 만들려면 별도의 응용 프로그램에 넣습니다. 섬유는 스레드보다 VCL과 함께 사용하기에 더 이상 안전하지 않습니다. ISAM 데이터베이스의 잠금 메시지가 왜 문제가되는지는 명확하지 않습니다. VCL을 직접 사용합니까? 그렇다면 어떻게? –
별도의 프로세스에서 실행되지만 다른 프로세스의 형태로 표시되는 컨트롤을 가질 수 있는지, 그리고 별도의 실행 파일없이이 작업을 수행 할 수 있는지 궁금합니다. ISAM 데이터 집합 구성 요소는 기본적으로 취소 단추가있는 TForm 인 잠금 메시지를 표시합니다. 잠금 메시지는 열려있는 테이블이 현재 다른 사용자에 의해 잠겨 있음을 사용자에게 알립니다. 사용자는 대기하거나 취소 버튼을 누를 수 있습니다. 왜 DOS 시대에 윈도우즈로 바뀌 었는지, 그리고 내가 바꿀 수없는 어떤 것의 코드가 있습니다. –
하나의 상위 컨테이너 내에 다른 프로세스의 UI를 표시 할 수 있습니다. Chrome 또는 IE8을 고려하십시오. 네가 이럴 필요가 있다는 것을 나는 알지 못한다. 해당 UI가 완전히 분리되어있는 한 백그라운드 스레드에 UI를 가질 수 있습니다. 이 다른 코드가 DLL로 전달되면 문제가 발생한 이유를 알 수 없습니다. –