mysql一直闪现_Delphi使用AdoQuery调用Mysql存储过程

Delphi一样平凡操纵TADOStoredProc来会面存储历程,TADOStoredProc与TADOQuery都是承当自TCustomADODataSet类,实践上操纵TADOQuery来会面存储历程会更矫捷一面。

现将操纵TADOQuery会面存储历程总结一下:

1.

实施存储历程,不返回成果调集

存储历程剧本:

DELIMITER $$

DROP PROCEDURE IF EXISTS p_test1;

CREATE PROCEDURE p_test1(

iSqn: INT,

sName: VARCHAR(40))

BEGIN

insert into t1(sqn, name) value(iSqn, sName);

END$$

DELIMITER ;

实施存储历程代码:

function Exec_Proc1: Boolean;

begin

result := true;

query.close;

query.sql.clear;

query.sql.add("call p_test1(:sqn, :name)");

query.Parameters[0].value := 1;

query.Parameters[1].value := "test";

try

query.ExecSql;

except

result := false;

//写日记什么的措置

end;

end;

2. 实施存储历程,返回一个成果集,从成果集开获与数据

存储历程剧本:

DELIMITER $$

DROP PROCEDURE IF EXISTS p_test2;

CREATE PROCEDURE p_test2(

iSqn: INT,

sName: VARCHAR(40))

BEGIN

select * from t1 where sqn = iSqn and name = sName;

END$$

DELIMITER ;

挪用存储历程代码:

function Exec_Proc2: Boolean;

begin

result := true;

query.close;

query.sql.clear;

query.sql.add("call p_test2(:sqn, :name)");

query.Parameters[0].value := 1;

query.Parameters[1].value := "test";

try

query.open;

while not query.eof do

begin

//读数据

query.next;

end;

except

result := false;

//写日记什么的措置

end;

end;

3. 实施存储历程,返回一个成果集,成果集在grid中闪现

设置datasource1.dataset = query;

设置grid的datasource为datasource1

存储历程剧本:

DELIMITER $$

DROP PROCEDURE IF EXISTS p_test2;

CREATE PROCEDURE p_test2(

iSqn: INT,

sName: VARCHAR(40))

BEGIN

select * from t1 where sqn = iSqn and name = sName;

END$$

DELIMITER ;

挪用存储历程代码:

function Exec_Proc2: Boolean;

begin

result := true;

query.close;

query.sql.clear;

query.sql.add("call p_test2(:sqn, :name)");

query.Parameters[0].value := 1;

query.Parameters[1].value := "test";

try

query.open;

except

result := false;

//写日记什么的措置

end;

end;

4. 实施存储历程,返回多个成果集

设置datasource1.dataset = query;

设置grid的datasource为datasource1

存储历程剧本:

DELIMITER $$

DROP PROCEDURE IF EXISTS p_test2;

CREATE PROCEDURE p_test2(

iSqn: INT,

sName: VARCHAR(40))

BEGIN

select * from t1 where sqn = iSqn and name = sName;

select 20 as defineSqn, "test" as defineName;

END$$

DELIMITER ;

挪用存储历程代码:

function Exec_Proc4: Boolean;

var

rs: _Recordset;

recordCount: Integer;

sqn: integer;

name: string;

begin

result := true;

query.close;

query.sql.clear;

query.sql.add("call p_test2(:sqn, :name)");

query.Parameters[0].value := 1;

query.Parameters[1].value := "test";

try

query.open;

// 获得第二个成果集开的数据

rs := query.NextRecordset(recordCount);

if rs <> nil then

begin

sqn := rs.Fields[0].value;

name := rs.Field[1].value;

end;

//

获得第二个成果集,第二个成果集用于grid闪现

// 设置query2与grid的关联干系(经过历程datasource)

// rs :=

query.NextRecordset(recordCount);

// query2.recordSet := rs;

except

result := false;

//写日记什么的措置

end;

格外的针对下里的情况:

存储历程剧本:

DELIMITER $$

DROP PROCEDURE IF EXISTS p_test5;

CREATE PROCEDURE p_test5(

iSqn: INT,

sName: VARCHAR(40),

OUT value: VARCHAR(20))

BEGIN

select * from t1 where sqn = iSqn and name = sName;

set value = "test";

END$$

DELIMITER ;

挪用存储历程代码:

function Exec_proc5: Boolean;

var

aValue: string;

begin

query.close;

query.sql.clear;

query.sql.add("call p_test5(:sqn, :name, @p)");

query.Parameters[0].value := 1;

query.Parameters[1].value := "test";

try

query.open;

except

result := false;

//写日记什么的措置

end;

// 经过历程另外一个TADOQuery类可以经过历程查询临时变量@p的体例获得返回值

// 那种体例不是很好,并收量角力计较大年夜的情况下,与@p的值存在问题

// 操持的体例是不操纵传出参数,经过历程传出第二个成果集的情势,与第二个成果集开的数据相对来讲角力计较好一面

query2.close;

query2.sql.clear;

query2.sql.add("select @p as aValue;");

try

query2.open;

aValue := query2.FieldByname("aValue").asString;

except

end;

end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值