2016-11-28 2 views
2

나는 HTTP 클라이언트 구성 요소를 통해 통신하는 SOAP 클라이언트 프로그램과 함께 WebBroker 기반 SOAP 서버 (독립 실행 형 exe)를 사용하는 델피 7로 작성된 3 계층 응용 프로그램을 사용하고 있습니다.델파이의 연결이 끊긴 레코드 세트/데이터 세트

이것은 DataSnap 응용 프로그램이 아닙니다. 대신 서버는 SOAP 요청에 전달 된 SQL 문자열에 해당하는 ADTG 형식의 연결이 끊어진 ADO 레코드 집합으로 클라이언트에 데이터를 보냅니다. 서버는 먼저 문자열을 압축하여 Base64로 변환하여 "문자열"결과로 클라이언트에 다시 전송합니다.

반환 된 레코드 세트를 사용하여 행과 필드를 반복합니다 (예 : DataSet 구성 요소)이 VBA를 사용하여 Microsoft Access에서 수년간 프로그래밍을 해왔 기 때문에 편하게 사용할 수 있습니다. 다행히 TADODataset 구성 요소의 Recordset 속성에 직접 할당하여 QuickReport에 바인딩 할 수도 있습니다.

이제 클라이언트 프로그램을 FireMonkey로 업그레이드하여 Windows 및 OSX 용으로 컴파일하고 더 이상 Mac 환경이 아닌 ADO 레코드 세트를 사용할 수 없다고 가정합니다.

내가 보고서를 기반으로 할 수 있도록 내가 A)를 분리하여 데이터 셋 컴포넌트로, b)는 부하 "손으로"전송할 수있는 최선의 데이터 형식이 될 것입니다 무슨 FireMonkey로 변환을위한 준비에

, 및 c) 가능한 경우 먼저 코드를 구성 요소에로드하지 않고 코드의 데이터를 처리합니다.

이 마지막 항목은 구성 요소를 사용하지 않고 데이터 작업을하는 데 익숙하지 않았기 때문에뿐만 아니라 사용자 인터페이스를 잠그지 않고 배경에서 데이터를 검색하기 위해 자주 스레드에서 데이터를 요청하기 때문에 중요합니다. 내가 이해하는 바와 같이, 구성 요소와 스레드는 함께 사용되지 않습니다.

앞으로 나아가는 가장 좋은 방법에 대한 조언이 있으십니까?

+0

구성 요소 및 스레드에는 문제가 없습니다. 스레드에서 * visual * 구성 요소에 액세스하는 데 문제가 있지만 데이터 집합 구성 요소는 시각적이지 않습니다. 귀하의 질문은 상당히 광범위하고 다소 모호한 것으로 나에게 읽어 but지만 TClientDataSet을 찾고있는 것으로 보입니다. –

+0

@KenWhite 당신 wellcome [여기] (http://chat.stackoverflow.com/rooms/129020/rad-studio-for-android) – Sami

+0

예프. Ken 께 감사드립니다. TClientDataSet이 가장 좋은 방법 인 것 같습니다. –

답변

1

표시 당 값으로 전송합니다. 실제 XML 또는 JSON, 일부 바이너리 Base 64 인코딩 된 컨텐츠 대신. 그리고 SOAP보다 양측에서 구현하기가 훨씬 쉬운 REST 접근 방식으로 전환하십시오.

개체의 JSON 배열 또는 값의 JSON 배열 (와이어를 통해 개체 필드 이름으로 열 이름을 전송하지 않으려는 경우)로 TDataSet을 채울 수 있습니다.

JSON/REST의 장점은 콘텐츠를 HTML5 자바 스크립트 클라이언트 (모바일 또는 웹) 또는 타사 응용 프로그램 또는 서비스에 게시 할 때 매우 동일한 서버 논리를 재사용 할 수 있다는 것입니다.

+0

JSON을 사용하는 것은 마침내 너무 많은 생각을 한 후에 결정했습니다. 데이터는 배열 (열/값)의 배열 (행)로 전송됩니다. TDataSet (보고서 용)을 사용해야하는 경우에는 데이터 세트의 행을 "손으로"채우면됩니다. 한 번에 하나의 행, 큰 문제가되지 않습니다. –

관련 문제