本人如下程序段,想通过从文框中取得输入的编码,确认后,进入代码表中查询是否有此编码,有则修改此条记录,无则添加此条记录。程序片断如下:
if (edit1.Text ='') or (edit2.Text='') then
      begin
        messagedlg('类别编码及名称不能为空',mtconfirmation,[mbOK],0);
        edit1.SetFocus;
      end;
    dm_name:=edit1.Text;
    with Data_use do   //数据模块
    ADOQuery_lb1.Close;
    ADOQuery_lb1.sql.clear;
    //ADOQuery_lb1。sql.add(.....
望同仁赐教,谢谢!
其中有网友认为利用数据库存储过程进行编程,但我不知如何操作?能否告之具体点,
详细点最点,定当以100分相送..

解决方案 »

  1.   

    用数据库存储过程可以使程序简洁,速度加快,而且日后维护方便。
    象你这里所说的。只须在后台建一存储过程,而在前台给存储过程输入变量赋值即Ok了。
    create procedure 存储名
    (
      输入变量
      输出变量
    )在前台编程中
      存储名.fields[0].asstring:=edit1.text;
      依次类推赋值
      存储名.execproc;
      再判断是否执行成功。
      

  2.   

    1、建立存儲過程
    Create  PROCEDURE Bes_GerAuth
        @Pass varchar(50),
        @Name varchar(50)
        @Auth int output
    AS
     if Exits(select * from Pass_Table where Name=@Name and Password=@Pass)
       set @Auth=1
     else 
       Set @Auth=02、在前選用TStoredProc控件,設置DataBaseName與StoredProcName屬性與Params中的變量Value-->Type屬性3、前台調用:
    var E_Succ :integer;  with StoredProc1 do
      begin
        if active then close;
        Parambyname('@Pass).asboolean:=Edit2.Text;
        Parambyname('@Name).asstring:=Edit1.Text;
        Prepare;
        ExecProc;
        E_Succ := Params[3].AsInteger;
      end;
      if E_Succ=0 then
      begin
        Application.MessageBox('你沒有權限!','',0);
        Abort;
      end
        
      

  3.   

    引用:
    方法太多了,下面介绍一点我用得最多的方式:
    使用ADO的TADOQUERY组件Aq1.
    如果这个存储过程有返回值:
    A1.close;
    a1.sql.text:='Exec your_proc_Name :C1,:c2';
    A1.parameters[0].value:=...
    A1.Parameters[1].value:=...
    try
      A1.open;
      A1.frist;
     While not eof do
      begin
      .
      .
      end;
    except
      ...
    end;
    没有返回值的存储过程:
    A1.close;
    a1.sql.text:='Exec your_proc_Name :C1,:c2';
    A1.parameters[0].value:=...
    A1.Parameters[1].value:=...
    try
      A1.ExecSql;
    except
      ...
    end;另外还可使用TStoreProc\TQuery\TAdoStoreProc\TADoCommand.....
      

  4.   

    storedproc1.execute;
    storedproc1.parambyname('@id'):=edit1.text;
    storedproc1.parambyname('@name'):=edit2.text;
    storedproc1.execute;
    storedproc1.execute一定要写两行