客户端如何通过咏南中间件调用存储过程和数据分页查询和文件传输的演示

演示使用MSSQL 2000的存储过程,其它类型的数据库的存储过程的语法是有所不同的。

1)MSSQL2000通用数据分页存储过程,仅作演示用,在此不探讨性能问题

ALTER proc [dbo].[sp_page]
@RecordCount int output, --查询到的记录总数,输出参数
@QueryStr nvarchar(1000)='table1', --表名、视图名、查询语句
@PageSize int=20, --每页的大小(行数)
@PageCurrent int=0, --要显示的页 从0开始
@FdShow nvarchar (2000)='*', --要显示的字段列表
@IdentityStr nvarchar (100)='id', --主键
@WhereStr nvarchar (2000)='1=1',
@FdOrder nvarchar(100)='desc' --排序 只能取desc或者asc
as

set nocount on

declare

@sql nvarchar(2000)

if @WhereStr = '' begin
set @WhereStr = '1=1'
end

declare @tsql nvarchar(200)
set @tsql=N'select @RecordCount = count(*) from ' + @QueryStr + ' where ' + @WhereStr
exec sp_executesql @tsql,N'@RecordCount int output',@RecordCount output

if @PageCurrent = 0 begin
set @sql = 'select top ' + cast(@PageSize as nvarchar(3)) + ' ' + @FdShow + ' from ' + @QueryStr + ' where ' + @WhereStr + ' order by ' + @IdentityStr + ' ' + @FdOrder
end

else begin
if upper(@FdOrder) = 'DESC' begin
set @sql = 'select top ' + cast(@PageSize as nvarchar(3)) + ' ' + @FdShow + ' from ' + @QueryStr + ' where ' + @WhereStr + ' and ' + @IdentityStr + '< ( select min(' + @IdentityStr + ') from (select top ' + cast(@PageSize*@PageCurrent as nvarchar(10)) + ' ' + @IdentityStr + ' from ' + @QueryStr + ' where ' + @WhereStr + ' order by ' + @IdentityStr + ' desc) as t) order by ' + @IdentityStr + ' desc'
end
else begin
set @sql = 'select top ' + cast(@PageSize as nvarchar(3)) + ' ' + @FdShow + ' from ' + @QueryStr + ' where ' + @WhereStr + ' and ' + @IdentityStr + '> ( select max(' + @IdentityStr + ') from (select top ' + cast(@PageSize*@PageCurrent as nvarchar(10)) + ' ' + @IdentityStr + ' from ' + @QueryStr + ' where ' + @WhereStr + ' order by ' + @IdentityStr + ' asc) as t) order by ' + @IdentityStr + ' asc'
end
end
--print @sql
execute(@sql)

2)客户端调用代码

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, DBClient, StdCtrls, Grids, DBGrids;

