FireDAC 학습 - 5: 3층, 원격 제출, 서류 가방 모드

4099 단어 FireDACDelphi
요구 사항:
이전 버전의 Delphi, 3층 구조의 프로그램은 TClient DataSet을 클라이언트의 메모리 테이블로 사용했고 모든 사용자 작업은 TClient Dataset의 기록을 추가하고 삭제하는 작업이었다.여기서 사용자가 수정한 기록은 델타라고 한다.작업이 완료되면 다음 기능을 사용할 수 있습니다.
1. 사용자의 삭제와 삭제를 클라이언트 데이터셋에서 읽는다. 즉, 클라이언트 데이터셋이다.Delta, Variant 유형의 데이터입니다.네트워크 통신을 통해 이 데이터를 서버에 전달하면 서버 측은 이를 한 서버 측의 클라이언트 데이터 세트에 직접 부여할 수 있다. 즉, 서버 측에서 클라이언트 데이터 세트를 실행할 수 있다.Delta := MyDelta;그리고 서버 측에서 이 클라이언트 데이터set1에 대해 Apply Updates를 실행합니다. 서버 측에 있는 클라이언트 데이터set1은 연결된 데이터 세트Provider를 통해 델타의 내용을 데이터베이스 서버에 제출할 수 있습니다.기본적으로 DataSetProvider 내부 코드는 델타의 내용에 따라 자동으로 SQL 문장을 만들고 SQL 문장을 통해 업데이트된 데이터를 서버에 제출합니다.
2. 클라이언트의 ClientDataset 안의 데이터, 삭제된 기록(즉 Delta)을 포함하여 모두 SaveToFile의 방식으로 클라이언트 로컬 파일로 저장할 수 있다.이렇게 하면 클라이언트가 오프라인(서버와 네트워크가 통하지 않음)일 때 사용자는 클라이언트가 조작을 하고 조작이 끝난 후에 로컬 파일로 저장할 수 있다.다음에 프로그램을 실행할 때 로컬 파일에서 데이터를 불러오면 사용자는 계속 조작할 수 있습니다.그리고 클라이언트 네트워크가 서버에 연결될 수 있을 때 사용자는 데이터를 서버에 제출할 수 있다.여기에 제출된 것은 사실상 위에서 말한 델타 데이터다.이런 조작을 서류 가방 모드라고 한다.즉 클라이언트가 오프라인으로 조작할 수 있다는 것이다.
FireDAC 대응 방법:
상기 두 가지 기능은FireDAC에서 대응하는 방법이 있다.
원격 커밋:
1. 먼저 데이터베이스 서버에서 데이터를 얻고 FdQuery1로 데이터베이스의 한 표를 열어 데이터를 얻는다.
2. FdQuery 1.SaveToStream(AStream); Stream에 데이터를 출력한 다음 네트워크를 통해 Stream을 클라이언트, 클라이언트의FdMemTable1에 전송합니다.LoadFromStream(Astream)은 데이터를 불러오고 사용자는 클라이언트에서 데이터를 보고 편집 작업을 할 수 있습니다.
3. 사용자가 편집 작업을 마친 후 고객이 편집한 데이터를 서버에 제출하려면 다음과 같은 작업을 해야 한다.
3.1. 먼저 FdMemTable1의 속성을 설정하여 전체 데이터가 아닌 Delta만 내보내도록 함으로써 네트워크 트래픽을 감소시킬 수 있습니다. 속성 설정은 다음과 같습니다.
FdMemTable2.ResourceOptions.StoreItems := FdMemTable2.ResourceOptions.StoreItems - [siData];

상기 속성은 디자인 기간의 속성 패널에서 찾을 수 있으며 기본적으로siData를 포함하고 제거하면델타만 출력합니다.
3.2. 다음 문을 사용하여 Delta를 Stream으로 내보냅니다.
FdMemTable2.SaveToStream(AStream);

3.3. 이 Stream을 네트워크를 통해 서버로 전송하고 서버측의 FdQuery1이 직접 불러온 후에 제출합니다.MIDAS에 있는 DataSetProvider를 생략했습니다.문은 다음과 같습니다.
    FdQuery1.LoadFromStream(AStream);
    FdQuery1.ApplyUpdates(0);

