需要將下面這段SQL在Delphi中表達出來:BEGIN
DELETE FROM C_ROUTE_NAME_T WHERE ROUTE_CODE=766;
INSERT INTO C_ROUTE_NAME_T VALUES(766,'321',1,sysdate);
DELETE FROM C_ROUTE_CONTROL_T WHERE ROUTE_CODE=766;
INSERT INTO C_ROUTE_CONTROL_T VALUES (766,'0','1/KRC_IN',0,1,'0',sysdate);
END;其中兩個sysdate應該用什麽函數?我直接由Now表示,會報字符類型錯誤

解决方案 »

  1.   

    請各位大俠幫忙解答,感謝!我的代碼如下:
       SQL:='';
       SQL:='BEGIN'+#13#10;
       SQL:=SQL+'DELETE FROM C_ROUTE_NAME_T WHERE ROUTE_CODE='+RC+';'+#13#10;   //RC為整型變量
       SQL:=SQL+'INSERT INTO C_ROUTE_NAME_T VALUES('+RC+','''+SUB_ROUTE_NAME(NODE.Text)+''','+'1'+','+now+');'+#13#10;             //這裡我用now函數試驗,不可行;  
           //SUB_ROUTE_NAME(NODE.Text)為一個字符串  
       SQL:=SQL+'DELETE FROM C_ROUTE_CONTROL_T WHERE ROUTE_CODE='+RC+';'+#13#10;   SQL:=SQL+'INSERT INTO C_ROUTE_CONTROL_T VALUES (';
       SQL:=SQL+RC                +','''+
                Node.Item[J].Text +''','''+   //Sequence是一個字符串             
                Node.Item[I].Text +''','+     //Sequence是一個字符串
                '0'               +','+
                IntToStr(Sequence)+','''+   //Sequence是整形變量
                '1'               +''','+
                datetostr(now)+''+timetostr(now)+');'+#13#10;   //我也這樣試過,但是在執行ExecSQL的時候會報錯
       SQL:=SQL+'END;';
         Exec_Query.SQL.Clear;
         Exec_Query.SQL.Add(SQL);
         Exec_Query.ExecSQL;
      

  2.   

    Exec_Query.SQLText:=
    'BEGIN' + #13#10 +
    '  DELETE FROM C_ROUTE_NAME_T WHERE ROUTE_CODE=:P_CODE;' + #13#10 +
    '  INSERT INTO C_ROUTE_NAME_T VALUES(:P_CODE,:Parm2,1,sysdate);' + #13#10 +
    '  DELETE FROM C_ROUTE_CONTROL_T WHERE ROUTE_CODE=:P_CODE;' + #13#10 +
    '  INSERT INTO C_ROUTE_CONTROL_T VALUES (:P_CODE,:Parm3,:Parm4,0,1,''0'',sysdate);' + #13#10 +
    'END;';
    然后声明变量,赋值,执行即可,没有必要拼接字符串的。
    另外你的Query是什么类型的?ADOQuery or else
      

  3.   

    对不起,笔误,应该是:
    Exec_Query.SQL.Text:=
    'BEGIN' + #13#10 +
    ' DELETE FROM C_ROUTE_NAME_T WHERE ROUTE_CODE=:P_CODE;' + #13#10 +
    ' INSERT INTO C_ROUTE_NAME_T VALUES(:P_CODE,:Parm2,1,sysdate);' + #13#10 +
    ' DELETE FROM C_ROUTE_CONTROL_T WHERE ROUTE_CODE=:P_CODE;' + #13#10 +
    ' INSERT INTO C_ROUTE_CONTROL_T VALUES (:P_CODE,:Parm3,:Parm4,0,1,''0'',sysdate);' + #13#10 +
    'END;';
    Exec_Query.Parameters.ParamByName('P_CODE').Value:=RC;
    ......
    Exec_Query.ExecSQL;
      

  4.   

    To zdgdh:1.用的是Query组件;2.其实我对于这里面的引号的用法比较难以分辨~还有我今天发现貌似引号之间有没有“+”号也会有区别~下次再研究;3.我的这段SQL后面每一句是要根据不同条件增加的~所以这样直接写好像不是太好哎~所以我应该还是会一句一句的分开写;4.所以有不加在text中的写法么?
    To All:感谢所有回答帮助我的人~
      

  5.   

    sysdate应该是oracle数据库服务器的日期时间,而now是客户机的日期时间,
    应该先执行 select sysdate from dual得到服务器的日期时间,并保存至一datetime变量即可,
    楼主为什么还要用datetostr(now)+''+timetostr(now)+') 这样的函数呢?
      

  6.   

    '... (766,''0'',''1/KRC_IN'',0,1,''0'','+Quotedstr(DateTimeToStr(Now))+');';时间用Oracle自带的函数sysdate就好了
      

  7.   


    哇!半夜還沒睡的達人!select sysdate from dual得到的也是一個DATA型變量啊,保存的datatime變量也得要是DATA型的吧?可是我不太清楚這樣的變量怎麼加到SQL中(我直接加進去彙報String和DATA字符型不符的錯誤)
      

  8.   

    [Quote=引用 9 楼  的回复:]
    Delphi(Pascal) code
    '... (766,''0'',''1/KRC_IN'',0,1,''0'','+Quotedstr(DateTimeToStr(Now))+');';Quotedstr(DateTimeToStr(Now))這個欄位是DATA型的哎,這樣轉換過後該怎樣轉會DATA型進行存儲啊!
      

  9.   

    找到辦法了,是我太笨了;還是感謝各位。公布下我的办法:
    '... (766,''0'',''1/KRC_IN'',0,1,''0'','+'sysdate'+');';
    好了,結貼~