设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 3884|回复: 18
打印 上一主题 下一主题

[查询] 请教在SQL查询分析器里可以顺利执行并获得结果,但在ACCESS项目里无法返回结果,如

[复制链接]
跳转到指定楼层
1#
发表于 2005-6-8 22:34:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在SQL查询分析器里可以执行,

但在ACCESS项目中不能作为视图或函数(有临时表)运行,

作为存储过程可以执行但没有返回结果。请问是什么原因?

具体如下:
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2005-6-8 22:34:00 | 只看该作者
先进先出的数据冲销处理 --示例数据:

create table 销售订单(单号 varchar(10),日期 datetime,货品编码 varchar(10),数量 int)

insert 销售订单

select 'A1','2005-5-1','ABCD',100 union all

select 'A2','2005-5-3','ABCD',200 union all

select 'A3','2005-5-4','ABCD',300 union all

select 'A4','2005-5-8','ABCD',500create table 销售发货单(单号 varchar(10),日期 datetime,货品编码 varchar(10),数量 int)

insert 销售发货单

select 'B1','2005-5-05','ABCD',250 union all

select 'B2','2005-5-07','ABCD',100 union all

select 'B3','2005-5-10','ABCD',150'

GO

3#
 楼主| 发表于 2005-6-8 22:35:00 | 只看该作者
问题描述:

    对于示例数据中的销售订单和销售发货单,由于客户在做销售发货时无法指定本次是要发那一张订单的东西。所以销售订单无法与销售发货单关联。客户要求以先进先出的方式统计销售订单的执行情况。对于示例数据,要求结果如下:

单号        日期             货品编码    订单数量    发货数量     待执行数量      

---------- ----------------- ------------- -------------- --------------- ------------------

A1         2005-05-01   ABCD       100            100              0

A2         2005-05-03   ABCD       200            200             0

A3         2005-05-04   ABCD       300            200            100

A4         2005-05-08   ABCD       500            0                 500

                                      合计          1100         500             600

4#
 楼主| 发表于 2005-6-8 22:35:00 | 只看该作者
--查询处理的过程

select

    a.单号,a.日期,a.货品编码,

    订单数量=a.数量,

    发货数量=isnull(case when a.s数量<b.数量 then a.数量 else b.数量-a.p数量 end,0),

    待执行数量=case when a.s数量<b.数量 then 0 else a.s数量-isnull(b.数量,a.p数量) end

into # from(

    select 单号,日期=convert(char(10),日期,120),货品编码,

        数量=sum(数量),

        p数量=isnull((select sum(数量) from 销售订单

    where 货品编码=a.货品编码

        and(datediff(day,日期,min(a.日期))>0

        or datediff(day,日期,min(a.日期))=0 and 单号<a.单号)),0),

        s数量=isnull((select sum(数量) from 销售订单

            where 货品编码=a.货品编码

                and(datediff(day,日期,min(a.日期))>0

                or datediff(day,日期,min(a.日期))=0 and 单号<=a.单号)),0)

    from 销售订单 a

    group by 单号,convert(char(10),日期,120),货品编码

)a

    left join(

        select 货品编码,数量=sum(数量)

        from 销售发货单

        group by 货品编码

    )b on a.货品编码=b.货品编码

        and a.p数量<b.数量

order by a.单号,a.日期,a.货品编码select * from #

union all

select '','','合计',sum(订单数量),sum(发货数量),sum(待执行数量) from #

drop table #
5#
发表于 2005-6-9 22:42:00 | 只看该作者
我有个先进先出的东东
6#
发表于 2005-6-9 22:43:00 | 只看该作者
begin transactionCREATE TABLE #销售明细转库存临时表(  

id INT PRIMARY KEY,

仓库 nvarchar(50),

销售订单号 nvarchar(50),

品名规格 nvarchar(50),

数量 real

)INSERT INTO #销售明细转库存临时表

      (销售订单号, 品名规格, 数量, 仓库,id)

SELECT 销售订单号, 品名规格, 数量, @仓库 AS Expr1, id

FROM dbo.销售_订单明细表 where 销售订单号=@销售订单号

