单独运行保存过程是,代码无错误,但是先运行计算再计算保存过程是,则提示“错误3704,对象关闭时不允许操作”,我觉得可能是计算过程中与数据库连有错,但为找出来。请各位大侠看看,帮忙指点指点,感激不尽!
保存过程代码:
Private Sub cmdsave_Click()
If objrsstuff.RecordCount > 0 Then
With objrsfoot
If .RecordCount > 0 Then
.MoveFirst
.Find "编号='" & objrsstuff.Fields("编号") & "'"
If .EOF Then
.AddNew
End If
Else
.AddNew
End If
.Fields("姓名") = txtname
.Fields("编号") = txtnum
.Fields("部门") = txtdept
.Fields("职务工资") = Val(Labdutywage)
.Fields("职称工资") = Val(labtitlewage)
.Fields("专家津贴") = Val(txtexpert)
.Fields("房贴") = Val(txthouse)
.Fields("一次性补发") = Val(txtonce)
.Fields("其他补贴") = Val(txtelse)
.Fields("应发合计") = Val(txtsget)
.Fields("扣公积金") = Val(txtdg)
.Fields("扣失业险") = Val(txtds)
.Fields("扣医疗险") = Val(txtdy)
.Fields("扣垃圾费") = Val(txtdl)
.Fields("扣房租") = Val(txtdf)
.Fields("扣其他") = Val(txtdq)
.Fields("应扣合计") = Val(txtdd)
.Fields("实发合计") = Val(txtget)
.Update
MsgBox "<" & txtname & ">的工资结算数据保存成功", vbInformation, "工资结算"
txtnews = "记录:" & objrsstuff.AbsolutePosition & "/" & objrsstuff.RecordCount & "结算数据已保存"
End With
Else
MsgBox "无数据可保存", vbInformation, "工资结算"
End If
End Sub
计算过程代码如下:
Private Sub cmdcount_Click()
Dim constr As String
constr = "Provider=SQLOLEDB.1;server=(local);database=200730171316;User Id=sa;Password=745614;timeout=120"
If objcn.State = adStateOpen Then objcn.Close
objcn.Open constrSet objrs = New Recordset
Set objrs.ActiveConnection = objcn
objrs.CursorLocation = adUseClient
objrs.CursorType = adOpenDynamic
objrs.LockType = adLockOptimistic
strsql = "select * from 职务工资表"
objrs.Open strsqlIf txtduty.Text = "正处" Then
Labdutywage.Caption = objrs.Fields(0)
End If
If txtduty.Text = "副处" Then
Labdutywage.Caption = objrs.Fields(1)
End If
If txtduty.Text = "正科" Then
Labdutywage.Caption = objrs.Fields(2)
End If
If txtduty.Text = "副科" Then
Labdutywage.Caption = objrs.Fields(3)
End If
If txtduty.Text = "其他" Then
Labdutywage.Caption = objrs.Fields(4)
End Ifconstr = "Provider=SQLOLEDB.1;server=(local);database=200730171316;User Id=sa;Password=745614;timeout=120"
If objcn.State = adStateOpen Then objcn.Close
objcn.Open constrSet objrs1 = New Recordset
Set objrs1.ActiveConnection = objcn
objrs1.CursorLocation = adUseClient
objrs1.CursorType = adOpenDynamic
objrs1.LockType = adLockOptimistic
strsql = "select * from 职称工资表"
objrs1.Open strsql
If txttitle.Text = "正高" Then
labtitlewage.Caption = objrs1.Fields(0)
End If
If txttitle.Text = "副高" Then
labtitlewage.Caption = objrs1.Fields(1)
End If
If txttitle.Text = "中级" Then
labtitlewage.Caption = objrs1.Fields(2)
End If
If txttitle.Text = "初级" Then
labtitlewage.Caption = objrs1.Fields(3)
End If
If txttitle.Text = "普通" Then
labtitlewage.Caption = objrs1.Fields(4)
End Iftxtsget.Text = (Val(txtexpert.Text) + Val(Labdutywage.Caption) + Val(txtonce.Text) + Val(txthouse.Text) + Val(labtitlewage.Caption) + Val(txtelse.Text))
txtdd.Text = (Val(txtdg.Text) + Val(txtdl.Text) + Val(txtds.Text) + Val(txtdy.Text) + Val(txtdf.Text) + Val(txtdq.Text))
txtget = (txtsget - txtdd)
End Sub

解决方案 »

  1.   

    要学会单步调试....看出来了  把数据库连接 constr = "Provider=SQLOLEDB.1;server=(local);database=200730171316;User Id=sa;Password=745614;timeout=120"
    放到form_load里
      

  2.   

    我在form_load里面也有这段数据库连接的代码。是不是因为在form_load里面有了这段连接数据库的代码的话,在同一个窗体里面的其他事件不必再次用这段代码打开了?
    非常感谢!
    按你的操作可以成功运行了。