跟query 一样用法,下面的是用BCB语法写的。
1、查询返回的记录数目:StoredProc->RecordCount;
2、查询返回的结果。
int count;
count=StoredProc->FieldByName("count")->AsInteger;
1、查询返回的记录数目:StoredProc->RecordCount;
2、查询返回的结果。
int count;
count=StoredProc->FieldByName("count")->AsInteger;
query可是不要@count参数的
1、汉字惹的祸,D5对汉字支持不好,存储过程名和存储过程名不能用汉字。
建议数据库名、表名、字段名、存储过程和参数名等不要用汉字。
2、存储过程里声明参数不要用as,数值比较不要用 like,虽然都能编译通过和执行通过。
3、@count参数tinyint类型,d5将类型取回来,变成了ftSmallint类型,可能不对。
改成int,和D5里的Integer范围是一样的。
3、D5 赋值里多了params,而且类型不匹配。
下面是能成功执行的代码。if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[密码表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[密码表]
GOCREATE TABLE [dbo].[密码表] (
[用户名] [int] NULL ,
[密码] [int] NULL
) ON [PRIMARY]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[pr_login]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[pr_login]
GOSET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GOCREATE PROCEDURE pr_login
@username int
,@password int
,@count int output
as
select @count=count(*)
from 密码表
where 用户名=@username and 密码=@password
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
insert into 密码表(用户名,密码) values(3,3)procedure TForm1.Button1Click(Sender: TObject);
var I: Integer;
begin
storedproc1.Active:=false;
storedproc1.ParamByName('@username').value:=strtoint(edit1.text);
storedproc1.parambyname('@password').value:=strtoint(edit2.text);
storedproc1.execproc;
i:=storedproc1.parambyname('@count').asInteger;
MessageDlg(inttostr(i), mtInformation,[mbOk],0);
end;
end.
反而不方便了竹之草,你在哪里??
如何在delphi的程序中取得SQL Server的sp的out型參數.我想delphi應該有方法能做到.可惜我從未用過delphi.
gocreate procedure myproc @ioparam int output as
select * from stud
select @ioparam=88
return 99
go
vb代码
Dim rs As New ADODB.Recordset
Dim cm As New ADODB.Command
Dim pm As New ADODB.Parameter
cm.ActiveConnection = "DSN=pubs;uid=sa"
cm.CommandText = "myproc"
cm.CommandType = adCmdStoredProc
Set pm = cm.CreateParameter("return", adInteger, adParamReturnValue, , 0)
cm.Parameters.Append pm
Set pm = cm.CreateParameter("output", adInteger, adParamOutput, , 0)
cm.Parameters.Append pm
Set rs = cm.Executers.Close
Debug.Print cm(0)
Debug.Print cm(1)以前兄弟们大答案在vb中的代码
要取得输出结果(如sp中有select × from ....)用Open,不用ExecProc。