我的存储过程:
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;请大家看看那里有问题啊

解决方案 »

  1.   

    gADOCn是什么?有没有引用定义它的单元?
    proGetNewID;1,后面的1是什么意思?存储过程名称是这个?
    showMessage,result这两句也有错,返回参数不能这样调用,要到数据集里去取。
      

  2.   

    function gFunGetNewId(fld:string):string;
    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;用这个试试,没测试过,不知道行不行!
      

  3.   

    with ADOStoredProc1.Parameters.AddParameter do
      begin
        Name:='out3';
        DataType:=ftString;
        Direction:=pdOutput;
        Size:=100;
      end;
      ADOStoredProc1.Prepared:=true;
      ADOStoredProc1.ExecProc;
      

  4.   

    to 玉米: gADOCn是个全局的连接,已经连上单元已经引用,proGetNewID;1 是我看别人还有ADOStoredProc 上有这个,当然我也测试过 没有;1 的.后边的参数引用对不对不清楚,但是在adoPro.Connection :=gADOCn; 这个地方报错的.
    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;
      

  5.   

    但我这样用就可以:
    // 获取记录号***************
    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;
      

  6.   

    你的gADOCn是不是定义在对象里面的?如果是,你要用:实例名.gADOCn来引用它(如Form1.gADOCn)
      

  7.   

    当然我把存储过程改成不带返回参数,但是返回结果集是 select Cast(@newId as varchar(18)) as aNewId
      

  8.   

    var intID :integer;
    ................
    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;
      

  9.   

    gADOCn是全局对象么?如果不是就按wjowner(Jerry.W) 的改
      

  10.   

    连接所在那个单元的头部分是这样的,难道全局变量要加public???
    unit UGdb;
    interface
      uses SysUtils,Db,AdoDb;
    function gFunConnect():Boolean; // 连接数据库
    function gFunSearchdata(sql:string;intOut:Integer):TADOQuery; //通用查询
    var
      gADOCn :TADOConnection;  //公用全局连接
    implementation
    ......