为什么我又时候用ParamByName().AsString.....的时候不对啊,而必须用后者啊?

解决方案 »

  1.   

    .AsString表示转换为String,即使是数值。
    .Value取的是Variant,这就会根据接受值的变量的类型做一个转换。
      

  2.   

    Parameters.ParamByName()获得一个TParameter对象
      

  3.   

    我一般用 Parameters[0]这样传,效率高
      

  4.   

    你一个是用的BDE  另外一个用的是ADO吧? 
      

  5.   

    ParamByName().AsString用于向查询器中替换语句中设置的参数.
    用AsString就明确知道ParamByName().AsString:="" 右侧是一个字符串在替换sql语句中参数的时候会"select name from user where id=:pid"替换为
    "select name from user where id='11223' "  而若用其他ParamByName().asInteger 则为"select name from user where id=11223 "这就是只要区别,右侧明确知道来源与一个返回字符串的控件或变量.有的时候右测的值我们不知道类型也不想通过人工来判断.好比函数重载返回的值不确定:
    function getid(username): integer,function getid(username): float,function getid(username): string.名称一样但返回的值却只有运行时确定.
    还有最重要一点,asValue通常我们都有一个很大的误区,比如用于sql server或oracle 中日期型参数比较的时候有时候因为采用.asDatetime或asDate时候日期条件不起作用而改用AsValue其实不然.在sql server和oracle 中日期存放浮点格式或其他格式.如果采用日期比较如果格式不对很容易出错,不同的编译程序对日期转化有时候也不一定满足所有条件.所以改"select * from user user_date<=:pDate"为"select * from user user_date - :pDate <= 0"其中原由理解吧!~累死了.....