博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Parameters转换为Variant数组
阅读量:6855 次
发布时间:2019-06-26

本文共 2506 字,大约阅读时间需要 8 分钟。

ado控件的參數轉化為Variant数组

 

使用ClientDataSet的DataRequest方法把Variant数组上传

 

触发服务器DataSetProvider的OnDataRequest事件,在OnDataRequest对上传的Variant数组进行解析

 

服務器上的ADO控件根據上傳的參數操作數據庫

 

把操作的結果轉換為Variant数组,下發客戶端

 

客戶端解析Variant数组,顯示數據

 

//Parameters转换为Variant数组

function ParametersToVariant(par:TParameters;ProcedureName:Variant): OleVariant;

var

tmpv:Variant;

n,i:integer;

begin

tmpv:=VarArrayCreate([0,par.Count*5+1],VarVariant);

tmpv[0]:=ProcedureName;

tmpv[par.Count*5+1]:='this is fro Midas';

n:=0;

i:=0;

while par.Count>i do begin

tmpv[n+1]:=par.Items[i].Name;

tmpv[n+2]:=par.Items[i].DataType;

tmpv[n+3]:=par.Items[i].Direction;

tmpv[n+4]:=par.Items[i].Size;

tmpv[n+5]:=par.Items[i].Value;

i:=i+1;

n:=n+5;

end;

result:=tmpv;

end;

 

Variant数组转换到Parameters

function VariantToParameters(input:Variant;par:TParameters):Variant;

var

n,i:integer;

begin

n:=0;

i:=0;

while VarArrayHighBound(input,1)>(n+5)do begin

par.CreateParameter(input[n+1],input[n+2],input[n+3],input[n+4],input[n+5]);

n:=n+5;

end;

result:=true;

end;

 

//MIDAS调用PROC的通用程序

procedure MidasAdoProc(MyProc:TADOStoredProc;MyClientDataSet:TClientDataSet);

var

ins,outs:Variant;

begin

ins:=ParametersToVariant(MyProc.Parameters,MyProc.ProcedureName);

outs:=MyClientDataSet.DataRequest(ins);

MyProc.ProcedureName:=outs[0];

MyProc.Parameters.Clear;

VariantToParameters(outs,MyProc.Parameters);

end;

end.

 

function TMidasAdoProc.DataSetProvider1DataRequest(Sender: TObject;

Input: OleVariant): OleVariant;

begin

if VarIsArray(input) then

begin

if input[VarArrayHighBound(input,1)]='this is fro Midas' then

begin //调存储过程

Form1.Caption:='proc='+input[0];

self.ADOStoredProc1.ProcedureName:=input[0];

self.ADOStoredProc1.Parameters.Clear;

VariantToParameters(input,self.ADOStoredProc1.Parameters);

self.ADOStoredProc1.ExecProc; result:=ParametersToVariant(self.ADOStoredProc1.Parameters,self.ADOStoredProc1.ProcedureName);

end else

Form1.Caption:='来源信息非存储过程信息不明';

end else

Form1.Caption:='来源信息不明';

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

if self.SocketConnection1.Connected=false then self.SocketConnection1.Open;

self.ADOStoredProc1.Parameters.Clear;

self.ADOStoredProc1.ProcedureName:='TESTDELPHI'; //动态调用在本处改存储过程名

self.ADOStoredProc1.Parameters.CreateParameter('INS',ftString,pdInput,2000, self.Edit1.Text);

self.ADOStoredProc1.Parameters.CreateParameter('OUTS',ftString,pdOutput,2000,'NUll');

//原来的self.ADOStoredProc1.ExecProc; 改为下面的

MidasAdoProc(self.ADOStoredProc1,self.ClientDataSet1);

ShowMessage('存储过程返回'+self.ADOStoredProc1.Parameters.ParamValues['OUTS']);

end;

转载地址:http://loyyl.baihongyu.com/

你可能感兴趣的文章
线程间共享数据无需竞争
查看>>
记一次通宵加班
查看>>
iOS7 兼容适配 如何判断版本号
查看>>
Hibernate懒加载解析
查看>>
字符串匹配与KMP算法实现
查看>>
菜鸟学自动化测试(七)----selenium RC 工作原理
查看>>
ACM 要学
查看>>
C++之:模板元编程(二) 模板形参
查看>>
甲骨文宣布正式介入存储业务 超融合架构须基于对业务的深刻了解
查看>>
[华为机试练习题]25.圆桌游戏
查看>>
Android学习笔记(16):绝对布局AbsoluteLayout、常用距离单位
查看>>
[华为机试真题]66.单词搜索
查看>>
[From My Companion]memmem
查看>>
Magento--给EAV模型新增非EAV属性
查看>>
ASP.NET 系统支持数据库访问设计
查看>>
Use OpenVSwitch & bridge & Docker & pipework fast build complicated testing ENV
查看>>
一分钟了解阿里云产品:阿里云免费企业邮箱特点介绍及免费申请过程
查看>>
Linux查找find命令详解
查看>>
客户案例—北京优络时代科技有限公司
查看>>
runc 1.0-rc7 发布之际
查看>>