买李维的<Delphi 5.x 分布式多层应用系统篇>看,你就有答案了

解决方案 »

  1.   

    TDatasetProvider.Option里有一个AllowCommand(属性全称记得不是很准确,反正就是“允许命令”的意思)属性设置为TRUE
      

  2.   

    把adoquery1里的sql清掉,用客户端来指定sql语句  
    ClientSet1.close;  
    ClientSet1.DataRequest('select  *  from  表1');  
    ClientSet1.open; 
     
    ClientSet1.close;  
    ClientSet1.DataRequest('select  *  from  表2');  
    ClientSet1.open; 
     
    服务器端出路DataSetProvider的OnDataRequest事件: 
     
    ADOQuery1.Close;    
    ADOQuery1.SQL.Clear;    
    ADOQuery1.SQL.Add(Input)  
    ADOQuery1.Open;(  或  ADOQuery1.Active  :=  True;)    
       
      

  3.   

    shit得很,我的问题只留下了标题,里面的内容全没了。影响了各位的回话!我的问题时这样的
    服务器端:ADOquery,或者ADODataSet,
    客户端:ClientDataset,
    这种情况该如何处理?
    李维的书我看过,我试过了,老是提示错误:至少还有一个未知信息。
    而且,ClientDataset右键点fetch params,无法出现服务器端的参数。
      

  4.   

    ClientSet1.close;  
    ClientSet1.commandtext:='select * from xxx'; 
    ClientSet1.open; 
    即可;
     
      

  5.   

    DataSetProvider的Option设置好了,ADOQuery根本不用做任何操作,只要在ClientDataSet上下SQL命令就可以了。
    ADOQuery带参数的话,设计期间必须在前端指定Params[i]的数据类型和Input还是Output,不能是默认的Unkown
      

  6.   

    你在后台的设计期间必须指定Params[i]的数据类型和Output/Input,尤其是输入输出不能是Unknow
      

  7.   

    如果Option得到好的指定的话(AllowCommandText=TRUE),根本不用在后台写什么清空sql的代码,直接在clientdataset下达命令就可以了,我用这个做websnap都没有问题
      

  8.   

    如果Option得到好的指定的话(AllowCommandText=TRUE),根本不用在后台写什么清空sql的代码,直接在clientdataset下达命令就可以了,我用这个做websnap都没有问题
      

  9.   

    我试过好几种情况。
    1。服务器端:AdoDataset, 不设置动态参数
       客户端:ClientDataset,commandText:='select * from table1 where dtt <=:param1 and dtt>=:param2';设置动态参数
      程序中  ClientDataset.close;           
               ClientDataset.parms.parambyname('param1').AsDateTime:=DateTime1;
             ClientDataset.parms.parambyname('param2').AsDateTime:=DateTime2;
       ClientDataset.Open.
    但是总出现提示:至少还有一个参数没有被指定值。
    很莫名其妙。
      

  10.   

    AllowCommandText=TRUE设置没错,参数的类型,size我都注意了,都设置过了。
      

  11.   

    sqlTxt := 'select * from table1 where dtt >=:dtStart 
     and dtt <=:dtEnd ';
     with ClientDataSet1 do
      begin
        Close;
        params.ParseSQL(sqlTxt,true);
        CommandText := sqlTxt;
        paramsByName('dtStart').AsDateTime :=  StrToDateTime('2002-2-1 12:00:00');
        paramsByName('dtEnd').AsDateTime :=  StrToDateTime('2002-2-1 18:00:00');
        Open;
      end;也不行!
      

  12.   

    提示异常EOLEException,出错信息:至少有一个参数没有被指定值!
    真是莫名其妙!
      

  13.   

    在客户端产生sql语句不好,还是把参数传到应用服务器上,再产生sql语句。
    客户端:
            Flag:=-1;
            vData:=VarArrayCreate([0,1],VarVariant);
            vData[0]:=sProjectID;
            vData[1]:=gNode.Text;
            MPObj.GetData(GET_FIELD,vData,Flag);
            if Flag=0 then
            begin
              ClientDataSetField.Data:=vData;
            end else sBarText('取表的字段值的时候发生错误!');应用服务端:
    procedure TCoManPro.GetData(iType: Integer; var vData, Flag: OleVariant);//一个接口
    begin
      Case iType of
        ......
        GET_FIELD:
          GetFieldData(vData,Flag);
        else  end;
    end;procedure TCoManPro.GetFieldData(var vData,Flag:OleVariant);
    var
      StrTemp: WideString;
    begin
      StrTemp:='select * from FIELD ';
      Flag:=-1;
      try
        if VarIsArray(vData) then
        begin
          if vData[0]<>'' then StrTemp:=StrTemp+' where ProjectID='''+vData[0]+'''';    //动态的sql语句
          if vData[1]<>'' then StrTemp:=StrTemp+' and TableName='''+vData[1]+'''';
          StrTemp:=StrTemp+' Order by TableName,OrderID';
          Flag:=AdoQueryOpen(AdoQueryField,StrTemp,false);
          if Flag=0 then vData:=DataSetProviderField.Data;
        end;
      finally
        AdoQueryField.Close;
      end;end;
      

  14.   

    不用那么的复杂吧?直接用SQL语句就行了呀,
    sqlstr:='select * from table where field1='+''''+param1 +''''
            +' ,field2='+''''+param1 +'''';
      

  15.   

    主要是你的时间参数有问题
    考虑用两个时间控件来代替时间参数
    Eg;:CommandText:='select * from student where birthday:=   w';
      

  16.   

    接上:
    CommandText:='select * from student where birthday>=:date1 and birthday<=:date2';
    paramsByName('date1').AsDateTime:=TDateTimePicker1.DateTime;
    paramsByName('date2').AsDateTime:=TDateTimePicker2.DateTime;
    open;