我的存储过程:
CREATE PROCEDURE proGetNewId
@FldKey varchar(20),
@NewId varchar(18) OUTPUT
AS
declare @AutoID as bigint
begin transaction
select @AutoID =(nowId) + 1 from sysmaxid with(updlock) where fldKey = @FldKey
--取出来最大加上一
update sysmaxid set nowid = @AutoID where fldKey = @FldKey
select @NewId = cast(@AutoID as varchar(18))
commit transaction
Go
调用:
// 获取记录号***************
function gFunGetNewId(fld:string):string;
var
adoPro:TADOStoredProc;
strNewId :string;
begin
if adoPro = nil then adoPro:= TADOStoredProc.create(nil);
adoPro.Connection :=gADOCn; //在这报错啊,为什么?
adoPro.ProcedureName := 'proGetNewId;1' ;
adoPro.Parameters.Refresh ;
adoPro.Parameters.parambyname('@FldKey').value:= fld;
adoPro.Parameters.parambyname('@NewId').value :='';
adoPro.open;
showmessage(adoPro.Parameters.parambyname('@NewId').value);
result:= adoPro.Parameters.parambyname('@NewId').value;
end;请大家看看那里有问题啊
CREATE PROCEDURE proGetNewId
@FldKey varchar(20),
@NewId varchar(18) OUTPUT
AS
declare @AutoID as bigint
begin transaction
select @AutoID =(nowId) + 1 from sysmaxid with(updlock) where fldKey = @FldKey
--取出来最大加上一
update sysmaxid set nowid = @AutoID where fldKey = @FldKey
select @NewId = cast(@AutoID as varchar(18))
commit transaction
Go
调用:
// 获取记录号***************
function gFunGetNewId(fld:string):string;
var
adoPro:TADOStoredProc;
strNewId :string;
begin
if adoPro = nil then adoPro:= TADOStoredProc.create(nil);
adoPro.Connection :=gADOCn; //在这报错啊,为什么?
adoPro.ProcedureName := 'proGetNewId;1' ;
adoPro.Parameters.Refresh ;
adoPro.Parameters.parambyname('@FldKey').value:= fld;
adoPro.Parameters.parambyname('@NewId').value :='';
adoPro.open;
showmessage(adoPro.Parameters.parambyname('@NewId').value);
result:= adoPro.Parameters.parambyname('@NewId').value;
end;请大家看看那里有问题啊
解决方案 »
- delphi7类型问题求解
- MDI模式下,如何实现在菜单里自动加入子窗口的名称。
- [姹傚姪--鎬?]濡備綍寤虹珛"鍩轰簬ip缃戝拰瀹炴椂鏁版嵁搴撶殑杩滅▼娓╂箍搴︾洃娴嬪拰鎶ヨ绯荤粺"
- 请教一个有关内存增长的问题
- 怎样使datagrid当前行整行带颜色,在线给分。。。。
- 请问:delphi开发的程序可以运行在什么平台上?
- 请问做播放器的一些问题?分不够再加
- dephi:indexfieldnames的使用疑问?
- 为什么不能调试?????
- 我已经给这一小段代码搞得头都大了。help!!(各位上次说的都行不通了)
- 如何在delphi7中建立corba服务器?
- 大家都在找的资料,编写DLL程序的技巧集,我送上一点点,同时请求解决一个问题!!!
proGetNewID;1,后面的1是什么意思?存储过程名称是这个?
showMessage,result这两句也有错,返回参数不能这样调用,要到数据集里去取。
var
qr:TAdoquery;
begin
result:='';
qr:=TAdoquery.create(nil);
try
qr.connection:=anAdoconnection;//一个连接
with qr do
begin
close;
sql.clear;
sql.add('exec proGetNewId :p1,:p2');
parameters[0].asString:=fld;
execsql;
end;
result:=qr.parameters[1].AsString;
finally
qr.free;
end;用这个试试,没测试过,不知道行不行!
begin
Name:='out3';
DataType:=ftString;
Direction:=pdOutput;
Size:=100;
end;
ADOStoredProc1.Prepared:=true;
ADOStoredProc1.ExecProc;
to 空前:用ADOQuery已经测试通过.但是 我的连接gADOCn是在另一单元创建的,而我在 本单元使用gADOCn时,报错.但我用另一单元的 查询函数没问题,还是 aQur.connection :=gADOCn;报错.
这个gADOCn连接我在窗体单元里使用没问题.
下边是我的直接定义ADOQuery设其连接为gADOCn代码:
// 获取记录号***************
function gFunGetNewId(fld:string):string;
var
adoPro:TADOQuery;
adoQurNewId:TadoQuery;
strNewId :string;
begin
if adoQurNewId = nil then adoQurNewId.Create(nil);
adoQurNewId.Connection := gADOCn; //就在这里报错???????????????????
result:= '0000123';
end;
// 获取记录号***************
function gFunGetNewId(fld:string):string;
var
adoPro:TADOQuery;
adoQurNewId:TadoQuery;
strNewId :string;
begin
if adoPro = nil then adoPro:= TADOQuery.Create(nil);
adoPro:= gFunSearchData(' exec pGetNewId ' + fld + ' ',10) ;
strNewId:= adoPro.FieldValues['aNewId'];
result:=strNewId;
end;
//gFunSearchData函数是在定义gADOCn连接的那个单元的代码如下:
{** 公用查询,传SQL语句后执行 返回 Query ****}
function gFunSearchdata(sql:string;intOut:Integer):TADOQuery;
var
aQuery :TADOQuery;
begin
aQuery:=TADOQuery.Create(nil);
aQuery.Connection := gADOCn;
aQuery.SQL.text := sql;
aQuery.CommandTimeout := intOut;
aQuery.Open;
result:=aQuery;
end;
................
adoPro.Parameters.parambyname('@NewId').direction:=pdoutput;
adoPro.Parameters.parambyname('@NewId').value :=intID;
adoPro.execute;
intID:=adoPro.Parameters.parambyname('@NewId').value;
result:= adoPro.Parameters.parambyname('@NewId').value;
unit UGdb;
interface
uses SysUtils,Db,AdoDb;
function gFunConnect():Boolean; // 连接数据库
function gFunSearchdata(sql:string;intOut:Integer):TADOQuery; //通用查询
var
gADOCn :TADOConnection; //公用全局连接
implementation
......