在oracle中有一个存储过程 A(1,'20030301','20030331');
现要通过DELPHI调用他,只用Tquery
我在程序里边这样写的,但老是说语句不合法,请帮忙.//本来scmd是根据一些参数确定的,这里就直接赋值了
scmd:='A(1,''20030301'',''20030331'')';
query1.sql.clear;
query1.sql.add('execute '+scmd);
query1.prepare;
query1.execsql;--执行此句报错

解决方案 »

  1.   

    为什么不用TStoredProc?使用方法自己查帮助,我懒得写了。
      

  2.   

    TStoredProc 自然是会用了,不过我要知道的是我为什么出错
    并不能因为有其他的办法我就不解决遇到的问题
      

  3.   

    scmd:='A 1,''20030301'',''20030331''';
      

  4.   

    用了blueshu(绝对是菜鸟) 的方法还是报错
    继续求解
      

  5.   

    没有用Query调用过!高手呢?
    帮你顶!!!!!!
      

  6.   


    用这个方法试试:
    scmd:='A(1,:a,:b)';
    query1.sql.clear;
    query1.sql.add('execute '+scmd);
    query1.params[0].asstring:='20030301';
    query1.params[1].asstring:='20030301';
    query1.prepare;
    query1.execsql;
      

  7.   

    TStoredProc
    其他可能是不支持
      

  8.   

    可以使用TQuery,要注意一下各种数据类型的不同表示,可以参考Format的帮助。
    query1.sql.clear;
    Query1.Sql.Add(Format('%s ''%s'',''%s'',''%s'',''%s'',''%s'',%d',
        ['OW_Qry_ProducePlan', trim(owProducePlanID.Text),
        trim(owWaferProcessID.Text), sEmployeeID,
        FormatDateTime('YYYYMMDD',BeginDate.Date),
        FormatDateTime('YYYYMMDD',EndDate.Date),0]));
    query1.prepare;
    query1.execsql;
      

  9.   

    这个我做过,给你个例子,照着做肯定可以
    qry.Close;
      qry.SQL.Clear;
      qry.SQL.Add('Begin');
      qry.SQL.Add('EXP_FROM_UNIX_XS(:gsdw,:readdate,:retint,:retmsg);');
         //这是过程名,注意有‘;’号
      Qry.SQL.Add('End;');//这里也有';’号
      qry.Parameters[0].Value := gsdw;
      qry.Parameters[1].Value := readate;
      qry.Parameters[2].Direction := pdOutput;//输出参数
      qry.Parameters[3].Direction := pdOutput;
      qry.Parameters[2].Value := '####';//输出参数赋值,用#代替
      qry.Parameters[3].Value := '####';
      qry.Prepared;
      qry.ExecSQL;
    相信你也能成功
      

  10.   

    blueshu(绝对是菜鸟),kangancn(孤独虾) 你们的方法都试过,不行
    xxmmmx(踢踏) ,你知所以要格式化数据类型,是因为你的参数是字符型而不是日期型,其实你那格式化完全可以在外边做的
    按照 bee2518(真棒)  的方法确实可行,代码公布如下:scmd:='A(1,''20030301'',''20030331'')';
    query1.sql.clear;
    query1.sql.add('begin);
    query1.sql.add(scmd+';');
    query1.sql.add('end;');
    query1.prepare;
    query1.execsql;