问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

delphi7如何获取存储过程中的结果

发布网友 发布时间:2022-04-10 15:53

我来回答

2个回答

懂视网 时间:2022-04-10 20:14

示例存储过程:
create procedure proc_login
username varchar(20),
password varchar(20)
as
declare @result int
select @result=count(*) from loginuser where user=@username and pass=@password
if @result=0
return 0
return 1
go

Delphi代码:
var ret:integer;
......
      with ADOStoredProc1 do
        begin
          Close;
          ProcedureName:=‘proc_login‘;
          Parameters.Clear;
          Parameters.Refresh;
          Parameters.ParamByName(‘@username‘).Value:= Edit1.text;
          Parameters.ParamByName(‘@password‘).Value:= Edit2.text;
          ExecProc;
          ret:= Parameters.ParamByName(‘@return_value‘).Value;
        end;


      if ret=1 //用户名密码匹配
     begin
       //你想要的操作
      end

示例二

在delphi中取存储过程的返回值
   Close;
    SQL.Clear;
    SQL.Text:=‘declare @ReturnCount int exec Pr_SelStockHead ‘‘‘+StockNo+‘‘‘,@ReturnCount output select @ReturnCount‘;
    open;
    CountNO:=fields[0].value;
    cxtxtdtNameCSHYH.Text:=IntToStr(CountNO);
在sql语句里面 如果有返回值的话,可以是用return 返回,,其他的都是参数返回,如果取参数的话 从 Parameters[1].Value 开始,如果取return 的返回值 要用Parameters[0].Value

调用存储过程的方法,用adodataset控件
function TfrmPower_Cut.HasNewPowerCutInfo: Boolean;
begin
Result := False;
with spPower_Cut do //spPower_Cut为Tadostoredproc控件
begin
    Close;
    ProcedureName := ‘p_Has_PowerCut_Info‘;
    with Parameters do
    begin
      Clear;
      Refresh;
      ParamByName(‘@BiggestID‘).Direction := pdInputOutput;
      ParamByName(‘@BiggestID‘).Value := FPower_Cut_ID_Refresh;
      ParamByName(‘@NoProcess‘).Direction := pdInputOutput;
      ParamByName(‘@NoProcess‘).Value := FNoProcess;
      ParamByName(‘@IsPassTimeAndNoProc‘).Direction := pdInputOutput;
      ParamByName(‘@IsPassTimeAndNoProc‘).Value := FIsPassTimeAndNoProc;
      ParamByName(‘@IsNearestTime‘).Direction := pdInputOutput;
      ParamByName(‘@IsNearestTime‘).Value := FIsNearestTime;
      ParamByName(‘@IsDelete‘).Direction := pdInputOutput;
      ParamByName(‘@IsDelete‘).Value := FIsNearestTime;
      ParamByName(‘@Hour‘).Value := 3;
    end;
    Prepared;
    try
      ExecProc;
      if Parameters[0].Value <> FPower_Cut_ID_Refresh then
      begin
        FPower_Cut_ID_Refresh := Parameters[1].Value;
        Result := True;
      end;
      if Parameters[2].Value <> FNoProcess then
      begin
        FNoProcess := Parameters[2].Value;
        Result := True;
      end;
      if Parameters[3].Value <> FIsPassTimeAndNoProc then
      begin
        FIsPassTimeAndNoProc := Parameters[3].Value;
        Result := True;
      end;
      if Parameters[4].Value <> FIsNearestTime then
      begin
        FIsNearestTime := Parameters[4].Value;
        Result := True;
      end;
      if Parameters[5].Value <> FIsDelete then
      begin
        FIsDelete := Parameters[5].Value;
        Result := True;
      end;
    except
      on e: Exception do
        ShowMessage(e.Message);
    end;
