公司有一个系统要向另一个系统中传数据,一个是用asp做的,另一个用delphi做的
要将delphi程序数据库中的数据传到asp程序的数据库中,通过asp的querystring方式来传的
通过 shellexecute的方式,但这样每传一次都会打开一个IE窗口,比较耗费服务器的资源,请问有什么好办法吗?
不能通过WebService的方式,
不通过 findwindow来关闭IE,不知道indy里有控件来实现这个功能吗?
谢谢,急求

解决方案 »

  1.   


    方法巨多,仅举一例。象你说的ShellExecute打开IE,以及WebBrowser,只能是比较低级的做法控件:idHTTPprocedure TForm1.Button1Click(Sender: TObject);
    var
      SS : TStringList;
    begin
      SS := TStringList.Create;
      SS.Add('ID=1');
      //有多个需要提交的QueryString,就继续Add  Self.IdHTTP1.Post('http://localhost/xyz/answer.asp', SS);  SS.Free;
    end;
      

  2.   


    忘记说:上面实现的是 http://localhost/xyz/answer.asp?ID=1  这样的
      

  3.   

    那楼上老大帮忙看下哪有内存泄露
    procedure TFrmMain.TDBTimer(Sender: TObject);
    var Url:TStringList;
    begin
      //刷新记录
      with DataM.ADQTrans do
      begin
        close;
        sql.Clear;
        sql.Add('SELECT * FROM ql_hospital');
        open;
      end;  if DataM.ADQTrans.RecordCount>0 then
      begin
        EdtLog.Text:=EdtLog.Lines.Text+'数据库中有新记录'+IntToStr(DataM.ADQTrans.RecordCount)+'条  '+FormatDateTime('yyyy-mm-dd hh:mm:ss',now())+#13#10;    DataM.ADOCn.BeginTrans;
        try
          //插入
          while not DataM.ADQTrans.Eof do
          begin
            with DataM.ADQMove do
            begin
              close;
              sql.Clear;
              sql.Add('INSERT INTO VoiceBak (QID,name,hosname,Doctors,send_mobile,result,send_time,success_time,send_count,issuccess,issend,InputTime) VALUES (:v1,:v2,:v3,:v4,:v5,:v6,:v7,:v8,:v9,:v10,:v11,:v12)');
              parameters.ParamByName('v1').Value:=DataM.ADQTrans.FieldByName('ID').AsInteger;
              parameters.ParamByName('v2').Value:=DataM.ADQTrans.FieldByName('name').AsString;
              parameters.ParamByName('v3').Value:=DataM.ADQTrans.FieldByName('hosname').AsString;
              parameters.ParamByName('v4').Value:=DataM.ADQTrans.FieldByName('Doctors').AsString;
              parameters.ParamByName('v5').Value:=DataM.ADQTrans.FieldByName('send_mobile').AsString;
              parameters.ParamByName('v6').Value:=DataM.ADQTrans.FieldByName('result').AsString;
              parameters.ParamByName('v7').Value:=DataM.ADQTrans.FieldByName('send_time').AsDateTime;
              parameters.ParamByName('v8').Value:=DataM.ADQTrans.FieldByName('success_time').AsDateTime;
              parameters.ParamByName('v9').Value:=DataM.ADQTrans.FieldByName('send_count').AsInteger;
              parameters.ParamByName('v10').Value:=DataM.ADQTrans.FieldByName('issuccess').AsInteger;
              parameters.ParamByName('v11').Value:=DataM.ADQTrans.FieldByName('issend').AsInteger;
              parameters.ParamByName('v12').Value:=DataM.ADQTrans.FieldByName('InputTime').AsDateTime;
              ExecSql;
            end;
            //删除
            with DataM.ADQMove do
            begin
              close;
              sql.Clear;
              sql.Add('DELETE FROM ql_hospital WHERE ID=:v1');
              parameters.ParamByName('v1').Value:=DataM.ADQTrans.FieldByName('ID').AsInteger;
              ExecSql;
            end;        Url:=TStringList.Create;
            Url.Add('usernames='+Trim(DataM.ADQTrans.FieldByName('name').AsString));
            Url.Add('&hosname='+Trim(DataM.ADQTrans.FieldByName('hosname').AsString));
            Url.Add('&doctors='+Trim(DataM.ADQTrans.FieldByName('Doctors').AsString));
            Url.Add('&caller='+Trim(Phone));
            Url.Add('&send_mobile='+Trim(DataM.ADQTrans.FieldByName('send_mobile').AsString));
            Url.Add('&result='+Trim(DataM.ADQTrans.FieldByName('result').AsString));
            Url.Add('&send_time='+Trim(DataM.ADQTrans.FieldByName('send_time').AsString));
            http.Post('http://'+Trim(IP)+'/qlrecv.asp',Url);
            Url.Free;
            
            EdtLog.Lines.Text:=EdtLog.Lines.Text+'发送给'+DataM.ADQTrans.FieldByName('send_mobile').AsString+'语音信息写入历史表成功!   '+FormatDateTime('yyyy-mm-dd hh:mm:ss',now())+#13#10;        DataM.ADQTrans.Next;
          end;
          DataM.ADOCn.CommitTrans;
        except
          DataM.ADOCn.RollbackTrans;
          raise;
          application.MessageBox('语音信息发送失败,请重启!','提示',mb_ok+mb_iconinformation);
          application.Terminate;
        end;
      end
      else
      begin
        EdtLog.Lines.Text:=EdtLog.Lines.Text+'数据库中无新记录    '+FormatDateTime('yyyy-mm-dd hh:mm:ss',now())+#13#10;
        exit;
      end;
    end;
      

  4.   

      //刷新记录 
      with DataM.ADQTrans do 
      begin 
        close; 
        sql.Clear; 
        sql.Add('SELECT * FROM ql_hospital'); 
        open; 
      end; 
    需要释放吗,如何释放
      

  5.   

    楼主啊,年轻时我干过一件缺德事:那时我在农村,牵牛耕地。我拿一把鲜草,放在牛嘴巴前方。牛想吃草,就向前拉犁;但我不让他吃到草......这样,牛就被一把鲜草吸引着,耕了一段又一段.....我回答的是一个网络控件的使用问题,怎么又跳出一个数据控件的使用呢?外带给查有没有内存泄露......给我一个强烈的感觉就是:我是那头牛?“分”是那把鲜草?-----您也这样认为吗?CSDN大家都有一个约定俗成的规矩:一个问题一个贴子...一码归一码....一事归一事...