Parameters轉換為Variant數組

來源:互聯網
上載者:User

http://www.ccw.com.cn/applic/prog/htm2003/20030423_096DZ.htm

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;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.