参数没定义
tquery1.params.createparam

解决方案 »

  1.   

    很多东西根本就是画蛇添足,实际上只要
    var sql_str:string;
    begin
      sql_str:='select * from table1 where birthday=:this_birthday';
      tquery1.close;
      tquery1.sql.clear;
      tquery1.sql.add(sql_str);
      tquery1.paramsbyname('this_birthday').asdatetime:=随便一个日期;  
      //tquery1.open;
    end;
      

  2.   

    楼上的chechy(chechy)我只是想了解一下对DATATYPE的使用,而不是有关TQUER的使用。RIGHT?
    上面的例子只是我随便写的,我想自己还不至于苯到要去写这么罗嗦的程序  ^-^
      

  3.   

    那么我告诉你,关于Param的Datatype完全是人工决定的,与后台数据无关,也就意味着你在Object Inspector怎么指定,那么值就是什么。缺省就是Unknown。这个与Field的Datatype有本质区别。
      

  4.   

    chechy在DELPHI的帮助中有关PARAM的使用方法是这样的(帮我找找原因):
    This example fills in the parameters of a query from the entries of a list box.var  I: Integer;
      ListItem: string;
    begin
      for I := 0 to Query1.ParamCount - 1 do
      begin
        ListItem := ListBox1.Items[I];
        case Query1.Params[I].DataType of
          ftString:
            Query1.Params[I].AsString := ListItem;
          ftSmallInt:
            Query1.Params[I].AsSmallInt := StrToIntDef(ListItem, 0);
          ftInteger:
            Query1.Params[I].AsInteger := StrToIntDef(ListItem, 0);
          ftWord:
            Query1.Params[I].AsWord := StrToIntDef(ListItem, 0);      ftBoolean:
            begin
              if ListItem = 'True' then
                Query1.Params[I].AsBoolean := True
              else
                Query1.Params[I].AsBoolean := False;
            end;
          ftFloat:
            Query1.Params[I].AsFloat := StrToFloat(ListItem);
          ftCurrency:
            Query1.Params[I].AsCurrency := StrToFloat(ListItem);
          ftBCD:
            Query1.Params[I].AsBCD := StrToCurr(ListItem);
          ftDate:        Query1.Params[I].AsDate := StrToDate(ListItem);
          ftTime:
            Query1.Params[I].AsTime := StrToTime(ListItem);
          ftDateTime:
            Query1.Params[I].AsDateTime := StrToDateTime(ListItem);
        end;
      end;
    end;上面的例子在给PARAMS[I]指定类型以前就已经通过 Query1.Params[I].DataType 得到了该PARAM的类型了,我就是看了该帮助的才联想到也许不用很麻烦的就可以在给一个字段付值时候,动态判断其字段类型的(原先打算用的方法是,写个函数返回表结构中查找到该字段的类型,再做决定)。上面的例子正确吗?
      

  5.   

    上面的例子正确。但实际写程序时不需要那么复杂。
    Param是Input的,所以类型是你自己可以决定的。而Field是Output的,那么类型你就无权决定。
      

  6.   

    我怎么感觉好象这样一来,PARAMS 的 DATATYPE 启不是没有任何作用拉?
    ---我想通过PARAMS[I]的DATATYE 测到表中对应字段的类型,再动态的为为该PARAM[I]指定类型ADO空间既然可以作到这一点(ADO 所有只需:PARMS[I].VALUE()就行了 ),那么它就应该有这样的动态判断及赋予指定字段类型的能力。
      

  7.   

    是这样的。其实Params[i].AsString已经能接纳很多类型了,如果你不放心。那么用Params[i].Value,它通吃。
      

  8.   

    其实是这样的,我希望能通过判断字段的类型,然后显示相应的控件供客户使用(所以 必须返回正确的字段类型,看来只好写代码去实现了)比如:客户选择的字段是DATETIME型的则:显示MaskEdit1控件给客户输入参数值。
    客户选择的字段是float型的则:显示floatEdit1控件(我自己改装的控件)给客户输入参数值。......很感谢chechy的回复,加分拉.thanks