存储过程Delphi中的文本保存

时间:2013-12-25 11:40:16

标签: oracle delphi delphi-7 delphi-2010 bde

我需要使用TQuery从delphi创建存储过程到oracle中。 但是SQL.text很难理解。 有没有办法将直接文本存储为带引号的pl / SQL?

'create or replace '+
'function WholeTableRecovery(i_tablname IN varchar) return varchar '+
'as '+

是否可以使用资源文件

提前致谢

1 个答案:

答案 0 :(得分:4)

由于您在标签中使用Delphi 2010(我这里没有Delphi 7进行测试),一种舒适的方法是将SQL存储在单独的文本文件中,同时将RC文件与包含资源编译器指令的RC文件一起存储。 /> enter image description here

RC文件将包含要与要包含要存储的SQL的文件名一起使用的资源的名称。示例的内容如下所示:

My_First_Speaking_ResourceName RCDATA "MyFirstSQL.sql"
My_Second_Speaking_ResourceName RCDATA "MySecondSQL.sql"

如果您包含包含RC的资源并产生RES,则无需直接调用BRCC32

{$R 'MySQLResources.res' 'resources\MySQLResources.rc'}

为方便起见,您可以包装TResourceStream的用法,示例中显示的方式将使用Strings,您可能也直接使用流,如TLama MyQuery.SQL.LoadFromStream(rs);

所述
implementation

{$R *.dfm}

{$R 'MySQLResources.res' 'resources\MySQLResources.rc'}

function LoadSqlResource(resourceName: string): string;
var
  rs: TResourceStream;
  sl: TStringList;
  s : string;
begin
    sl := TStringList.Create;
  try
    rs := TResourceStream.Create(hinstance, resourceName, RT_RCDATA);
  try
    rs.Position := 0;
    sl.LoadFromStream(rs);
    Result := sl.Text;
  finally
    rs.Free;
  end;
  finally
    sl.Free;
  end;
end;

procedure  CallOneSql(Q:TADOQuery;ResourceName:String);
begin
  Q.SQL.Text := LoadSqlResource('My_First_Speaking_ResourceName');
  Q.ExecSQL;
end;

通过CallOneSql(MyQuery,'My_First_Speaking_ResourceName');

之类的通话

确保创建项目,而不仅仅是在对RC或SQL文件进行更改时进行编译。