ORACLE 9i
DELPHI2007
使用ORACLE 提供的 OraOLEDB 数据库驱动
表结构:
create table LEETEST
(
  AA DATE
)procedure TForm1.Button11Click(Sender: TObject);
var
  s : string;
begin
  s := 'INSERT INTO LEETEST(AA) VALUES  (:A); ';
  with ADOquery1 do
  begin
    close;
    sql.Clear;
    sql.Add(s);
    PARAMETERS.ParamByName('A').Value := DATE();
    EXECSQL;
  end;
end;一运行出现错误提示
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EOleException with message 'ORA-00911: 无效字符'.
---------------------------
Break   Continue   Help   
---------------------------在 SQL PLUS 里执行
INSERT INTO LEETEST VALUES (TO_DATE('2008-02-25','YYYY-MM-DD'));
INSERT INTO LEETEST VALUES (sysdate);
都没问题。

解决方案 »

  1.   

    --测试表
    create   table   LEETEST 
    (
        AA   DATE
    );--delphi插入数据 delphi7
    procedure TForm1.Button1Click(Sender: TObject);
    var
      s:string;
    begin
      s:='INSERT INTO LEETEST(AA) VALUES (:A)';
      with ADOquery1 do
      begin
        close;
        sql.Clear;
        sql.Add(s);
        PARAMETERS.ParamByName('A').Value:= now;//我这里使用的是now
        EXECSQL;
      end;
    end;--执行查询
    select * from leetest
    --查询结果
    2008-2-25 16:22:26
    2008-2-25 16:23:41
    你的问题可能和DATE()获得时间有关
      

  2.   

    DATE()返回的并不是你想要你的字符串吧.而是日期型呢.
      

  3.   

    搞定了。
    问题出在这一句
     s   :=   'INSERT   INTO   LEETEST(AA)   VALUES     (:A);   '; 
    ``````````````````````````````````````````````````````- ^ --   多了一个分号
    正从MSSQL 转ORACLE 不熟啊。
    DATE  和 NOW 都是可以的。