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"其中原由理解吧!~累死了.....
.Value取的是Variant,这就会根据接受值的变量的类型做一个转换。
用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"其中原由理解吧!~累死了.....