sql:='insert into traffic(ip,port,ifoutoctets,ifinoctets,cdate) values(变量,88,89,0,Now)';请问大侠怎么嵌套变量,而now函数为什么就可以直接写了

解决方案 »

  1.   

    1。请问大侠怎么嵌套变量,而now函数为什么就可以直接写了
               ------------
    看你的变量类型
    如是日期型你要将它变为
      

  2.   

    now是数据库可识别的函数,这里不表示delphi的函数now,比如在sqlserver中now就不可以了,必须用getdate()
    sql:='insert into traffic(ip,port,ifoutoctets,ifinoctets,cdate) values('''+变量+''',88,89,0,Now)';
      

  3.   

    1。请问大侠怎么嵌套变量,而now函数为什么就可以直接写了
               ------------
       看你的变量类型
          如是日期型你要将它变为字符型
          如是整型,你也要把它变为字符型
          
          如是xxxx型,你更要将它变为字符型
    如变量为整型 你应该变为
    sql:='insert into traffic(ip,port,ifoutoctets,ifinoctets,cdate) values('+inttostr(变量)+',88,89,0,Now)'
    2。请问大侠怎么嵌套变量,而now函数为什么就可以直接写了
                             -----------------
    因为数据库(sql,oracle,bde)本身支持now函数
      

  4.   

    你可以用参数:
    sql:='insert into traffic(ip,port,ifoutoctets,ifinoctets,cdate) values(:ip,88,89,0,Now)';
    这里面:ip就是参数,然后再用
    ADOQuery1.Parameters.ParamByName('ip').Value := 你要的值;
      

  5.   

    1。因为Now是一个SQL的函数(大部分比如ACCESS,SQL),返回当前数据服务器时间,所以可以直接出现在SQL语句中.---->1.而now函数为什么就可以直接写了??
    2。SQL中要潜入变量的方法很多,比较通用的是根据类型确定边界符的组合方法,比如上面几位说的,当然也可以使用一个比较通用的方法,比如构造一个如下的函数
    function QoutValue(Value:Variant):String;
    begin
      if VarIsStr(Value) then
        Result:=''''+Value+''''
      else
        Result:=Value;
    end;
    然后以后无论你的变量类型如何都可以正确返回参数的SQL表达,比如:
    楼主的语句可以这么写:
    sql:='insert into traffic(ip,port,ifoutoctets,ifinoctets,cdate) values('+Qout(变量名)+',88,89,0,Now)';
    或者这么写:
    sql:=Format('insert into traffic(ip,port,ifoutoctets,ifinoctets,cdate) values(%s,88,89,0,Now)',[Qout(变量名)]);
    使用第二种方法的好处是代码的可阅读性提高了如下:
    sql:=Format('insert into traffic(ip,port,ifoutoctets,ifinoctets,cdate) values(%s,%s,%s,0,Now)',[Qout(变量名1),Qout(变量名2),Qout(变量名3)]);
    //============================================================
    而另一种方法是使用Borland比较提倡的如楼上所描述的使用Params
    不过这种使用方式在SQL语句固定再使用Prepare SQL时效率好些,否则(SQL语句比较活跃,所使用的数据库引擎不支持Prepare SQL)效率会很底。