可以对一个数据集的数据循环操作
Tdataset.first
while not eof do
begin
//操作
Tdataset.next
end;
Tdataset.first
while not eof do
begin
//操作
Tdataset.next
end;
解决方案 »
- delphi生成EXE文件时检测有没dat文件才能生成exe
- delphi for net 如何制作报表?
- 类型抽象的问题...麻烦指点下,卡壳了....-_-!
- 在多线程中用SOCKET出现的问题
- 关于Delphi深度探索-活动目录开发
- 别惹我,惹我我骂谁!
- 请教使用TADODataset的命令实现Master/Detail关系时出现的问题(更新方式为批次更新)
- 如何或者BDE中的Datebase Name
- 听说delphi要涨价了,真的?假的?
- 谁有能显示多个字段的DBComboBox控件,不胜感激!
- undeclared identitier:'showmessage'是什么意思?为什么showmessage('显示对话框')这语句运行不了?
- 我该怎样选择?跟者有分
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
var
S:String;
begin
S:=Query1.Book;//记录要转到的记录
Query1.GotoBook(pointer(S));//将数据库转到s所记录的位置