type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
btnQry: TButton;
DataSource1: TDataSource;
ClientDataSet1: TClientDataSet;
btnSave: TButton;
downFile: TButton;
uploadFile: TButton;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure btnQryClick(Sender: TObject);
procedure btnSaveClick(Sender: TObject);
procedure downFileClick(Sender: TObject);
procedure uploadFileClick(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
FPageCurrent: Integer;
function qryPage(tableName, fieldList, keyField, whereStr, orderType: string; pageSize, pageCurrent: Integer): OleVariant;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses
untDllMethods;

{$R *.dfm}

procedure TForm1.btnQryClick(Sender: TObject);
begin
ClientDataSet1.Data := untDllMethods.QuerySql('0', 'select c1,c2,字段3 as c3 from t1');
end;

procedure TForm1.btnSaveClick(Sender: TObject);
begin
untDllMethods.SaveData('0', 't1', ClientDataSet1.Delta);
end;

procedure TForm1.downFileClick(Sender: TObject);
var
v: OleVariant;
LStream: TMemoryStream;
begin
v := untDllMethods.DownLoadFile2('down.txt');
if v = null then
Exit;
LStream := TMemoryStream.Create;
untDllMethods.VariantToStream(v, LStream);
LStream.SaveToFile('c:\down.txt');
LStream.Free;
ShowMessage('成功下载文件 c:\down.txt');
end;

procedure TForm1.uploadFileClick(Sender: TObject);
var
LStream: TFileStream;
v: OleVariant;
begin
if not FileExists('c:\down.txt') then
begin
ShowMessage('请准备一个要上传的文件 c:\down.txt');
Exit;
end;
LStream := TFileStream.Create('c:\down.txt', fmOpenRead);
untDllMethods.StreamToVariant(LStream, v);
if untDllMethods.UploadFile2(v, 'd:\down.txt') then
ShowMessage('上传文件成功')
else
ShowMessage('上传文件失败');
LStream.Free;
end;

function TForm1.qryPage(tableName, fieldList, keyField, whereStr, orderType: string; pageSize, pageCurrent: Integer): OleVariant;
var
p: TParams;
begin
p := TParams.Create(nil);
p.Clear;
p.CreateParam(ftInteger, '@RecordCount', ptOutput); // 查询到的记录总数,输出参数
p.CreateParam(ftString, '@QueryStr', ptInput).AsString := tableName; // 表名、视图名、查询语句
p.CreateParam(ftInteger, '@PageSize', ptInput).AsInteger := pageSize; // 每页的大小(行数)
p.CreateParam(ftInteger, '@PageCurrent', ptInput).AsInteger := PageCurrent; // 要显示的页 从0开始
p.CreateParam(ftString, '@FdShow', ptInput).AsString := fieldList; // 要显示的字段列表
p.CreateParam(ftString, '@IdentityStr', ptInput).AsString := keyField; // 主键
p.CreateParam(ftString, '@WhereStr', ptInput).AsString := whereStr; // where条件
p.CreateParam(ftString, '@FdOrder', ptInput).AsString := orderType; // 排序 只能取desc或者asc
result := untDllMethods.spOpenOut('0', 'sp_page', PackageParams(p));
p.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
r: OleVariant;
p: TParams;
LRecordCount: Integer;
begin
FPageCurrent := 0;

r := Self.qryPage('t1', '*', 'c1', '1=1', 'asc', 10, FPageCurrent);
ClientDataSet1.Data := r[0];
p := tparams.Create(nil);
UnpackParams(r[1], p);
LRecordCount := p.ParamByName('@RecordCount').AsInteger;
p.Free;
Caption := '记录总数:' + IntToStr(LRecordCount);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
r: OleVariant;
p: TParams;
LRecordCount: Integer;
begin
if FPageCurrent = 0 then
begin
ShowMessage('当前是第一页');
Exit;
end;
Dec(FPageCurrent);
r := Self.qryPage('t1', '*', 'c1', '1=1', 'asc', 10, FPageCurrent);
ClientDataSet1.Data := r[0];
p := tparams.Create(nil);
UnpackParams(r[1], p);
LRecordCount := p.ParamByName('@RecordCount').AsInteger;
p.Free;
Caption := '记录总数:' + IntToStr(LRecordCount);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
r: OleVariant;
p: TParams;
LRecordCount: Integer;
begin
inc(FPageCurrent);
r := Self.qryPage('t1', '*', 'c1', '1=1', 'asc', 10, FPageCurrent);
ClientDataSet1.Data := r[0];
p := tparams.Create(nil);
UnpackParams(r[1], p);
LRecordCount := p.ParamByName('@RecordCount').AsInteger;
p.Free;
Caption := '记录总数:' + IntToStr(LRecordCount);
end;

end.

转载于:https://www.cnblogs.com/hnxxcxg/p/5976465.html

客户端如何通过咏南中间件调用存储过程和数据分页查询和文件传输的演示相关推荐

  1. 咏南中间件D7客户端演示

    咏南中间件D7客户端演示 咏南中间件MORMOT(http.sys)支持D6.D7等老版本开发客户端.客户端使用TClientDataSet内存表控件,数据序列使用TynSerial类. 转载于:ht ...

  2. 专门为ADO二层升三层的咏南中间件(特种用途)

    专门为ADO二层升三层的咏南中间件(特种用途) 演示下载:链接: https://pan.baidu.com/s/1bulGBIZ6A1nkeErxIrGsGA 密码: 22dk 解压后运行ynmai ...

  3. 咏南中间件2019新年促销

    咏南中间件新年促销 促销时间:2019-1-1~2019-1-31 促销价格:3800元 促销礼品:咏南IOCP中间件.咏南社区版中间件(跨操作系统平台),二选一. 咏南中间件+开发框架支持最新的DE ...

  4. 咏南中间件+开发框架支持最新的DELPHI 10.2 TOKYO

    咏南中间件+开发框架支持最新的DELPHI 10.2 TOKYO 价格十分优惠.有意者请向本人索取演示程序! 你只需花一套中间件的价格,就可获得:中间件,CS开发框架一套(赠送),BS开发框架一套(赠 ...

  5. 咏南中间件+开发框架支持最新的DELPHI XE10.1(BERLIN) UPDATE1

    咏南中间件+开发框架支持最新的DELPHI XE10.1(BERLIN) UPDATE1 购买提供:中间件源码,价格十分优惠!有意者请向本人索取演示程序! 附带福利(赠送): CS开发框架源码 BS开 ...

  6. 咏南中间件+开发框架中秋国庆大促

    咏南中间件+开发框架中秋暨国庆大促 活动期间:2016-9-15到2016-10-7 活动价格:3800元(一口价),原价5800元 咏南中间件+咏南开发框架支持最新的delphi 10.1(berl ...

  7. 咏南中间件跨平台解决方案

    咏南中间件跨平台解决方案 参考文章: (1)咏南中间件跨平台解决方案 (2)https://www.cnblogs.com/hnxxcxg/p/11860579.html 备忘一下.

  8. 用存储过程实现数据分页

    参考:http://blog.csdn.net/wellknow/archive/2004/07/29/55167.aspx 用的是NOT IN 的方法 /**//****************** ...

  9. php 当地天气预报,PHP调用全国天气预报数据接口查询天气示例

    本文实例讲述了PHP调用全国天气预报数据接口查询天气.分享给大家供大家参考,具体如下: 基于PHP的聚合数据全国天气预报API服务请求的代码样例 本代码示例是基于PHP的聚合数据全国天气预报API服务 ...

最新文章

  1. mysql原生分页语句_mysql原生分页
  2. Windows2003使用命令行设置共享权限与安全权限心得
  3. 触发器与约束的适用条件
  4. box-shadow IE8兼容处理
  5. input子系统基础之按键3——input子系统架构总览
  6. 前端ajax数据提交到服务器_详解前端如何让服务器主动向浏览器推送数据
  7. macOS Mojave patcher 无法制作启动盘
  8. 语义分割--(DFN)Learning a Discriminative Feature Network for Semantic Segmentation
  9. 时间很快,请多做有意义的事情
  10. linux平台下苹果打包研究
  11. asp.net IIS7 503错误
  12. 前端及后端项目开发工具
  13. Windows Terminal 关闭声音/提示音/table提示音
  14. 寒假实习学习笔记总结
  15. c语言格式字符-5d,-是什么意思在c语言中%5d是什么意思? 爱问知识人
  16. 【解决密码栏不显示】“可能是其他人在试图访问您的google账号....”
  17. php写简单的模板tpl
  18. 科技线条空间3D特效
  19. vue:时间选择器自定义时间可选范围
  20. KEIL 软件仿真 按键检测

热门文章

  1. OpenCV circle函数
  2. ubuntu 安装lamp
  3. Linux动态库应用
  4. codeforces 269B Greenhouse Effect
  5. 商场专柜私收银现象治理要点
  6. SAP用户出口(exit)问题--数据源增强
  7. html5 接东西游戏,html5手机触屏接红包小游戏代码
  8. 述职答辩提问环节一般可以问些什么_每个优秀的人都会被看到述职晋升季buff大推送...
  9. linux下gem卸载,gem 安装卸载pod
  10. 7 centos ssh 单机_虚拟机下CentOS7 开启SSH连接