建议使用触发器,这样,你的毕业设计也有一定的技术含量了。
给一个例子:在OrderItems表上创建一个插入触发器,在添加一个订单明细记录时,减少Products表相应货品记录中的库存量。
CREATE TRIGGER OrderItemsInsert
ON OrderItems
FOR INSERT
AS
UPDATE Products SET PRoducts.Quantity = PRoducts.Quantity - Inserted.Quantity
FROM Products , Inserted
WHERE PRoducts.P_id = Inserted.P_id
GO
给一个例子:在OrderItems表上创建一个插入触发器,在添加一个订单明细记录时,减少Products表相应货品记录中的库存量。
CREATE TRIGGER OrderItemsInsert
ON OrderItems
FOR INSERT
AS
UPDATE Products SET PRoducts.Quantity = PRoducts.Quantity - Inserted.Quantity
FROM Products , Inserted
WHERE PRoducts.P_id = Inserted.P_id
GO
create PROC insert
@@a int(20),
@@b int(20),
@@c int(20)
as
select @@a=select sum(数量) from purchase where 商品名称 in (select 商品名称 from product)
select @@b=select sum(数量) from sale where 商品名称 in (select 商品名称 from product)
set @@c=@@a-@@b
UPDATE Products SET 库存=@@c
go
然后调用
Private Sub Command1_Click()
Dim conn As New ADODB.Connection
Dim connstring As String
= "Provider=SQLOLEDB.1;Password=ecc;Persist Security " _
& "Info=True;User ID=sa;Initial Catalog=PurchaseandSale;Server=(local)"
If conn.State <> 1 Then '打开数据库
conn.Open (connstring)
End If
conn.Execute (exec proc insert) '执行库存盘点操作
conn.Close
adoKCPD.Refresh '刷新库存 End Sub
但我目前这样的问题,不知道能不能直接改一下呢?
各各朋友都帮我看下,提点建议,麻烦你们了!!
有时还有这样的情况,比如修改订单里的产品数量,也要更新库存,所以要有update触发器。
例子:
CREATE TRIGGER OrderItemsInsert
ON OrderItems
FOR INSERT, UPDATE
AS
UPDATE Products SET PRoducts.Quantity = PRoducts.Quantity - Inserted.Quantity
FROM Products , Inserted
WHERE PRoducts.P_id = Inserted.P_id
GO
--------------------
建议看看sql server的教程或帮助,理解触发器。
好心疼啊! 本来已经是很少的代码量了!老师非得把我骂死!
我先看看,实在不行,就用触发器了!我已经好好理解了触发器了
我已经在SQL里运行了你的代码,代码没有错误,就是好象功能没有实现!
帮我看看:CREATE TRIGGER purchaseInsert
ON purchase
FOR INSERT, UPDATE
AS
UPDATE product SET product.库存 = purchase.数量- sale.数量
FROM product,purchase , sale
WHERE product.商品名称 = sale.商品名称 and sale.商品名称=purchase.商品名称
没有实现的功能如下:
1,没有更新product里的数据
2,如果sale对应的数据项不存在或为0,这样相减的话,会不会出现问题
3,另外,我用了3个表,你提示的是2个表,应该不会有问题吧?(我必须得用3个表)
kzh80000(康政辉):不知道你还会不会再看这个贴,不过也得谢谢你,
你提供的存储过程代码运行 的时候,总是提示:1,insert附近有错误
2,@@a 没定义
@@b 没定义
大伙也帮我看看吧,看是什么问题!
谢谢了!
能在QQ里帮我解决问题的话,更是感激!QQ:452735276 在线等
CREATE TRIGGER purchaseInsert
ON purchase
FOR INSERT, UPDATE
AS
UPDATE product SET product.库存 = purchase.数量- sale.数量
FROM product,purchase , sale
WHERE product.商品名称 = sale.商品名称 and sale.商品名称=purchase.商品名称
这种算法的结果是不正确的。你会发现每种产品的库存数量比正确的值要小。
1,我要更新的是 product 表中的“库存”数据项。
2,我感觉是我的代码不够严谨。
要怎么改,我觉得:是不是先要判断表“采购产品表”中是否有对应的数据元素
再判断“销售产品表”中是不是有对应的数据元素
没有该什么办?
3,我对这代码的编写很是不清楚!
declare @a int(20),@b int(20),@c int(20)
as
select @a=select sum(数量) from purchase where 商品名称 in (select 商品名称 from product)
select @b=select sum(数量) from sale where 商品名称 in (select 商品名称 from product)
set @c=@a-@b
UPDATE Products SET 库存=@c
go然后调用
Private Sub Command1_Click()
Dim conn As New ADODB.Connection
Dim connstring As String
= "Provider=SQLOLEDB.1;Password=ecc;Persist Security " _
& "Info=True;User ID=sa;Initial Catalog=PurchaseandSale;Server=(local)"
If conn.State <> 1 Then '打开数据库
conn.Open (connstring)
End If
conn.Execute (exec insert) '执行库存盘点操作
conn.Close
adoKCPD.Refresh '刷新库存 End Sub
declare @a int,@b int,@c int
as
select @a=select sum(数量) from purchase where 商品名称 in (select 商品名称 from product)
select @b=select sum(数量) from sale where 商品名称 in (select 商品名称 from product)
set @c=@a-@b
UPDATE Products SET 库存=@c
go然后调用
Private Sub Command1_Click()
Dim conn As New ADODB.Connection
Dim connstring As String
= "Provider=SQLOLEDB.1;Password=ecc;Persist Security " _
& "Info=True;User ID=sa;Initial Catalog=PurchaseandSale;Server=(local)"
If conn.State <> 1 Then '打开数据库
conn.Open (connstring)
End If
conn.Execute (exec insert) '执行库存盘点操作
conn.Close
adoKCPD.Refresh '刷新库存 End Sub
CREATE proc stor1
@a int,
@b int,
@c int
as
set @a=(select sum(数量) from purchase where 商品名称 in (select 商品名称 from product))
set @b=(select sum(数量) from sale where 商品名称 in (select 商品名称 from product))
set @c=@a-@b
UPDATE product SET 库存=@c
GO
调用语句如下:
Private Sub Command1_Click()
Dim conn As New ADODB.Connection
Dim connstring As String
connstring = "Provider=SQLOLEDB.1;Password=ecc;Persist Security " _
& "Info=True;User ID=sa;Initial Catalog=PurchaseandSale;Server=(local)"
If conn.State <> 1 Then '打开数据库
conn.Open (connstring)
End If
conn.Execute ( exec stor1) '执行库存盘点操作<-----出现问题
conn.Close
adoKCPD.Refresh '刷新库存End Sub
错误提示:“stor1” 缺少列表分隔符 或 )说明:在过程调用代码中,根据错误提示
declare @a int(20),@b int(20),@c int(20) 不能有 declare 和(20)
自制件在采购表中没有记录但在销售表中会有记录,这是还是要更新库存量的。最好是在存储过程中按照你的业务有条理 的分开实现。而不是单单一个sql就可以解决的。建议先从业务角度分析总结出几种情况,然后决定如何处理。
declare @a int,
@b int,
@c intselect @a=(select sum(数量) from purchase where 商品名称 in (select 商品名称 from product))
select @b=(select sum(数量) from sale where 商品名称 in (select 商品名称 from product))
set @c=@a-@b
UPDATE product SET 库存=@c
GO
Private Sub Command1_Click()
Dim conn As New ADODB.Connection
Dim strUpdate As String
Dim connstring As String
connstring = "Provider=SQLOLEDB.1;Password=ecc;Persist Security " _
& "Info=True;User ID=sa;Initial Catalog=PurchaseandSale;Server=(local)"
If conn.State <> 1 Then '打开数据库
conn.Open (connstring)
End If
conn.Execute ("exec stor1") '执行库存盘点操作
conn.Close
adoKCPD.Refresh '刷新库存End Sub运行的结果居然是:product表中所有商品的库存量都更新得一样的了 ,更新为第一个商品的正确库存怎么改呢?大家指点我一下