| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1998 人关注过本帖
标题:vfp 调用SQL 存储过程返回值?自创?
只看楼主 加入收藏
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
结帖率:98.98%
收藏
已结贴  问题点数:5 回复次数:5 
vfp 调用SQL 存储过程返回值?自创?
我在网上找了很多,关于VFP 调用SQL 存储过程的返回值,都没什么好的结果。有的说用OUTPUT参数。。
以下是我自己做法,不知道OUTPUT的做法是怎么样的?
在SQL2000中建立存储过程

ALTER PROCEDURE [dbo].[get_insert]  --或者 CREATE PROCEDURE
@u_name varchar(20)
AS
declare @awr nvarchar(10)
BEGIN
 SET NOCOUNT ON;
if exists(select u_name from users where u_name=@u_name)
 begin
   SET @awr='Yes'
    --存在,你要做的其他操作
 end
else
 begin
 SET @awr='No'
    --不存在,你要做的其他操作,比如可以插入这个名称的记录
 end
select @awr AS 'Answer'  --把作为查询返回
END
GO

**在VFP中调用方法
u_name='李四'
awr=SQLEXEC(nhandle,'exec get_insert @u_name=?u_name ','AAA')
IF awr>0
   SELECT AAA
   IF UPPER(Answer)=[YES]
      MESSAGEBOX([记录操作成功])
   ELSE
      MESSAGEBOX([记录操作失败])
   ENDIF
   USE
ELSE
   MESSAGEBOX([操作存储过程失败])
ENDIF
这样做的好处,我知道我执行SQLEXEC()后的操作,是不是成功插入,修改了记录。系统返回的-1,1等,只能知道执行这个命令没错误。
比如我
u_name='88888'
SQLEXEC(nhandle,'exec get_insert @u_name=?u_name ','AAA')
这个值是1,但表users有没 u_name='88888'这个记录,看这个1是看不出来,但现在用我这个存储方法。。
不知道用OUTPUT的方法是怎么样的?求解答
搜索更多相关主题的帖子: 网上 where 
2015-07-03 17:37
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
另外:怎么把这个存储过程,通过用VFP写到SQL2000去?我现在是直接在SQL查询分析器上建立的。。。
2015-07-03 17:45
hepingfly
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:15
帖 子:195
专家分:657
注 册:2015-5-21
收藏
得分:3 
现在,使用存储过程的现象已经比较少了。比较多的是 vfp 直接写代码控制 SERVER.非常灵活方便。
你能在查询分析器中写,那用 vfp 写好存储后,发送到数据库就很简单了。
可试试:
 text to MYPRO noshow && MYPRO 是自定义的一个参数,作为执行的名称
  .....这个地方是写好的存储过程原句子原格式。 (注:把最后的那个 GO 一定去掉)
 endtext
  ..... 连接数据库
  ..... (最好在这个地方加查询判断)
  SQLEXEC(nhandle,MYPRO)
  



星际花草
2015-07-04 00:23
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
现在,使用存储过程的现象已经比较少了。比较多的是 vfp 直接写代码控制 SERVER.非常灵活方便??
但如果直接控制?如果我编号字段BH,要求是唯一的,但我又不想在SQL2000限制为主索引,不用自增字段,
那我在增加数据的时候,SQLEXEC(nhandle,insert ...)时,怎么知道我增加成功呢?或者怎么知道不重复呢?
如果我用了像我上面的存储过程,我在存储过程中处理,返回1个值,我就知道我成功增加了没。
2015-07-04 11:28
hepingfly
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:15
帖 子:195
专家分:657
注 册:2015-5-21
收藏
得分:2 
给出一个例子供参考吧(vfp 9.0)
 close all
 *** nhdle 要保证是一个正确的连接
 n1=SQLEXEC(nhdle,'drop table 学生表') && 不需判断,直接运行  
 n2=SQLEXEC(nhdle,'create table 学生表(学号 varchar(20),姓名 varchar(50),性别 varchar(10),年龄 numeric(8,0))')
 text to mypro noshow
      create PROCEDURE insert_学生表  
      @xh varchar(20),@xm varchar(50),@xb varchar(10),@nl numeric(8,0)
      AS
      declare @awr nvarchar(10)
   begin
      set nocount on
      if exists(select 学号 from 学生表 where RTRIM(学号)=@xh)
         begin
         SET @awr='no'
         end
      else
        begin
        SET @awr='yes'
        insert into 学生表(学号,姓名,性别,年龄) values(@xh,@xm,@xb,@nl)
        end
        select @awr AS 'Answer'
   end
  endtext
   n3=SQLEXEC(nhdle,'drop procedure insert_学生表') && 不需判断,直接运行  
   n4=SQLEXEC(nhdle,mypro) && 向 server 数据库放入存储过程  
   ************************** && 注:第2次运行时,以上都不再要,只执行下面的语句。
   
   n5=SQLEXEC(nhdle,"exec insert_学生表 '001','张一','男',19",'aaa') && 此句,更换学号可再试
   if n5<0
      messagebox('运行失败')   
      return
   endif
   if alltrim(Answer)='yes'
      messagebox('新添记录完毕')   
   else
      messagebox('学号有重复,不能添加')   
   endif
   close all
 

星际花草
2015-07-05 01:37
kmyz_yyl
Rank: 2
等 级:论坛游民
帖 子:62
专家分:28
注 册:2012-11-13
收藏
得分:0 
回复 5楼 hepingfly
2016-12-14 13:28
快速回复:vfp 调用SQL 存储过程返回值?自创?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027309 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved