需要將下面這段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表示,會報字符類型錯誤
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表示,會報字符類型錯誤
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;
'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
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;
To All:感谢所有回答帮助我的人~
应该先执行 select sysdate from dual得到服务器的日期时间,并保存至一datetime变量即可,
楼主为什么还要用datetostr(now)+''+timetostr(now)+') 这样的函数呢?
哇!半夜還沒睡的達人!select sysdate from dual得到的也是一個DATA型變量啊,保存的datatime變量也得要是DATA型的吧?可是我不太清楚這樣的變量怎麼加到SQL中(我直接加進去彙報String和DATA字符型不符的錯誤)
Delphi(Pascal) code
'... (766,''0'',''1/KRC_IN'',0,1,''0'','+Quotedstr(DateTimeToStr(Now))+');';Quotedstr(DateTimeToStr(Now))這個欄位是DATA型的哎,這樣轉換過後該怎樣轉會DATA型進行存儲啊!
'... (766,''0'',''1/KRC_IN'',0,1,''0'','+'sysdate'+');';
好了,結貼~