可以对一个数据集的数据循环操作
Tdataset.first
while not eof do
begin
//操作
Tdataset.next
end;

解决方案 »

  1.   

    给你一个我以前开发的游标
    CREATE PROC Sp_SaleRecordOut
            @RecordNo       Char(10),       --销售单号
            @VoucherType    Char(10),       --凭证编码
    @ClientID Char(6),        --客户编号
            @LocationID     Char(6),        --仓库编码
            @Checker        Char(10),       --检验员
    @Provider Char(10), --销售员
    @PaperMaker Char(10), --制单人
    @Confirmer Char(10), --审批人
    @ADate         Date,         --开单日期
            @Note           VarChar(255),   --备注
            @Sender         Char(10),       --发送人
            @Accept         Char(10),       --接收人
            @Account        Char(10),       --记帐人
            @Lender         Char(20),       --借方
            @ErrorMessage   VarChar(40)  Output -- 返回的错误代码
    AS
      DECLARE 
            @RecordNoC     Char(10),       --单据号
    @ItemNoC       Char(6),        --库存项目编码
            @ItemNameC     Char(30),       --产品名称
    @SalesAmountC  Numeric(10,2),  --定购数量
    @UnitPriceC    Numeric(10,2),  --单价
    @AUnitC        Char(4),        --单位
            @TotalC        Numeric(10,2),  --总金额
    @DisCountC     Numeric(10,2),  --折合率
            @BatchNoC      Char(6),        --批次号
    @SalesTypeC    Char(1),        --销售类型 0:成品仓库.1:主机仓库
            @StoreAmount   numeric(10,2),
            @StorePrice    numeric(10,2)
    BEGIN TRAN
     DECLARE SalesRecord_Cur  CURSOR
          FOR SELECT 
    RecordNo,
    ItemNo,
            ItemName,
    SalesAmount,
    UnitPrice,
    AUnit,
            Total,
    DisCount,
            BatchNo,
    SalesType
         FROM DSalesRecord Where RecordNo=@RecordNo  OPEN SalesRecord_Cur   FETCH NEXT FROM SalesRecord_Cur INTO 
            @RecordNoC,
    @ItemNoC,
            @ItemNameC,
    @SalesAmountC,
    @UnitPriceC,
    @AUnitC,
            @TotalC,
    @DisCountC,
            @BatchNoC,
    @SalesTypeC
      WHILE @@FETCH_STATUS = 0
       BEGIN
         IF Exists (Select  *  From StoreInfo Where ItemNo=@ItemNoC)
           Begin                                       --对库存流水表添加
            Select @StoreAmount=Amount From StoreInfo Where ItemNo=@ItemNoC
            Select @StorePrice=UnitPrice From StoreItems Where ItemNo=@ItemNoC
            Insert MstoreList Values                       
                  (@RecordNo,        --流水号(凭证号)
                   @RecordNo,        --凭证号
                   @ClientID,        --仓库编码
                   @Vouchertype,     --凭证编码
                   '1',              --进出标记(0:入库、1:出库)
                   '0',              --内部标记(0:外部、1:内部)
                   @Note,            --摘要
                   @ADate,          --时间
                   @sender,          --借方
                   @Lender,          --贷方
                   @Checker,  --检验员
                   @Accept,   --接受人
                   @sender,          --发送人
                   @Account,         --记账人
                   @PaperMaker,  --制票人
                   @Confirmer  --审核人
                   )
             IF @@ERROR != 0 OR @@ROWCOUNT != 1
               Begin
                 ROLLBACK TRAN
                  SELECT @ErrorMessage = '数据处理的时候出错1!'
                  CLOSE SalesRecord_Cur
                  DEALLOCATE SalesRecord_Cur
                 RETURN -1
               End
             Else
               Begin
                Insert DstoreList values
                     (@RecordNoC,        --凭证号,
                      @ItemNoC,          --库存项目编号
                      @SalesAmountC,     --实发数量
                      @AunitC,      --单位
                      @unitPriceC,      --单价
                      @SalesAmountC*@unitPriceC, --金额
                      @StoreAmount-@SalesAmountC,--余额
                      @BatchNoC,      --批次号码
                      ''             --备注
                      )
                IF @@ERROR != 0 OR @@ROWCOUNT != 1
                  Begin
                    ROLLBACK TRAN
                     SELECT @ErrorMessage = '数据处理的时候出错2!'
                     CLOSE SalesRecord_Cur
                     DEALLOCATE SalesRecord_Cur
                    RETURN -1
                  End 
                Else
                  Begin
                    Update StoreInfo Set Amount=@StoreAmount-@SalesAmountC 
                      Where ItemNo=@ItemNoC AND LocationID=@LocationID
                    IF @@ERROR != 0 --OR @@ROWCOUNT != 1
                      Begin
                        ROLLBACK TRAN
                          SELECT @ErrorMessage = '数据处理的时候出错3!'
                          CLOSE SalesRecord_Cur
                          DEALLOCATE SalesRecord_Cur
                        RETURN -1
                      End
                    ELSE
                     Begin 
                      IF Exists (Select * from Client Where IsMain='Y' And ClientID=@ClientID)
                        Begin
                          Update StoreInfo Set Amount=@StoreAmount+@SalesAmountC 
                            Where ItemNo=@ItemNoC AND LocationID=@ClientID 
                            IF @@ERROR != 0 OR @@ROWCOUNT != 1
                              Begin
                                ROLLBACK TRAN
                                  SELECT @ErrorMessage = '数据处理的时候出错4!'
                                  CLOSE SalesRecord_Cur
                                  DEALLOCATE SalesRecord_Cur
                                RETURN -1
                              End
                        End
                     End                 
                  End            
               End 
           End
      FETCH NEXT FROM SalesRecord_Cur INTO 
            @RecordNoC,
    @ItemNoC,
            @ItemNameC,
    @SalesAmountC,
    @UnitPriceC,
    @AUnitC,
            @TotalC,
    @DisCountC,
            @BatchNoC,
    @SalesTypeC 
      End
     CLOSE SalesRecord_Cur
     DEALLOCATE SalesRecord_Cur
    COMMIT TRAN
    RETURN 0GO
      

  2.   

    使用SQL语言的游标是SQL的事情,你在SQL里写就可以了,如果你想在程序里使用游标,那就是Delphi的事情,比如你想让当前的DataSet专到某一记录,那么就用Delphi里的游标(书签)
    var
      S:String;
    begin
       S:=Query1.Book;//记录要转到的记录
       Query1.GotoBook(pointer(S));//将数据库转到s所记录的位置