now是数据库可识别的函数,这里不表示delphi的函数now,比如在sqlserver中now就不可以了,必须用getdate() sql:='insert into traffic(ip,port,ifoutoctets,ifinoctets,cdate) values('''+变量+''',88,89,0,Now)';
如是xxxx型,你更要将它变为字符型 如变量为整型 你应该变为 sql:='insert into traffic(ip,port,ifoutoctets,ifinoctets,cdate) values('+inttostr(变量)+',88,89,0,Now)' 2。请问大侠怎么嵌套变量,而now函数为什么就可以直接写了 ----------------- 因为数据库(sql,oracle,bde)本身支持now函数
你可以用参数: sql:='insert into traffic(ip,port,ifoutoctets,ifinoctets,cdate) values(:ip,88,89,0,Now)'; 这里面:ip就是参数,然后再用 ADOQuery1.Parameters.ParamByName('ip').Value := 你要的值;
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)效率会很底。
------------
看你的变量类型
如是日期型你要将它变为
sql:='insert into traffic(ip,port,ifoutoctets,ifinoctets,cdate) values('''+变量+''',88,89,0,Now)';
------------
看你的变量类型
如是日期型你要将它变为字符型
如是整型,你也要把它变为字符型
如是xxxx型,你更要将它变为字符型
如变量为整型 你应该变为
sql:='insert into traffic(ip,port,ifoutoctets,ifinoctets,cdate) values('+inttostr(变量)+',88,89,0,Now)'
2。请问大侠怎么嵌套变量,而now函数为什么就可以直接写了
-----------------
因为数据库(sql,oracle,bde)本身支持now函数
sql:='insert into traffic(ip,port,ifoutoctets,ifinoctets,cdate) values(:ip,88,89,0,Now)';
这里面:ip就是参数,然后再用
ADOQuery1.Parameters.ParamByName('ip').Value := 你要的值;
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)效率会很底。