2

여러 컴퓨터에서 실행되는 응용 프로그램이 있습니다 (대략 2).이 응용 프로그램은 네트워크에있는 공유 mdb를 업데이트합니다. 두 사용자는 한 번에 공유 mdb를 업데이트하려고하지만 한 사용자 만 업데이트 할 수 있습니다 mdb 한번에. 다른 사용자가 그것을 열 수 없습니다. 누구든지 다중 사용자 환경을 지원하는 액세스를 제안 할 수 있습니까?

편집하다:

TFormRoadAttrib이라는 하나의 형식이 있습니다. 다음 함수를 활성화하면 호출됩니다.

procedure TFrmRoadAttrib.FormActivate(Sender: TObject);
if dmTimeDomain <> nil then
   begin
     if not (dmTimeDomain.dbTimeDomain.InTransaction) then
     begin
       dmTimeDomain.dbTimeDomain.BeginTrans;
     end;
   end;

어디에dbTimeDomain=TADOConnection그 가치는

'Provider=Microsoft.ACE.OLEDB.12.0;
Mode=Share Deny None;
Extended Properties="";
Locale Identifier=1033;
Jet OLEDB:Registry Path="";
Jet OLEDB:Database Password="";
Jet OLEDB:Engine Type=4;
Jet OLEDB:Database Locking Mode=0;
Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password="";
Jet OLEDB:Create System Database=False;
Jet OLEDB:Encrypt Database=False;
Jet OLEDB:Don't Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;
Jet OLEDB:SFP=False;
Data Source=Q:\BEL_01\BEL_GADM\ACCESS\Restrictions.mdb;
Jet OLEDB:System database=C:\Program Files\Tele Atlas\Common Files\DPT.MDW;
User ID=dbadpt;
Password=dbadpt;

코드를 실행 한 후 확인 버튼을 클릭하면

if dmTimeDomain <> nil then
 begin
      if (dmTimeDomain.dbTimeDomain.InTransaction) then
            dmTimeDomain.dbTimeDomain.CommitTrans;
     end;
end;                                                                

좋습니다.


  • 델파이 태그를 제거하십시오. 그것은 당신의 질문에 적용 가능하거나 도움이되지 않습니다. - Steve Jorgensen
  • 사용자 중 한 명이 델파이 애플리케이션을 사용하고 있다면 어떻게 될까요? 알아야 할 정보가 충분하지 않지만 Delphi 데이터 액세스 계층에있는 문제로 인해 문제가 발생할 수 있습니다. 사실, 아래의 주석을 읽었으므로, 이것이 사실입니다. 델파이 태그는 분명히 속하지만, 델파이 사용자가 옵션이 무엇인지 파악할 수 있도록 델파이 코드가 필요합니다. - David-W-Fenton
  • 트랜잭션을 제어하는 Delphi 코드를 게시하십시오. 문제의 원인 일 가능성이 있습니다. - David-W-Fenton
  • 내 질문의 설명 필드를 업데이트했습니다. 친절하게도 추가 정보가 필요합니다. - anshul
  • 연결 문자열에 정의 된 연결 모드는 "공유 거부 없음"입니다. 공유 mdb에서 "공유"로 설정됩니다. 연결 문자열의 모드를 "ReadWrite"로 변경하는 경우 다음 오류가오고있다. - anshul

3 답변


4

액세스는 다중 사용자 환경을 확실히 지원하지만 권한은 올바르게 설정되어야합니다. 모든 사용자는 데이터베이스가 위치한 디렉토리에 파일을 작성할 수 있어야하며 모든 사용자는 다른 사용자가 해당 디렉토리에서 작성한 파일을 수정할 권한이 있어야합니다. 많은 것을 망쳐 놓을 수있는 방법이 있습니다. 이는 Access에서 동시. 다중 사용자 액세스를 관리하기위한 메커니즘의 일부로 별도의 .ldb 파일을 사용하기 때문입니다.

