我写了个简单的线程,主要是在数据库的检索某条数据,以为可能很多人同时操作,所以我在COM对象里面用线程,我的COM其实是个COM组件之类的,ASP中可以调用,这一点很好,每问题,但是我先改造成检索某条数据的时候用线程,但数据无法回送给我,代码如下(只简单列出线程部分)type   //线程检索作用
   TQueryThread=class(TThread)
   private
   fs:widestring;
   fa:widestring;
   fb:widestring;
   fc:widestring;
  protected
  procedure Execute;override;
  public
  constructor Create(Suspended:Boolean;s:widestring;const stra, strb,
  strc: WideString);
  end;下面
implementation
{$R *.DFM}
constructor TQueryThread.Create(Suspended:Boolean;s:widestring;const stra, strb,
  strc: WideString);
begin
inherited Create(Suspended);
fs:=s;
fhpzl:=strhpzl;
fhphm:=strhphm;
fclsbdh:=strclsbdh;
FreeOnTerminate:=True;
end;procedure TQueryThread.Execute;
var adoconnection:tadoconnection;adoquery:tadoquery;
begin
//fs无法返回数据
if  Terminated then exit;
//CoInitialize(nil);
ADOConnection:=tADOConnection.Create(nil);
adoconnection.LoginPrompt:=false;
ADOConnection.Close;
ADOConnection.ConnectionString:='Provider=MSDAORA.1;Password=1;User ID=temp;Data Source=orcl';
//连接ORACLE
 adoquery:=TADOQuery.Create(nil);
  adoquery.Connection:=adoconnection;
  adoquery.SQL.Text:='select a,b,c from Vehicle where (a='''+fa+''' and b='''+fb+''') or c ='''+fc+'''';
  try
    adoquery.Open;
    fs:=Trim(adoquery.FieldByName('a').AsString)+','+
    Trim(adoquery.FieldByName('b').AsString)+','+
      Trim(adoquery.FieldByName('c').AsString);
//我需要返回FS的值是多少
      except on e:exception do
       begin
       fs:='-2,错误信息:'+e.Message;
       adoquery.Close;
       adoquery.Free;
       exit;
       end
   end;
   if adoquery.IsEmpty then fs:='-3';
    adoquery.Close;
    adoquery.Free;
    adoconnection.close;
    adoconnection.free;
end;如果线程写在普通的FORM中,并且s换成MEMO,后面线程CREATE的时候具体给出FORM上的MEMO(如MEMO),则正常,现在的问题是我在后面另外一个自定义的函数里面调用线程的时候
var s:widestring; 
TQueryThread.Create(false,s,strHpzl,strHphm,strClsbdh);
//调用后,S没有值,但实际查询的结果是有值的
//感觉S没传回数值过来,为什么?哪位高知解决的办法,因为是在MOUDLE里面用,你可别告诉我拖一个MEMO控件进去,那是不可能的(数据模块里面怎么能拖MEMO!!!,呵呵,不可能)
 result:='开始'+s+'结束';