" class EolesysError wih message '응용프로그램이 입력 동기화된 호출을 전달하고 있으므로 나가는 호출을 할수 없습니다.' process stopped use stepor run to continue. "
라는 메세지는 어떻게 처리를 해야 하는지..
발생 원인은 RS232로 입력을 계속 받고 있는 과정에서 서버로 자료를 올릴때 ClientDataSet1.Open 를 하면 Open을 하면서 이러한 메세지가 발생을 하는데 처리는 어떻게 하는지 알수가 없습니다.  
원래 동시에 자료를 보낼수 없다는 말인지 어떻게 해야 하나요?
소스는 다음과 같습니다... 고수님의 한수를 부탁드립니다.
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  CPort, StdCtrls, Db, DBTables, ComCtrls, DBClient, MConnect, ExtCtrls;
type
  TForm1 = class(TForm)
    Memo2: TMemo;
    Memo3: TMemo;
    basesql: TQuery;
    Memo4: TMemo;
    DateTimePicker1: TDateTimePicker;
    DCOMConnection1: TDCOMConnection;
    ClientDataSet1: TClientDataSet;
    Memosql: TMemo;
    ComPort1: TComPort;
    Button4: TButton;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure datareceivetoarray;
    procedure dayreturn;
    procedure FormShow(Sender: TObject);
    procedure ComPort1RxChar(Sender: TObject; Count: Integer);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  dayReturn_real : string;
  TpublicRno : integer;
implementation
{$R *.DFM}
procedure Tform1.datareceivetoarray;
var loop,new_rno : integer;
    sDate,sID,WBC,RBC,HGB,HCT,MCV,MCH,MCHC,PLT,LY1,LY2 : string;
begin
   for loop:=1 to length(memo4.text) do begin
       if TRIM(copy(memo4.text,loop,4)) = 'TEST' then begin  
          sID:=TRIM(copy(memo4.text,loop+8,3));
       end;
       if TRIM(copy(memo4.text,loop,4)) = 'DATE' then begin
          sDate:=TRIM(copy(memo4.text,loop+7,9));
       end;
   end;
 
   clientdataset1.Close;
   memosql.Clear;
   memosql.Lines.Add('select max(rno) mRno from data');
   clientdataset1.DataRequest(memosql.lines.text);
   clientdataset1.open;    <------여기에서 위에서 서술한 에러가 발생한다.
   with clientdataset1 do
   begin
     new_Rno:=Fieldbyname('mRNO').Asinteger+1;
   end;
   memosql.Clear;
   memosql.Lines.Add('insert into T540');
   memosql.Lines.Add('(NNO,NDATE)');
   memosql.Lines.Add(' values');
   memosql.Lines.Add('('+''''+sID+''''+','+''''+sDate+''''+')');
   DCOMConnection1.AppServer.execsql(memosql.text);
end;
procedure TForm1.FormShow(Sender: TObject);
begin
  comport1.Connected:=true;
end;
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);  //RS232C PORT를 이용해서 자료를 받는다.
var Str,str3,str4 : String;
begin
  str3:='';
  ComPort1.ReadStr(Str, Count);
  Memo2.Text := Memo2.Text + Str;
  str4:=str4+str[iii];
  memo4.Text:=memo4.text+str4;
  datareceivetoarray;   //자료를 받아서 바로 원하는 자료를 추출하는 루틴으로 보낸다.
end;
end.
			 
	
	
    
    
	
	
    
    
    
tthread에 synchronize에서 메인 쓰레드 동기화를 위해서
SendMessage를 부르는데요. 이것이 문제로 보이네요.
(입력동기화된 호출이 아마도 SendMessage라고 보입니다.)
비록 정확히 동기화는 안되겠지만 사용자 정의 메시지를 사용해서
PostMessage 로 처리하는 것이 맞겠습니다.
주의 할점은 PostMessage시에 사용할 데이터를 잘관리하셔야
정보를 잃어버리는 경우가 없겠습니다.
저라면 PostMessage시에 동적 메모리를 할당해서 내용을 넣고
그 내용을 wparam이나 lparam에 넣고
사용자 메시지 처리부분에서 메모리 해제를 하는 방법을
사용할것 같습니다.
자세한 것은 thread처리에 대한 부분을 알아보시길 바랍니다.