在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;--执行此句报错
现要通过DELPHI调用他,只用Tquery
我在程序里边这样写的,但老是说语句不合法,请帮忙.//本来scmd是根据一些参数确定的,这里就直接赋值了
scmd:='A(1,''20030301'',''20030331'')';
query1.sql.clear;
query1.sql.add('execute '+scmd);
query1.prepare;
query1.execsql;--执行此句报错
并不能因为有其他的办法我就不解决遇到的问题
继续求解
帮你顶!!!!!!
用这个方法试试:
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;
其他可能是不支持
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;
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;
相信你也能成功
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;