V
VGA
Unregistered / Unconfirmed
GUEST, unregistred user!
CREATE PROCEDURE GetNextPicID(
@TableName varchar(15),
@PackAgeNO varchar(4),
@TyperID varchar(4),
@TypeOrder varchar(2),
@PicID int output ) with recompile
AS
declare @STRSQL varchar(2000)
set @STRSQL = ' declare tmpcur cursor for select ' +
' max(文件序号) PicID from ' + @TableName + ' where [一打员]=' + @TyperID +
' and 包号=' + @PackAgeNO + ' and 文件序号 <' + convert( varchar(8), @PicID )
-- print @STRSQL
exec (@STRSQL)
open tmpcur
fetch next from tmpcur into @PicID
close tmpcur
deallocate tmpcur
if @PicID is null set @PicID=0
/*
在查询分析器中执行 是没有问题的
declare @pic_id int
set @pic_id = 4
exec getnextpicid 'pic_1', '1','10','1', @pic_id output
print @pic_id
*/
GO
上面是我的存储过程 在查询分析器里 调用是没有问题的 , 但在DELPHI中调用,提示游标不存在
我是这样写的代码用 SQLQuery (dbexpress)
procedure TForm1.Button3Click(Sender: TObject);
begin
with SQLQuery1 do
begin
Params.Clear;
Params.CreateParam(ftString, '@tablename', ptInput);
Params.CreateParam(ftString, '@PackAgeNO', ptInput);
Params.CreateParam(ftString, '@TyperID', ptInput);
Params.CreateParam(ftString, '@TypeOrder', ptInput);
Params.CreateParam(ftInteger, '@Pic_ID', ptOutput);
Params.ParamByName('@tablename').AsString := 'pic_1';
Params.ParamByName('@TyperID').AsString := '1';
Params.ParamByName('@PackAgeNO').AsString := '1';
Params.ParamByName('@TypeOrder').AsString := '1';
Params.ParamByName('@Pic_ID').AsString := '4';
sql.Text:=
'Exec GetNextPicID tablename, PackAgeNO, TyperID, TypeOrder, pic_id output';
SQLQuery1.ExecSQL();
caption:=IntToStr(Params.Parambyname('@pic_id').Value);
end;
end;
// 使用 TSQLStoredProc (Dbexpress)
procedure TForm1.Button2Click(Sender: TObject);
begin
with SQLStoredProc1 do
begin
Params.Clear;
StoredProcName := 'GetNextPicID';
SchemaName:='dbo';
Params.CreateParam(ftInteger, 'RETURN_VALUE', ptOutput);
Params.CreateParam(ftString, '@tablename', ptInput);
Params.CreateParam(ftString, '@PackAgeNO', ptInput);
Params.CreateParam(ftString, '@TyperID', ptInput);
Params.CreateParam(ftString, '@TypeOrder', ptInput);
Params.CreateParam(ftInteger, '@PicID', ptOutput);
Params.ParamByName('@tablename').AsString := 'pic_1';
Params.ParamByName('@TyperID').AsString := '1';
Params.ParamByName('@PackAgeNO').AsString := '1';
Params.ParamByName('@TypeOrder').AsString := '1';
Params.ParamByName('@PicID').AsString := '4';
ExecProc;
caption := Params.ParamByName('@PicID').AsString;
end;
end;
这两种方法都无法工作!
显示“SQL. State:3400, Sql Error Code16916”
不知错在哪里,怎样写才对?
@TableName varchar(15),
@PackAgeNO varchar(4),
@TyperID varchar(4),
@TypeOrder varchar(2),
@PicID int output ) with recompile
AS
declare @STRSQL varchar(2000)
set @STRSQL = ' declare tmpcur cursor for select ' +
' max(文件序号) PicID from ' + @TableName + ' where [一打员]=' + @TyperID +
' and 包号=' + @PackAgeNO + ' and 文件序号 <' + convert( varchar(8), @PicID )
-- print @STRSQL
exec (@STRSQL)
open tmpcur
fetch next from tmpcur into @PicID
close tmpcur
deallocate tmpcur
if @PicID is null set @PicID=0
/*
在查询分析器中执行 是没有问题的
declare @pic_id int
set @pic_id = 4
exec getnextpicid 'pic_1', '1','10','1', @pic_id output
print @pic_id
*/
GO
上面是我的存储过程 在查询分析器里 调用是没有问题的 , 但在DELPHI中调用,提示游标不存在
我是这样写的代码用 SQLQuery (dbexpress)
procedure TForm1.Button3Click(Sender: TObject);
begin
with SQLQuery1 do
begin
Params.Clear;
Params.CreateParam(ftString, '@tablename', ptInput);
Params.CreateParam(ftString, '@PackAgeNO', ptInput);
Params.CreateParam(ftString, '@TyperID', ptInput);
Params.CreateParam(ftString, '@TypeOrder', ptInput);
Params.CreateParam(ftInteger, '@Pic_ID', ptOutput);
Params.ParamByName('@tablename').AsString := 'pic_1';
Params.ParamByName('@TyperID').AsString := '1';
Params.ParamByName('@PackAgeNO').AsString := '1';
Params.ParamByName('@TypeOrder').AsString := '1';
Params.ParamByName('@Pic_ID').AsString := '4';
sql.Text:=
'Exec GetNextPicID tablename, PackAgeNO, TyperID, TypeOrder, pic_id output';
SQLQuery1.ExecSQL();
caption:=IntToStr(Params.Parambyname('@pic_id').Value);
end;
end;
// 使用 TSQLStoredProc (Dbexpress)
procedure TForm1.Button2Click(Sender: TObject);
begin
with SQLStoredProc1 do
begin
Params.Clear;
StoredProcName := 'GetNextPicID';
SchemaName:='dbo';
Params.CreateParam(ftInteger, 'RETURN_VALUE', ptOutput);
Params.CreateParam(ftString, '@tablename', ptInput);
Params.CreateParam(ftString, '@PackAgeNO', ptInput);
Params.CreateParam(ftString, '@TyperID', ptInput);
Params.CreateParam(ftString, '@TypeOrder', ptInput);
Params.CreateParam(ftInteger, '@PicID', ptOutput);
Params.ParamByName('@tablename').AsString := 'pic_1';
Params.ParamByName('@TyperID').AsString := '1';
Params.ParamByName('@PackAgeNO').AsString := '1';
Params.ParamByName('@TypeOrder').AsString := '1';
Params.ParamByName('@PicID').AsString := '4';
ExecProc;
caption := Params.ParamByName('@PicID').AsString;
end;
end;
这两种方法都无法工作!
显示“SQL. State:3400, Sql Error Code16916”
不知错在哪里,怎样写才对?