现在有个这样的问题:数据库中有表:table1
sno   varchar(50)
name  varchar(50)有存储过程:
create procedure proinsettable1
@sno    varchar(50),
@name   varchar(50)
as
begin
begin  tran
insert table1(sno,name)
values (@sno,@name)
if @@error=0 or @@rowcount=1 
commit tran
else
rollback tran
go现在客户段怎么把 edit1.tex 和 edit2.tex 的值传给应用服务器。还有一个问题是:
应用服务器是在:
procedure TForm1.DataSetProvider2BeforeUpdateRecord(Sender: TObject;
  SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
  UpdateKind: TUpdateKind; var Applied: Boolean);
中执行存储过程,还是在应用服务器中写一个方法如:procedure execprocinsert(sno,name:string);
begin
执行 proinsettable1
end;在客户端调用 execprocinsert那又要怎么调用呢?各位大哥,请给我写一个列子好吗?
先谢谢了!

解决方案 »

  1.   

    比如你用DcomConnection连接服务器
    DcomConnection.Appserver.execprocinsert;看看行不?我好久没有写delphi的程序了
      

  2.   

    谢谢
    请教 rouqing 大哥,一般是用
    procedure TForm1.DataSetProvider2BeforeUpdateRecord(Sender: TObject;
      SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
      UpdateKind: TUpdateKind; var Applied: Boolean);
    中 执行,还是写个procedure execprocinsert(sno,name:string)这样的过程呢?如果 是用在
    procedure TForm1.DataSetProvider2BeforeUpdateRecord(Sender: TObject;
      SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
      UpdateKind: TUpdateKind; var Applied: Boolean);
    中执行呢?
    那怎么把 客户段的 edit1.tex 和 edit2.tex 的值作为参数,传递给存储过程:proinsettable1
    如:
    procedure TForm1.DataSetProvider2BeforeUpdateRecord(Sender: TObject;
      SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
      UpdateKind: TUpdateKind; var Applied: Boolean);begin
         ADOStoredProc1.Close;
          ADOStoredProc1.ProcedureName:='proinsettable1';
          ADOStoredProc1.Parameters.Refresh;
         ADOStoredProc1.Parameters.ParamByName('@sno').Value:='从客户端传过来的值edit1.text'
         ADOStoredProc1.Parameters.ParamByName('@sno').Value:='从客户端传过来的值edit2.text'
          ADOStoredProc1.ExecProc;
    end;现在我的问题是:我不知道怎么把 客户端传过来的值edit1.text,客户端传过来的值edit2.text
    传到应用服务器啊?请给我写个列子好吗 ?非常非常感谢!
      

  3.   

    是通过ADOStoredProc1.Parameters.ParamByName方式传递Edit1.text进去的,调用存储过程有两种方式,第一种是通过存储过程组件ADOStoredProc1,参数通过以上方式传递,第二种方式是通过调用中间层应用服务器一个方法来实现,但是最重要的是参数传递问题,参数必须用Variant数组进行传递,写法比较麻烦一些.SQL Server的存储过程的话直接用ParamByName方式简单,Oracle的话最好不要把存储过程写在包(Package)里,否则调用起来非常麻烦,而且ADO好多时候比BDE更容易调用存储过程.ODBC好多时候干脆就出错.