end;
end;
存储过程
/*
功能: 判断数据库内是否有新的呼叫中心停电信息
参数: @BiggestID 客户端最大的记录ID,如果小于当前表中的ID,则返回最大的ID,客户端据此判断是否刷新
返回值: 无
*/
ALTER procedure p_Has_PowerCut_Info @BiggestID bigint=0 output, @NoProcess int=0 output, 
@IsPassTimeAndNoProc int=0 output, @IsNearestTime int=0 output, @IsDelete int=0 output, @Hour int=3 as
begin
declare @tmp_ID bigint,@tmp_NoProcess int
select @tmp_ID=Power_Cut_ID from Power_Cut 
if (@@error=0) and (@@rowcount>0)
    if @tmp_id>@BiggestID 
      set @BiggestID=@tmp_ID
select @tmp_NoProcess=count(*) from Power_Cut where PC_ProcType=0
if (@@error=0) and (@@rowcount>0)
    set @NoProcess=@tmp_NoProcess
--超过发送时间未处理
select @IsPassTimeAndNoProc=count(case when (getdate()>PC_StartTime and PC_ProcType=0) then 1 end) from Power_Cut 
--距离发送时间还有3小时未处理
select @IsNearestTime=count(case when (DATEDIFF(minute, getdate(), PC_StartTime)>=0 and DATEDIFF(minute, getdate(), PC_StartTime)<@Hour*60 
    and PC_ProcType=0) then 1 end) from Power_Cut
select @IsDelete=count(*) from Power_Cut where PC_State=2
return @BiggestID
end
return 返回的是正确或错误的标志,比如 100: 成功 0: 失败(未知原因) 1: 参数错误 2: .... 然后参数里面返回具体需要的数据

 

在Delphi中如何获得SQL中存储过程的返回值?

标签:arc   star   The   lte   密码   function   参数   case   sele   

热心网友 时间:2022-04-10 17:22

delphi专门有一个存储过程控件,里面定义了存储过程的参数
如果是OUTPUT类型的,就可以得到远端SQL执行结果。
如果你得到的是个多条多列记录,那直接用QUERY就可以。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 我是群主不小心退出了,群里的第二位是一个不用的了,请问我怎么回复我群主的身份 手机被偷了,手机号码还想要,还能补办吗 ,怎么补办 啊 高分请求韩语翻译 海康硬盘录像机 7800系列 怎么设置巡航? 什么是养老产业规划 磁带录像机播放图像有雪花和波纹声音正常 什么是产业功能区? 网络摄像头怎么连接到大华录像机,不用网络的,只是录像用 通过外网访问硬盘录像机 产业园区规划概念详解? 海康客户端软件能同时管理海康的模拟的和数字的硬盘录像机吗 园区为什么要做产业规划? 硬盘录像机 我要求6个摄像头,一个摄像头要录音,要红外线,其他没什么特殊要求 产业规划有发展前途吗 前端是唯视通得球机,后端是海康的NVR ,设置自动巡航之后一切正常 大华51系列的硬盘录像机用什么手机软件跟录像机连接 为啥高中地理讲产业规划 vivox6开机就停在4G界面怎么办? 大华●51系列硬盘录像机怎样连接手机实时监控 城市规划与产业规划的关系? 眼睛1.6,1.8近视吗 视力1.8是多少度? 怎么制作win7启动盘u盘启动盘 发了芽的洋葱的绿芽能吃吗? 视力1.8是多少度 粉条包子怎么调馅好吃 孩子8岁视力1.8正常吗 视力表上多少才算近视? 用u盘制作win7启动盘 ·粉条包子馅,怎么做? 洋葱头上长绿色芽了 还能食用吗? 视力1.8 ,2.0,是正常吗? 怎么把U盘做成WIN7启动盘 怎么用U盘制作win7启动盘 洋葱发的绿芽可以吃吗 近视的标准 如何将U盘做成win7的启动盘? 关于眼睛近视的度数 洋葱长芽了还能吃吗 视力多少一下算近视