我的數據庫存儲器代碼如下:
CREATE PROCEDURE fPurch_store(@StringItem char)
as
  set nocount on
     declare @fStoreapp varchar (20)
     declare @fStore_po varchar (20)
     declare @fStore_item varchar (20)
     declare @fStore_custome varchar (20)
     declare @fStore_pudate datetime
     declare @fStore_outdate datetime
     declare @fStore_indate datetime
     declare @fStore_pri varchar(30)
     declare @fStore_name varchar(30)
     declare @fStore_dec varchar(50)
     declare @fStore_num float(8)
     declare @fStore_total float(8)
     declare @fStore_until varchar(8)
     declare @fStore_store float(8)
     declare @fStore_memo varchar(100)
--    select from purcheseapp where purchese=@StringItem
begin tran
   declare crTstore cursor LOCAL  for
        select
          purcheseapp, purchese_po, purchese_item, purchese_customer,purchese_date,
 purchese_date, purchese_codeno, purchese_name, purchese_dec, purchese_num,
 purchese_total, purchese_until, purchese_total, purchese_memo
     from purcheseapp where purcheseapp=@stringItem
    open crTstore
   fetch next from crTstore into
      @fStoreapp, @fStore_po,  @fStore_item ,  @fStore_custome,  @fStore_outdate,
      @fStore_indate, @fStore_pri , @fStore_name, @fStore_dec,  @fStore_num,
      @fStore_total, @fStore_until,  @fStore_store,   @fStore_memo
-- WHILE @@FETCH_STATUS = 0
begin 
    insert into purchese_store(
         Storeapp,Store_po, Store_item,Store_custome,Store_outdate,Store_indate,
Store_pri,Store_name,Store_dec,Store_total,Store_until,Store_store,
Store_memo)
    values(
            @fStoreapp, @fStore_po,@fStore_item , @fStore_custome,@fStore_outdate,
            @fStore_indate, @fStore_pri , @fStore_name, @fStore_dec, @fStore_total,
            @fStore_until, @fStore_store,   @fStore_memo)
  end
fetch next from crTstore into
      @fStoreapp, @fStore_po,  @fStore_item , @fStore_custome, @fStore_outdate,@fStore_indate, @fStore_pri , @fStore_name, @fStore_dec, @fStore_num,
      @fStore_total, @fStore_until, @fStore_store, @fStore_memo
close crTstore
  deallocate crTstore
--WHILE @@FETCH_STATUS <> 0
if @@error<>0
     begin
Rollback Tran  
     end
        else
           begin
   Commit Tran
           end
SET NOCOUNT OFF
GO
在delphi中是這樣調用的
    begin
      ADOStoredProc2.Parameters.Clear;
      ADOStoredProc2.Parameters.Add;
      ADOStoredProc2.Parameters[0].Name :='@StringItem';
      ADOStoredProc2.Parameters.ParamByName('@StringItem').Value:=string(edit2.Text);
      ADOStoredProc2.execproc;
end;
但運行是它總是寫入一筆空值,我在存儲器中硬賦值給@stringItem卻只能寫入一筆記錄,而Purcheseapp中明明有三筆記錄,後面兩筆自動掉失,其原因經我分析為:在DELPHI中賦值沒有真正賦給存儲器中的@stringItem,在存儲器中游標肛代碼中只能讀取第一筆記錄,不能提取下一筆。這樣造成每次運行時只是寫入一筆空記錄,請高手幫忙解決此問題,分不夠可以再加,我現在只有這麼多分,謝謝!!!!

解决方案 »

  1.   

    到数据库:SQL Server区问这个问题!
      

  2.   

    这样试下CREATE PROCEDURE fPurch_store(@StringItem char)
    as
      set nocount on
         declare @fStoreapp varchar (20)
         declare @fStore_po varchar (20)
         declare @fStore_item varchar (20)
         declare @fStore_custome varchar (20)
         declare @fStore_pudate datetime
         declare @fStore_outdate datetime
         declare @fStore_indate datetime
         declare @fStore_pri varchar(30)
         declare @fStore_name varchar(30)
         declare @fStore_dec varchar(50)
         declare @fStore_num float(8)
         declare @fStore_total float(8)
         declare @fStore_until varchar(8)
         declare @fStore_store float(8)
         declare @fStore_memo varchar(100)
    --    select from purcheseapp where purchese=@StringItem
    begin tran
       declare crTstore cursor LOCAL  for
            select
              purcheseapp, purchese_po, purchese_item, purchese_customer,purchese_date,
     purchese_date, purchese_codeno, purchese_name, purchese_dec, purchese_num,
     purchese_total, purchese_until, purchese_total, purchese_memo
         from purcheseapp where purcheseapp=@stringItem
        open crTstore
       fetch next from crTstore into
          @fStoreapp, @fStore_po,  @fStore_item ,  @fStore_custome,  @fStore_outdate,
          @fStore_indate, @fStore_pri , @fStore_name, @fStore_dec,  @fStore_num,
          @fStore_total, @fStore_until,  @fStore_store,   @fStore_memo
     while @@Fetch_status=0
       begin
        insert into purchese_store(
             Storeapp,Store_po, Store_item,Store_custome,Store_outdate,Store_indate,
    Store_pri,Store_name,Store_dec,Store_total,Store_until,Store_store,
    Store_memo)
        values(
                @fStoreapp, @fStore_po,@fStore_item , @fStore_custome,@fStore_outdate,
                @fStore_indate, @fStore_pri , @fStore_name, @fStore_dec, @fStore_total,
                @fStore_until, @fStore_store,   @fStore_memo)  fetch next from crTstore into
          @fStoreapp, @fStore_po,  @fStore_item , @fStore_custome, @fStore_outdate,@fStore_indate, @fStore_pri , @fStore_name, @fStore_dec, @fStore_num,
          @fStore_total, @fStore_until, @fStore_store, @fStore_memo
      end  close crTstore
      deallocate crTstore
    if @@error<>0
         begin
    Rollback Tran  
         end
            else
               begin
       Commit Tran
               end
    SET NOCOUNT OFF
    GO
      

  3.   

    begin tran 的下文就没有了?
      

  4.   

    ADO的COMMAND对象不能调用一个存储过程出现两次以上查询的情况~~~你使用ADO的CONNECTION对象的EXECUTE属性,直接用conn.execute('exec YourProc @args');的方法执行~~~
      

  5.   

    上面两位说的游标循环有错误,以及用你使用ADO的CONNECTION对象的EXECUTE属性,直接用conn.execute('exec YourProc @args');的方法执行到底要怎样改,具体一点说,就是我上面的语句要怎样改才能实现我想要的功能,谢谢!!!
      

  6.   

    熟悉DELPHI調用存儲器的朋友,幫我解決上面這個問題?為什麼沒有真正賳值給@stringItem,每次只是一個空值。這條語句錯在那裡
        begin
          ADOStoredProc2.Parameters.Clear;
          ADOStoredProc2.Parameters.Add;
          ADOStoredProc2.Parameters[0].Name :='@StringItem';
          ADOStoredProc2.Parameters.ParamByName('@StringItem').Value:=string(edit2.Text);
          ADOStoredProc2.execproc;
    end;