我想通过一个按键来实际数据库内自动盘点的功能,功能很简单就是从现有的库存中减去同样产品的销售数量等一些字段,代码如下。
Private Sub Command1_Click()
sql = "select * from 库存表"
rs.CursorLocation = adUseClient
rs.Open sql, cn, adOpenKeyset, adLockPessimistic
If rs.RecordCount = 0 Then
MsgBox "当前库存数不存在!", vbOKOnly + vbExclamation, "注意"
rs.Close
Exit Sub
End Ifrs.MoveFirst
For i = 1 To rs.RecordCount
sql = "select sum(片数),sum(面积) from 销售单 where 序号=" & rs.Fields(1)
gu.Open sql, cn, adOpenKeyset, adLockPessimistic
If gu.RecordCount > 0 Then
rs.Fields(3) = rs.Fields(3) - gu.Fields(0)
rs.Fields(4) = rs.Fields(4) - gu.Fields(1)
End If
rs.Update
gu.Close
rs.MoveNext
Next i
rs.Close
End Sub我的后台数据库用的是access,结果运行后库存表内片数,面积字段全部为空。
同时我也用了其它的方法,来判断gu.fields(0)是否为空,如果为空库存表内字段不变,可依旧不行搞了两天了还不行,哪位老大知道的话帮忙看看。顺便把源代码帮忙改一下看看是不是哪里错了。

解决方案 »

  1.   

    首先确定sql里面有数据!
    跟踪调 试 一 下!rs.Fields(3) = rs.Fields(3) - gu.Fields(0)
    rs.Fields(4) = rs.Fields(4) - gu.Fields(1)       //??????????????????
      

  2.   

    有那么麻烦吗?
    如果"select * from 库存表"的结果不为空的话,直接一个sql语句不就解决了吗?为什么要搞循环呢?
    update 库存表 set Fields(3)=Fields(3)-销售单.sum(片数),Fields(4)=Fields(4)-销售单.sum(面积) where 销售单.序号=库存表.Fields(0)
      

  3.   

    楼上的,你的方法是很好,一个语句就可以了,可是在VB里面它不行呀。
    库存表有五个字段,第一个是序号,第二三不重要,第四个是片数,第五是面积。
    销售单里如果没有销售的话减掉后就会出现空值在VB里面不是原先的数。而且在FOR 循环里只能用IF   END IF 条件判断条件,不可以用ELSE。
    而且上面的话句,运行不了.
      

  4.   

    rs(3) = (3) - gu.(0)
    rs(4) = (4) - gu(1)
    去掉 .fields
      

  5.   

    rs(3) = rs(3) - gu.(0)
    rs(4) = rs(4) - gu(1)
    是这样
      

  6.   

    sql = "select sum(片数),sum(面积) from 销售单 where 序号=" & rs.Fields(1)
    改成
    sql = "select sum(片数),sum(面积) from 销售单 where 序号=" & rs(1)