怎样在delphi里生成一个sql server的存储过程?即存储过程在前台程序动态生成。
解决方案 »
- 如如用一个数字来得到Memo中的截取数值???
- 请大家帮帮忙,看看这些备份代码的问题…
- 关于Delphi中的一个Procedure(高分求教)
- 如何动态生成access数据库,最好有源码
- 九局下半(人生就象一场棒球比赛)
- 关于DevExpress QuantumGrid
- 请教高手我想在关闭机器时运行某个程序
- 热切关注,只要肯触电,终究会撞出火花的!如果是真正的delphi程序员快点拿出行动吧?刚才地址有误很抱歉。
- 请问怎样获取一个系统(如win2000)中已经注册的文件类型的图标!
- 请问如何遍历一个网段的所有IP
- Delphi.NET下不能用的东东
- 再次请教!!如何将已存在的paradox表aa.db的结构复制到bb.db中?
不过想当然认为应该给静态创建是一样的吧;
with adoquery1 do
begin
close;
sql.clear;
sql.text := 'create proc proc_name ..';
execsql;
end;你试试看;关注高手的解答。。
我常这么做。
每次为客户新建系统时候需要生成数据库的存储过程,就是用DELPHI做一个提交工具,把这些SQL语句提交就行了。
只需注意“go”是查询分析器用的分界符,不是合法的SQL语句。
CheckCount:integer):Boolean;
var
Params: TParams;
begin
Params := TParams.Create(nil);
try
if SP.Active then
SP.Close;
SP.StoredProcName:=StoredProcName;
SP.CopyParams(Params);
if CheckCount>=0 then //检查参数的个数是否符合前台程序的要求//
begin
if SP.Params.Count=CheckCount then
result:=true
else
result:=false;
end
else
begin
result:=true;
end;
finally
Params.Free;
end;
end;
CREATE PROCEDURE ZchtMoneyHand @jieZhiDate varchar(10),@ziJinHandLv decimal(18,6),@buTieDay int,
@pianqu varchar(100),@yunyingShang varchar(100),@productType varchar(100),@firstDayInYear varchar(10)
ASdeclare @cndtnStr1 nvarchar(1000)
set @cndtnStr1=''if (@yunyingShang<>'')
set @cndtnStr1=@cndtnStr1+' A.yunyingShang like ''%'+@yunyingShang+'%'' and '
if (@pianqu<>'')
set @cndtnStr1=@cndtnStr1+' A.pianqu like ''%'+@pianqu+'%'' and '
if (@productType<>'')
set @cndtnStr1=@cndtnStr1+' A.productType like ''%'+@productType+'%'' and '
if (@cndtnStr1<>'')
set @cndtnStr1=' and '+LEFT(@cndtnStr1,LEN(@cndtnStr1)-4)
declare @mainStr1 nvarchar(4000)
declare @mainStr2 nvarchar(4000)
declare @mainStr3 nvarchar(4000)set @mainStr1='--省略---';
set @mainStr2='--省略---';
set @mainStr3='--省略---';exec (@mainStr1+@mainStr2+@mainStr3+@cndtnStr1)在delphi里运行的时候报错说参数未赋值(注:这个存储过程是完全正确的),而创建那种非动态字符串构造的存储过程就不会出错(因为其中不需要exec).请问你们有没遇到这种问题,如何解决?谢谢!
假定我们已有一个名为“mysp.sql”的文件,里面的内容如下:if exists(select * from sysobjects where name='my_proc')
drop proc my_proc
go
create proc my_proc as select 'Hello!'这是一个示例,实际应用于这个文件可能会很长,包含很多段。在查询分析器里可以装入这个SQL文件并正确执行它,执行后就生成了一个名为my_proc的存储过程。如果想在DELPHI里用,那么要注意,go这一行,其实是查询分析器用的,用来分开必须分开的SQL语句,比方说create proc必须是第一句SQL语句,所以它前面要用go来与上面的SQL语句分开。
所以在DELPHI里,不能简单地:
with adoquery1 do
begin
close;
sql.clear;
sql.LoadFromFile('mysql.sql');
execsql;
end;
这样做执行到GO语句时,就会提示无效的SQL语句。
正确的做法是:把.SQL文件用LoadFromFile方法装入到一个TStringList中,然后一行一行地加到ADOQuery的SQL中,加到“go”这一句就停止,执行SQL后(ExecSQL),再重新装入后面的SQL语句,循环处理,直到所有SQL语句被处理完成。