下标越界

hz03zhuhaowen 2009-04-08 02:46:56
以下是金蝶ERP二次开发代码,有些是已经被封装好了的.

Private Sub m_BillTransfer_BeforeSave(ByVal bNew As Boolean, ReturnCode As Long)

'TODO: 请在此处添加代码响应事件 BeforeSave
' ReturnCode 返回参数 -1: 失败,结束单据保存;
'0:成功,继续单据保存
'1:成功返回,结束单据保存

Dim cnn As String
Dim cn As New ADODB.Connection
'物料代码
Dim StrItemNumber As String
'成本对象代码
Dim StrCostObj As String
Dim Rs As New ADODB.Recordset
'成本对象内码
Dim LngCostObjID As Long
Dim IntI As Integer
Dim LngA() As Long

On Error GoTo Err

cnn = "Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=AIS20080807081820;Data Source=JINDEEE"
With cn
.ConnectionString = cnn
.Open
End With

StrItemNumber = m_BillTransfer.GetHeadNumber(11)
StrCostObj = m_BillTransfer.GetHeadNumber(5)

Set Rs = cn.Execute("Select FItemID from cbcostobj where FNumber = '" & StrCostObj & "'")

LngCostObjID = Rs.Fields("FItemID")


If LCase(Left(StrItemNumber, 1)) = "z" Or UCase(Left(StrItemNumber, 1)) = "Z" Then

'此SQL语句我在查询分析器里执行有4行记录,监视Rs时,只有第一条记录存在,后面三条都没有,请问是怎么回事?
Set Rs = cn.Execute("Select FCostObjID From ICMO Where FTranType = 85")

ReDim LngA(Rs.RecordCount) As Long '调试到此行报错为"下标越界",请问怎么回事?

Rs.MoveFirst
For IntI = 1 To Rs.RecordCount
LngA(IntI) = Rs.Fields("FCostObjID")
If LngCostObjID = LngA(IntI) Then
MsgBox """成本对象""已被引用,本次操作取消", vbInformation, "金蝶提示"
ReturnCode = -1
Exit Sub
End If
Rs.MoveNext
Next

End If

cn.Close
Exit Sub
Err:
If Err.Number <> 0 Then
MsgBox Err.Description, vbCritical, "错误提示"
End If

End Sub
...全文
121 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangjianyou 2009-04-09
  • 打赏
  • 举报
回复
表没记录,加一个判断Rs.RecordCount>0就行了。。。

^_^
reliang 2009-04-09
  • 打赏
  • 举报
回复
.rows不对
熊孩子开学喽 2009-04-09
  • 打赏
  • 举报
回复
自己都不调试就跑上来问?
hz03zhuhaowen 2009-04-08
  • 打赏
  • 举报
回复
想起来了,监视Rs,其值应该是指当前指针所指的记录,不过RecordCount等于4就对了,
hz03zhuhaowen 2009-04-08
  • 打赏
  • 举报
回复
是等于-1

With cn
.ConnectionString = cnn
.CursorLocation = adUseClient
.Open
End With

正常了.
of123 2009-04-08
  • 打赏
  • 举报
回复

Set Rs = cn.Execute("Select FCostObjID From ICMO Where FTranType = 85")

ReDim LngA(Rs.RecordCount) As Long '调试到此行报错为"下标越界",请问怎么回事?

看看是否 Rs.RecordCount = -1

Set Rs = cn.Execute("Select FCostObjID From ICMO Where FTranType = 85")
Rs.MoveLast
Rs.MoveFirst
hz03zhuhaowen 2009-04-08
  • 打赏
  • 举报
回复
我是楼主
调试ReDim LngA(Rs.RecordCount) As Long 的时候,Rs.RecordCount 它的值为-1

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