while EXISTS(SELECT * FROM #销售明细转库存临时表)

begindeclare @id int

declare @销售数 real

declare @库存数 realdeclare @品名规格 nvarchar(50)

declare @库存id int

declare @余数 real

declare @err int

declare @错误文字 nvarchar(50)set @id=(select min(id) as 最小id from #销售明细转库存临时表)

set @销售数=(select 数量 from #销售明细转库存临时表 where id=@id )

set @品名规格=(select 品名规格 from  #销售明细转库存临时表 where id=@id )--------------检查是否可以出库----------------------------------------------------------------------

if not EXISTS(select 品名规格 from dbo.核算_库存成本表 WHERE  (仓库 = @仓库)  AND (品名规格 = @品名规格))-- and (结余数量 <> 0))

   begin

    select @错误='仓库里面没有 '+@品名规格+' 这个品种!无法销售!'

         rollback transaction

           return -100

   enddeclare @总库存数 real

set @总库存数=(select sum(结余数量) from dbo.核算_库存成本表 WHERE (仓库 = @仓库) AND (品名规格 = @品名规格))--(结余数量 <> 0) AND

if @销售数>@总库存数

   begin

        select @错误=@品名规格+' 库存只有: '+cast(@总库存数 as nvarchar(20))+' 吨,数量不足!无法销售!'

         rollback transaction

     return -100

   end

-------------------------------------------------------------------------------------------生成销售订单号-------------------------------------------------------------

declare @订单号 nvarchar(50)

declare @销售单位 nvarchar(50)

declare @代码 nvarchar(50)

set @销售单位=(select 销售单位 from dbo.销售_订单记录表 where 销售订单号=@销售订单号)if exists(SELECT * FROM dbo.销售_记录表 WHERE (销售日期 = CONVERT(nvarchar(10), GETDATE(), 112)) AND  (销售单位 = @销售单位))

begin

set @订单号=(SELECT LEFT(MAX(销售订单号), 10) + cast(RIGHT(MAX(销售订单号), 4) + 1 as nvarchar) AS Expr1  FROM dbo.销售_记录表  WHERE (销售日期 = CONVERT(nvarchar(10), GETDATE(), 112)) AND  (销售单位 = @销售单位))

endelse

begin

set @代码=(select 代码 from dbo.基础_公司设置表 where(公司设置=@销售单位))

set @订单号=@代码+'XS'+convert(nvarchar(10),getdate(),12)+'1001'

End

-------------------------------------------------------------------------------------------------------先进先出分配库存------------------------------------------------------------------------------------

-----------如果是库存是负数的,则全部滚到下批次的库存成本中---------------------------------------------------------------set @库存数=(SELECT TOP 1 结余数量 FROM dbo.核算_库存成本表 WHERE (结余数量 <> 0) AND (仓库 = @仓库) AND (品名规格 = @品名规格))

set @库存id=(SELECT TOP 1 id FROM dbo.核算_库存成本表 WHERE (结余数量 <> 0) AND (仓库 = @仓库) AND (品名规格 = @品名规格))

declare @库存订单号 nvarchar(50)

set @库存订单号=(select top 1 对应单号 from dbo.核算_库存成本表 WHERE (结余数量 <> 0) AND (仓库 = @仓库) AND (品名规格 = @品名规格))   if  @销售数>@库存数

     begin

      UPDATE dbo.核算_库存成本表 SET 销售数量 = 销售数量+@库存数 WHERE (id = @库存id)

            if (select 结余数量 from dbo.核算_库存成本表 where id=@库存id)<0   

              begin

                 rollback transaction

                 select @错误='程序出现错误!无法销售出库,请重试!'

                 return -100

              end

         insert into dbo.核算_销售成本先进先出表(销售单号,对应采购单号,品名,数量) values(@订单号,@库存订单号,@品名规格,@库存数)

      UPDATE #销售明细转库存临时表 set 数量=数量-@库存数 WHERE (id = @id)

     end

    else

     begin

         update dbo.核算_库存成本表 SET 销售数量 = 销售数量+@销售数 WHERE (id = @库存id)

             if (select 结余数量 from dbo.核算_
7#
 楼主| 发表于 2005-6-9 23:06:00 | 只看该作者
谢谢!研究中..... :)
8#
 楼主| 发表于 2005-6-9 23:20:00 | 只看该作者
增加两个声明后

declare @仓库 nvarchar(50)

declare @销售订单号 nvarchar(50)

还是返回‘在此上下文中不能使用带有返回值的 RETURN 语句。’
9#
发表于 2005-6-10 16:48:00 | 只看该作者
有没有开始事务?有没有回滚事务?

10#
 楼主| 发表于 2005-6-10 22:50:00 | 只看该作者
不明白,

能不能详细解释下,

谢谢!:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-11 15:27 , Processed in 0.118860 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表