我使用DataGrid控件显示我数据库中的内容,有时候在输入数据库内容的时候内容会因为失误照成录入错误,所以我修改的时候会直接通过DataGrid控件进行修改。但是因为我数据库中有3个表,一个是物品的入库记录,一个是物品的出库记录,还有一个是总的物品库。物品入库表和出库表里边的字段都是一样的,为品名、单价、数量、货物余额、单位、金额、备注、经办人、结余金额、日期。而总的物品库中的字段只有品名、货物余额、结余金额3个。我现在请教群里的朋友,如果我直接对DataGrid控件进行修改同一物品的数量和金额时,能不能我总的物品库中的货物余额和结余金额能直接进行修改啊?
B)也可以在 DataGrid 的 AfterInsert、AfterDelete、AfterUpdae 事件中进行更新库存表。
我没有说明白,意思就是在我入库表或是出库表中如果数量或是金额通过DataGrid控件更改了,我总的物品库可以判断出来自己进行更改货物余额或是结余金额。
B)也可以在 DataGrid 的 AfterInsert、AfterDelete、AfterUpdae 事件中进行更新库存表。 第一种方法我没有接触过,所以不会使用,请问你这个DataGrid中的AfterUpdae事件是怎么操作完成的呢,是通过Command控件点击完成还是在我程序中用鼠标点击DataGrid控件中内容直接修改后就可以激发呢?
猴哥,你说的第一步方法,我看了,请问下我怎么更新我总得物品库呢,是需要全部更新吗,因为更新的话我肯定的从新计算更改物品目前在库存中有多少剩余数量还有剩余金额。还有怎么判断DataGrid更改的是哪一种物品呢?
第二步在DataGrid 控件中被写到数据库后被触发AfterUpdate 事件,这时候能把修改的物品名称得出吗?
Private Sub DataGrid1_AfterUpdate()
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = "select sum(数量) from 出库 where 品名='" + Combo2.Text + "'"
Adodc1.Refresh
Text1.Text = Val(Adodc1.Recordset.Fields(0) & "")Adodc2.CommandType = adCmdText
Adodc2.RecordSource = "select sum(数量) from 入库 where 品名='" + Combo2.Text + "'"
Adodc2.Refresh
Text8.Text = Val(Adodc2.Recordset.Fields(0) & "")Text9.Text = Val(Text8.Text) - Val(Text1.Text)
End Sub
2、事件发生时通过DataGrid列来判断物品名称,然后更新。Private Sub DataGrid1_AfterUpdate()
Dim iWp As String
iWp = DataGrid1.Columns(1).Value'被更新行第二列的值(假设为物品名称),自己改。
....
End Sub
2、修改了数据库中的出库表(或入库表)进而可以关联地更新数据库中的总物品表。
3、你应在总物品表中多设两个字段,1个是入库表ID,另1个是出库表的ID。
4、在总物品表中根据出库表(或入库表)修改的ID号对总物品表中的此条记录进行更新操作。
Private Sub DataGrid1_AfterUpdate()
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = "select sum(数量) from 出库 where 品名='" + DataGrid1.Columns(1).Value + "'"
Adodc1.Refresh
Text1.Text = Val(Adodc1.Recordset.Fields(0) & "")
Adodc2.CommandType = adCmdText
Adodc2.RecordSource = "select sum(数量) from 入库 where 品名='" + DataGrid1.Columns(1).Value + "'"
Adodc2.Refresh
Text8.Text = Val(Adodc2.Recordset.Fields(0) & "")
Text9.Text = Val(Text8.Text) - Val(Text1.Text)
2、修改了数据库中的出库表(或入库表)进而可以关联地更新数据库中的总物品表。
3、你应在总物品表中多设两个字段,1个是入库表ID,另1个是出库表的ID。
4、在总物品表中根据出库表(或入库表)修改的ID号对总物品表中的此条记录进行更新操作。
这个程序已经在用了,如果在增加可以吗?当初开始设计的时候不会使用这种方法。
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = "select sum(数量) from 出库 where 品名='" + DataGrid1.Columns(0).Value + "'"
Adodc1.Refresh
Text1.Text = Val(Adodc1.Recordset.Fields(0) & "")Adodc2.CommandType = adCmdText
Adodc2.RecordSource = "select sum(数量) from 入库 where 品名='" + DataGrid1.Columns(0).Value + "'"
Adodc2.Refresh
Text8.Text = Val(Adodc2.Recordset.Fields(0) & "")Text9.Text = Val(Text8.Text) - Val(Text1.Text)sql1 = "select * from 芯片库 "
Adodc3.Recordset.Fields("货物余额") = Val(Text9.Text)
Adodc3.Recordset.Update
Adodc3.Refresh
不过用这样的更新用绑定效率不高,最好直接用 ADODB.Connection.Execute() 直接执行一个类似下面格式的 SQL
UPDATE 库存
SET 数量 = (SELECT SUM(数量) FROM 入库 WHERE 品名='...') -
(SELECT SUM(数量) FROM 出库 WHERE 品名='...')
WHERE 库存.品名='...'
Dim sqlUpdate As String
sqlUpdate = "update 芯片库 set 货物余额 = (select sum(数量) form 入库 where 品名=" + Text5.Text + "') - (select sum(数量) form 出库 where 品名=" + Text5.Text + "') where 品名='" + Text5.Text + "'"
Dim rs_sumupdate As New ADODB.Recordset
rs_sumupdate.CursorLocation = adUseClient
rs_sumupdate.Open sqlUpdate, conn, adOpenKeyset, adLockPessimistic
Private Sub DataGrid1_AfterUpdate() 事件。没有执行里边的操作,这事问什么啊?
Private Sub DataGrid1_AfterUpdate()Adodc1.CommandType = adCmdText
Adodc1.RecordSource = "select sum(金额) from 出库 where 品名='" + DataGrid1.Columns(0).Value + "'"
Adodc1.Refresh
Text11.Text = Val(Adodc1.Recordset.Fields(0) & "")Adodc2.CommandType = adCmdText
Adodc2.RecordSource = "select sum(金额) from 入库 where 品名='" + DataGrid1.Columns(0).Value + "'"
Adodc2.Refresh
Text12.Text = Val(Adodc2.Recordset.Fields(0) & "")
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = "select sum(金额) from 出库 where 品名='" + DataGrid1.Columns(0).Value + "'"
Adodc1.Refresh
Text11.Text = Val(Adodc1.Recordset.Fields(0) & "") 后发现DataGrid1.Columns(0).Value中的内容不是我的物品品名,但是我DataGrid1第一列就是显示的品名啊,这是为啥啊?
Adodc1.RecordSource = "select sum(数量) from 出库 where 品名='" + DataGrid1.Columns(0).Value + "'" '关联到数据库中的表。
'这里应写:DataGrid1中填写的内容应赋给数据库中表对应的字段(写代码)。
Adodc1.Update '更新记录集
Adodc1.RecordSource = "select sum(数量) from 出库 where 品名='" + DataGrid1.Columns(0).Value + "'" '关联到数据库中的表。
'这里应写:DataGrid1中填写的内容应赋给数据库中表对应的字段(写代码)。
Adodc1.Update '更新记录集我现在就是不知道我更新总数据库中应该是哪一条的数据,要想知道需要更新哪条数据就得先知道是对DataGrid1操作更改的是哪个物品的品名,这样才能对总物品库中这个品名的具体内容进行更新啊!我现在得到的DataGrid1.Columns(0).Value中的值好像不是品名这个字段的。
你说DataGrid1.Columns(0).Value不是你需要的品名,你可以Debug.Print 看看,到底是什么,应该是得到当前行的第一列值
剩下的上面几位都说了。
那个ID让我给删了。。数据库中第一列就是品名。