3.4. 상기 문장을 실행하려면 FdQuery1의 CachedUpdates를 True로 설정해야 합니다. 기본값은False입니다.
3.5. 클라이언트가 커밋에 성공하면 FdMemTable2.MergeChangeLog; 그렇지 않으면 클라이언트의 FdMemTable2가 성공적으로 커밋된 Delta로 남아 있습니다.
로컬 저장:
상기 과정은 사용자가 클라이언트 편집 작업이 끝난 후에 인터넷 원인으로 인해 제출할 수 없게 되면 일반 웹 버전의 소프트웨어라면 브라우저를 닫은 후에 이전에 입력한 데이터가 없어져서 헛수고를 하게 된다.클라이언트가 DELPHI의 MIDAS나 FireDAC라면 사용자의 편집 작업을 로컬 파일로 저장하고 다음에 컴퓨터를 켜서 일을 할 수 있습니다.
1. 사용자 편집이 완료되면 다음 문을 실행합니다.
FdMemTable2.ResourceOptions.StoreItems := FdMemTable2.ResourceOptions.StoreItems + [siData];
FdMemTable2.SaveToFile(GetFileDataName);

저장할 때 StoreItems 속성 안에 siData처럼 저장된 파일에 모든 데이터가 있고 기록에 대한 변경(Delta)에 대한 데이터도 포함된다는 것을 보증해야 한다.로컬로 저장한 후 사용자는 프로그램을 닫고 컴퓨터를 닫을 수 있다.
2. 다음 사용자가 프로그램을 열고 다음을 수행합니다.
FdMemTable2.LoadFromFile(GetFileDataName);

클라이언트 프로그램이 로컬 데이터를 불러와서 사용자는 계속 작업을 할 수 있고 데이터에 대해 조회, 삭제를 할 수 있다.
3. 클라이언트가 로컬 데이터를 불러온 후에 이럴 때 서버 측에 연결할 수 있다면 클라이언트의 델타를 서버에 제출하고 사용자가 데이터에 대한 조작을 데이터베이스 서버에 저장할 수 있다.
분할선 ---------------------------------------------
요약:
Delphi를 사용하여 데이터베이스의 3층 구조를 만드는 프로그램은 대략 다음과 같다.
1. 서버 사이드 프로그램을 개발하여 데이터베이스에 연결한다.서버 사이드 프로그램은 데이터베이스 서버에서 데이터를 얻는 것도 책임지고 데이터를 데이터베이스 서버에 제출하는 것도 책임진다.
2. 클라이언트 프로그램을 개발하여 클라이언트 프로그램의 데이터를 서버 사이드 프로그램에서 얻는다.클라이언트 프로그램은 조작 인터페이스를 사용자에게 보여 준다.사용자가 클라이언트 프로그램에서 데이터를 첨삭하고 수정하여 최종적으로 델타 데이터로 출력합니다.클라이언트는 이 델타 데이터를 네트워크를 통해 서버에 보내고 서버 측은 이 델타 데이터를 SQL 문구로 만들어 데이터베이스 서버에 제출한다.
3. 상기 네트워크를 통해 데이터를 전달하는 방법은 델파이가 제공한 기존 프레임워크를 사용하면 이전에는 웹서비스 프레임워크가 있었고 지금은 DataSnap 프레임워크가 있다.물론 제3자의 프레임워크도 있고 스스로 네트워크 전송 코드를 쓸 수 있다.
이러한 방법을 통해 데이터베이스 수준에서 이전의 Delphi는 MIDAS 프레임워크를 사용했고 관련된 컨트롤은 다음과 같습니다.
1. 데이터베이스 읽기 컨트롤, 예를 들어 DBExpress나 ADO 심지어FireDAC일 수도 있다.
2. 서버 쪽에서 데이터를 출력하는 데 사용되는 TDataSetProvider;
3. 클라이언트가 데이터를 캐시하여 사용자에게 조작하는 TClientDataSet;
MIDAS를 사용하지 않고 FireDAC만 사용하는 경우 다음과 같은 컨트롤이 포함됩니다.
1. 데이터베이스 읽기 컨트롤 TFdQuery;
2. 클라이언트가 데이터를 캐시하여 사용자 작업에 사용할 컨트롤 TFdMemTable
--------------------------------------
여기서는 기본적으로 MIDAS가 할 수 있는 것은 FireDAC만 사용해도 할 수 있다.어쩐지 델피가 FireDAC를 제창하기 시작하더니 MIDAS를 버렸다.물론 미다스는 새 DELPHI 버전에서도 계속 사용할 수 있다.

좋은 웹페이지 즐겨찾기