말씀하신대로 dbExpress 데이터셋의 경우 unidirectional이라고 해서 단방향 진행만 가능합니다.
다른 부분에는 문제가 없지만, 데이터셋에서 전진 뿐 아니라 역방향으로 진행해야 한다면 말씀하신 것처럼 예외가 발생합니다.
대표적인 경우가 TDBGrid와 같은 그리드에 연결하거나, 말씀하신 경우와 같은 레포트 컴포넌트와 연결할 경우입니다.
이런 경우엔 중간에 클라이언트데이터셋(TClientDataSet)을 끼워 넣어서 한단계 더 거치도록 하면 됩니다.
dbExpress 데이터셋(TSQLDataSet 이라고 가정하죠)을 그리드(혹은 레포트)에 직접 연결하지 말고 TClientDataSet을
거쳐서 연결하는거죠. 그리고 원래의 TSQLDataSet과 TClientDataSet을 연결하기 위해 다시 TDataSetProvider을 중간에
추가합니다.
따라서 이전에 컴포넌트들 사이의 연결 상태가 다음과 같았던 경우,
TSQLConnection – TSQLDataSet – TDataSource – 그리드/레포트
다음과 같이 됩니다.
TSQLConnection – TSQLDataSet – TDataSetProvider – TClientDataSet – TDataSource – 그리드/레포트
여기서 TClientDataSet – TDataSource간의 연결은 일반적인 데이터셋 연결의 경우처럼 TDataSource의 DataSet 속성을
통해 연결합니다. 그리고 TDataSetProvider – TClientDataSet간의 연결은 TClientDataSet의 ProviderName 속성으로
연결하고요. TSQLDataSet – TDataSetProvider간의 연결은 TDataSetProvider 컴포넌트의 DataSet 속성을 이용합니다.
이같은 과정이 지나치게 복잡하게 느껴진다면 몇개의 컴포넌트가 조합된 편의용 컴포넌트를 사용할 수 있습니다.
델파이 6의 dbExpress 탭에 TSQLClientDataSet이라는 컴포넌트가 있는데, TSQLDataSet, TDataSetProvider,
TClientDataSet의 세가지 컴포넌트가 조합된 컴포넌트입니다. ConnectionName 속성으로 SQLConnection과 연결하고,
TDataSource에서 DataSet 속성으로 직접 가리켜질 수 있습니다.
델파이 7에서는 이 컴포넌트가 없어지고 대신 TSimpleDataSet라는 컴포넌트가 도입되었습니다.
두 컴포넌트는 비슷하기는 하지만 다른 부분도 적지 않습니다. (델파이 6의 TSQLClientDataSet 컴포넌트의 문제점 때문에
새로 도입된 것입니다)
그럼…
interBeginner 님이 쓰신 글 :
: dbExpress 를 사용해서 레포트를 출력하는데
: Group Band 에서 계속 operation not allowed on a unidirectional dataset 이란 오류가 뜹니다.
: dbExpress 콤포는 unidirectional 만 가능한 걸로 알고 있는데
: 퀵에서 커서가 back 이 안되서 오류가 나는것 같은데
: 혹시 이런 경우를 해결하신 분 있으면 도움 부탁드립니다.