개발환경은 2010과 DataSnap 환경입니다.
아래처럼 서버와 클라이언트 코드가 있습니다.
클라이언트에서 서버쪽으로 파라메터를 넘기면 서버에서는 쿼리를 실행하여
그 결과를 클라이언트에 보여주려고 합니다.
이 상태에서 실행하면 데이터가 한건도 없습니다.
반대로 클라이언트에서 서버로 쿼리를 직접 날리면 데이터는 정상적으로 검색됩니다.
서버쪽 코드
<!--CodeS-->
function TServerMethods1.GetServerData( Parm : String ) : TDataSet;
var
MAIN_SQL : String;
begin
MAIN_SQL := '';
MAIN_SQL := MAIN_SQL + #13 + 'SELECT ';
MAIN_SQL := MAIN_SQL + #13 + ' ITM04_ENTCOD ';
MAIN_SQL := MAIN_SQL + #13 + ' FROM ';
MAIN_SQL := MAIN_SQL + #13 + ' ITM04_CLAS4 ';
MAIN_SQL := MAIN_SQL + #13 + ' WHERE ';
MAIN_SQL := MAIN_SQL + #13 + Format( ' ITM04_ENTCOD = ''%s'' ', [ Parm ] );
SQLDataSet1.CommandText := MAIN_SQL;
SQLDataSet1.Open; // 데이터를 가져올 수 있도록 한다.
Result := SQLDataSet1;
end;
<!--CodeE-->
클라이언트쪽 코드 (데이터 검색 않됨)
<!--CodeS-->
procedure TClientForm.Button2Click(Sender: TObject);
var
Server : TServerMethods1Client;
begin
DataModule1.SQLConnection1.Open;
Server := TServerMethods1Client.Create( DataModule1.SQLConnection1.DBXConnection );
try
DataModule1.ClientDataSet1.Close;
Server.GetServerData( Edit1.Text );
DataModule1.ClientDataSet1.Open;
if DataModule1.ClientDataSet1.IsEmpty then
begin
Edit2.Text := 'NO DATA';
end
else
begin
Edit2.Text := DataModule1.ClientDataSet1.Fields[1].AsString;
end;
finally
Server.Free;
DataModule1.SQLConnection1.Close;
end;
end;
<!--CodeE-->
클라이언트에서 직접 서버쪽으로 쿼리를 날릴때 코드 (정상적으로 데이터 검색)
<!--CodeS-->
procedure TClientForm.Button2Click(Sender: TObject);
var
Server : TServerMethods1Client;
MAIN_SQL : String;
begin
MAIN_SQL := '';
MAIN_SQL := MAIN_SQL + #13 + 'SELECT ';
MAIN_SQL := MAIN_SQL + #13 + ' ITM04_ENTCOD ';
MAIN_SQL := MAIN_SQL + #13 + ' FROM ';
MAIN_SQL := MAIN_SQL + #13 + ' ITM04_CLAS4 ';
MAIN_SQL := MAIN_SQL + #13 + ' WHERE ';
MAIN_SQL := MAIN_SQL + #13 + Format( ' ITM04_ENTCOD = ''%s'' ', [ Edit1.Text ] );
DataModule1.SQLConnection1.Open;
Server := TServerMethods1Client.Create( DataModule1.SQLConnection1.DBXConnection );
try
DataModule1.ClientDataSet1.CommandText := MAIN_SQL;
DataModule1.ClientDataSet1.Open;
if DataModule1.ClientDataSet1.IsEmpty then
begin
Edit2.Text := 'NO DATA';
end
else
begin
Edit2.Text := DataModule1.ClientDataSet1.Fields[1].AsString;
end;
finally
Server.Free;
DataModule1.SQLConnection1.Close;
end;
end;
<!--CodeE-->
DataModule1.ClientDataSet1.Close;
Server.GetServerData( Edit1.Text );
DataModule1.ClientDataSet1.Open;
아래처럼 위치를 바꾸어서 하니 데이터가 이상없이 검색됩니다.
Server.GetServerData( Edit1.Text );
DataModule1.ClientDataSet1.Close;
DataModule1.ClientDataSet1.Open;
그러나 또 다른 문제점 발생
프로그램을 실행해서 조회 버튼을 클릭하면 검색이 않되고,
조회 버튼을 한번 더 클릭하면 검색이 됩니다.
이런 경우는 어떻게 해결해야할지 난감합니다.