좋은 테스트는 한 사용자가 공유 디렉토리에 텍스트 파일을 만든 다음 다른 사용자가 해당 파일을 열 수 있는지 확인한 다음 변경 사항을 저장하는 것입니다.


  • 고마워 스티브.하지만 이건 문제가 아니야. 모든 사용자는 네트워크 드라이브에 대한 완전한 액세스 권한을가집니다. 한 사용자가 mdb를 닫으면 다른 사용자가 mdb를 열고 열 수 있습니다. - anshul
  • 두 사용자가 데이터베이스를 직접 또는 링크 된 테이블을 통해 여는 중입니까? 직접 액세스하는 경우 사용자가 "단독 액세스"를 위해 데이터베이스를 열려고 시도하지 않았는지 확인하십시오. 또한 권한 설정이 복잡 할 수 있으므로 제안한 테스트를 수행하는 것이 좋습니다. 사용자는 디렉토리에 대한 모든 권한을 가질 수 있지만 디렉토리의 한 사용자가 작성한 새 파일은 다른 사용자가 수정할 수 없도록 할 수 있습니다. - Steve Jorgensen
  • 이것은 관심의 대상 일 수 있습니다 :office.microsoft.com/en-us/access-help/…. 응용 프로그램이 백 엔드 데이터베이스에서 개체를 수정할 수 있습니까? - Fionnuala
  • & # 39; 깨끗한 & # 39; 프론트 엔드는 간단한 폼과 하나 또는 두 개의 연결된 테이블을 가진 Access 프론트 엔드입니다. 각 사용자에게 복사본이 있고 문제가 아직 남아 있는지 확인하십시오. - Fionnuala
  • 내가 뭔가를 찾은 것 같아요. 사용자가 공유 mdb에 액세스 할 때마다 트랜잭션이 시작되고이 트랜잭션이 커밋 될 때까지 다른 사용자는 공유 된 mdb를 업데이트 할 수 없습니다. 해당 기간 동안 잠겨 있기 때문에이 응용 프로그램은 Delphi에서 inittrans, committrans 문제가 여기에 있다고 생각합니다. 트랜잭션이 완료되거나 mdb가 잠금 해제 될 때를 알 수있는 방법이 있습니다.주의 : 모든 사용자가 거기에서 공통적으로 사용되는 개별 애플리케이션을 사용하여 mdb 만 공유합니다. - anshul

1

둘 다 앱을 사용할 수 있어야합니다. 한 사용자가 양식이나 표를 편집하는 경우 다른 사용자는 동일한 객체를 편집하지 못하도록 잠급니다. 그러나 일단 앱이 "프로덕션"상태가되면 앱에 아무런 영향이 없어야합니다. 몇 년 전 MS SQL Server 백엔드 (stil MS Access 프론트 엔드)로 큰 응용 프로그램을 변환하는 데 도움이되었고, 그 시점까지는 15 명의 사용자가 동시에 응용 프로그램을 성공적으로 사용하고있었습니다. 앱이 너무 커서 (100 개의 양식, 100 개의 테이블, 수백 개의 행이있는 일부), 성능상의 이유로 이동했습니다. 그렇지 않으면 그들은 아직도 완전히 접근하고있을 것입니다.


0

일반 액세스 mdb 파일 대신 액세스 프로젝트 (adp 확장자)를 사용하는 것이 좋습니다. 액세스 프로젝트는 Office CD의 별도 설치 파일로 제공되는 SQL 서버 데스크톱 엔진과 작동합니다. 이는 근본적으로 SQL 서버가 약간 쇠약해진 다운 버전을 실행하고이 서버가 모든 동시성 문제를 처리한다는 것을 의미합니다. 또한 DB가 Access 프로젝트에 비해 너무 커지면 DB를 완전한 SQL Server 시스템으로 쉽게 포팅 할 수 있습니다. 저장 프로 시저 (Stored Procedures) 등을 포함하여 SQL Server로 수행 할 수있는 Access 프로젝트에서 대부분의 작업을 수행 할 수 있으며 설치 및 연결이 매우 쉽습니다.


  • Steve Jorgensen의 답변에 따르면 프론트 엔드는 Access가 아니라 Delphi 앱이므로이 방법은 적용 할 수없는 제안입니다. - David-W-Fenton
  • 또한 ADP로 2 개의 응용 프로그램을 작성 했으므로 권장하지 않습니다. ADP는 해결하는 것보다 더 많은 문제를 만듭니다. - Steve Jorgensen

연결된 질문


관련된 질문

최근 질문