현재 마이다스로 구성된 AtiveX용 성적관리프로그램을 작성하고 있습니다.(허접~)
검색목록에 '이름/ID/주민등록번호'등으로 찾는 방식이 있습니다.
이를 예를들면,
Select * from 테이블이름 where '이름/ID/주민등록번호' = ???
가 되는데, 마이다스에서 이 동적 SQL문의 처리가 궁금합니다.
(이름 & ID & 주민번호를 Query에서 한다는 것이 아니라 검색방법이 3가지라는 의미
입니다. 그래서, SQL문장이 3문장이 되어야 되구요.)
1.제가 한 방식은 서버에 인터페이스등록후 함수처럼 부르는 방식으로 하니 나중에
결과 Open를 한것을 처리하는 방법을 몰라서 일단 관두고,
2.다음으론
DataModule1.ClientDataSet1.Close;
DataModule1.ClientDataSet1.CommandText := '위의 SQL문';
예로 'Select * from 테이블명 where ID=' + Edit1.Text; <- 이런 형식으로..
DataModule1.ClietnDataSet1.Open;
위와 같이 하면 field가 없다고 나오구요.
3.극단의 방법 정적테이블을 각각 구성/ SQL문을 작성(App서버쪽에)후 나중엔 인자만
서버에 넘기는 방법(Ativex클라이언트쪽에)
예) ID방식은
DataModule1.ClientDataSet1.Close;
DataModule1.ClientDataSet1.ParamByName('서버에서정한:p인자').AsString := ?
DataModule1.Open;
만약 제가 계속한다면 마지막방법으로 구성할순 있을것입니다만, 제가 개념이 부족한것인지 책이 잘못된 것인지 2번의 방법으로 SQL문장을 통째로(where절포함)날리면 되는
방법을 아시면 감사하겠습니다. 뭐가 뭔지 아직 허우적되어서 ㅠ.ㅠ
DataRequest 함수의 정확한 설명은 F1키를 누르시면 저보다 잘 설명할 겁니다.
쉽게 말해서 선언은:
function DataRequest( value: OleVariant) : OleVariant;
인데, 이 함수를 실행시키면 서버쪽으로 임의의 값을 넘길 수 있습니다.
그리고 이 함수를 콜하면, 서버에서는 OnDataRequest 이벤트가 발생합니다.
그러니깐,
우선 서버에서 TQuery/TADOQuery/TADODataset 컴포넌트에 쿼리문을:
'SELECT ...... FROM SJ_MASTER, SJ_TOTAL, SJ_YEAR_TOTAL, HAKKWA_CODE,.'
이렇게 만들어 놓으시고...(where 절에서 마지막 검색 조건을 비워 두세요)
라디오 버튼이던지 체크박스 같은 걸로 ID/주민등록번호/이름을 선택하게 하고, 검색어를 넣고, 검색버튼 (Button1)을 누르면..
1) 클라이언트의 검색 버튼의 Onclick event handler에서:
//생략...
if (ID를 선택했다) then sMod := 'where ID = ' + Edit1.Text
else if (주민을 선택했다) then sMod := 'where JUMINNO = ' + Edit1.Text
else if (이름을 선택했다) then sMod := 'where NAME = ' + Edit1.Text;
if ClientDataSet1.DataRequest(sMod) = 0 then
clientDataset1.Open
else ShowMessage('서버 작동시 에러 발생');
2) 서버의 OnDataRequest 이벤트 핸들러에서는:
try
Query1.SQL.Add(sMod);
Result := 0;
except
Result := -1;
end;
코드가 난잡한걸 용서하세요.
난해하면 제가 다시 설명드리겠습니다.
Happy Programming!
강정한 wrote:
> 현재 마이다스로 구성된 AtiveX용 성적관리프로그램을 작성하고 있습니다.(허접~)
> 검색목록에 '이름/ID/주민등록번호'등으로 찾는 방식이 있습니다.
> 이를 예를들면,
> Select * from 테이블이름 where '이름/ID/주민등록번호' = ???
> 가 되는데, 마이다스에서 이 동적 SQL문의 처리가 궁금합니다.
> (이름 & ID & 주민번호를 Query에서 한다는 것이 아니라 검색방법이 3가지라는 의미
> 입니다. 그래서, SQL문장이 3문장이 되어야 되구요.)
>
> 1.제가 한 방식은 서버에 인터페이스등록후 함수처럼 부르는 방식으로 하니 나중에
> 결과 Open를 한것을 처리하는 방법을 몰라서 일단 관두고,
>
> 2.다음으론
> DataModule1.ClientDataSet1.Close;
> DataModule1.ClientDataSet1.CommandText := '위의 SQL문';
> 예로 'Select * from 테이블명 where ID=' + Edit1.Text; <- 이런 형식으로..
> DataModule1.ClietnDataSet1.Open;
> 위와 같이 하면 field가 없다고 나오구요.
>
> 3.극단의 방법 정적테이블을 각각 구성/ SQL문을 작성(App서버쪽에)후 나중엔 인자만
> 서버에 넘기는 방법(Ativex클라이언트쪽에)
> 예) ID방식은
> DataModule1.ClientDataSet1.Close;
> DataModule1.ClientDataSet1.ParamByName('서버에서정한:p인자').AsString := ?
> DataModule1.Open;
>
> 만약 제가 계속한다면 마지막방법으로 구성할순 있을것입니다만, 제가 개념이 부족한것인지 책이 잘못된 것인지 2번의 방법으로 SQL문장을 통째로(where절포함)날리면 되는
> 방법을 아시면 감사하겠습니다. 뭐가 뭔지 아직 허우적되어서 ㅠ.ㅠ
>
>