用VB+Access做程序,总是提示"无效使用null",不知道是什么原因?

PublicSubdisplaygrid1()DimiAsIntegerOnErrorGoTodisplayerrorsetgridsetgridheadIfNotrs_... Public Sub displaygrid1()
Dim i As Integer
On Error GoTo displayerror
setgrid
setgridhead
If Not rs_data1.EOF Then
rs_data1.MoveFirst
MSFlexGrid1.Row = 0
Do While Not rs_data1.EOF
MSFlexGrid1.Row = MSFlexGrid1.Row + 1
MSFlexGrid1.Col = 0
If IsNull(rs_data1.Fields(0)) Then MSFlexGrid1.Text = rs_data1.Fields(0) Else
MSFlexGrid1.Text = ""
MSFlexGrid1.Col = 0
If IsNull(rs_data1.Fields(1)) Then MSFlexGrid1.Text = rs_data1.Fields(1) Else
MSFlexGrid1.Text = ""
MSFlexGrid1.Col = 1
If IsNull(rs_data1.Fields(2)) Then MSFlexGrid1.Text = rs_data1.Fields(2) Else
MSFlexGrid1.Text = ""
MSFlexGrid1.Col = 2
If IsNull(rs_data1.Fields(3)) Then MSFlexGrid1.Text = rs_data1.Fields(3) Else
MSFlexGrid1.Text = ""
MSFlexGrid1.Col = 3
If IsNull(rs_data1.Fields(4)) Then MSFlexGrid1.Text = rs_data1.Fields(4) Else
MSFlexGrid1.Text = ""
MSFlexGrid1.Col = 4
If IsNull(rs_data1.Fields(5)) Then MSFlexGrid1.Text = rs_data1.Fields(5) Else
MSFlexGrid1.Text = ""
MSFlexGrid1.Col = 5
'rs_data1.MoveNext
Loop
End If
displayerror:
If Err.Number <> 0 Then
MsgBox Err.Description
End If
End Sub
Public Sub setgrid()
Dim i As Integer
On Error GoTo seterror
With MSFlexGrid1
.ScrollBars = flexScrollBarBoth
.FixedCols = 0
.Rows = rs_data1.RecordCount + 1
.Cols = 6
.SelectionMode = flexSelectionByRow
For i = 0 To .Rows - 1
.RowHeight(i) = 315
Next
For i = 0 To .Cols - 1
.ColWidth(i) = 1300
Next i
End With
Exit Sub
seterror:
MsgBox Err.Description
End Sub
Public Sub setgridhead()
On Error GoTo setheaderror
MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = "编号"
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = "购买日期"
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = "书名"
MSFlexGrid1.Col = 3
MSFlexGrid1.Text = "类型"
MSFlexGrid1.Col = 4
MSFlexGrid1.Text = "定价"
MSFlexGrid1.Col = 5
MSFlexGrid1.Text = "备注"
Exit Sub
setheaderror:
MsgBox Err.Description
End Sub
Private Sub Form_Unload(Cancel As Integer)
findok = False
rs_data1.Close
'rs_custom.Close
End Sub
Private Sub MSFlexGrid1_Click()
On Error GoTo griderror
Dim getrow As Long
getrow = MSFlexGrid1.Row
If MSFlexGrid1.Rows = 1 Then
MsgBox "无相关记录", vbOKOnly + vbExclamation, ""
'Else
'select_row = MSFlexGrid1.TextMatrix(getrow, 0)
End If
griderror:
If Err.Number <> 0 Then
MsgBox Err.Description
End If
End Sub
展开
 我来答
wu_kang_lin
2012-02-08 · TA获得超过170个赞
知道小有建树答主
回答量:490
采纳率:50%
帮助的人:315万
展开全部
两个地方:
1:是数据库中查询的列数值为空时.
2:将数据导入到 MSFlexGrid 控件时如果数据为空时.建议你使用断点查找错误地方.

第一个地方时: rs_data1.Fields(0).value & "" 使用这个方法可解决一部分问题.

你的表头设定建议:一维数组加循环更好并做一个单独函数.
行赋值的操作也采用一维数组加循环来操作.

If IsNull(rs_data1.Fields(0)) Then MSFlexGrid1.Text = rs_data1.Fields(0) Else
isnull 如果表达式为 Null,则 IsNull 返回 True;否则 IsNull 返回 False

setgridhead() 过程设定表头及宽度
setgrid() 过程设定总列数与总行数
你所说的错误估计在过程 displaygrid1() 中吧?
'rs_data1.MoveNext 这一句你为何在循环中要注销呢.
循环前已判断 EOF 为何还在前面使用 NOT EOF 呢 不必要了.
追问
可是表里的字段值不是空的呀!显示的时候,第一行只有后两个字段的值能显示,前四个字段都有值啊,怎么会显示不出来呢?
追答
是在displaygrid1()过程中吗?  总列数与所查询的列数相等吗?

你使用断点查找错误 不要采用 if .....elseif....end if 这种方式赋值

Do While Not rs_data1.EOF
MSFlexGrid1.Row = MSFlexGrid1.Row + 1
MSFlexGrid1.Col = 0
If IsNull(rs_data1.Fields(0)) Then
MSFlexGrid1.Text = rs_data1.Fields(0)
Else
MSFlexGrid1.Text = ""
MSFlexGrid1.Col = 0
If IsNull(rs_data1.Fields(1)) Then
MSFlexGrid1.Text = rs_data1.Fields(1)
Else
MSFlexGrid1.Text = ""
MSFlexGrid1.Col = 1
If IsNull(rs_data1.Fields(2)) Then
MSFlexGrid1.Text = rs_data1.Fields(2)
Else
MSFlexGrid1.Text = ""
MSFlexGrid1.Col = 2
If IsNull(rs_data1.Fields(3)) Then
MSFlexGrid1.Text = rs_data1.Fields(3)
Else
MSFlexGrid1.Text = ""
MSFlexGrid1.Col = 3
If IsNull(rs_data1.Fields(4)) Then
MSFlexGrid1.Text = rs_data1.Fields(4)
Else
MSFlexGrid1.Text = ""
MSFlexGrid1.Col = 4
If IsNull(rs_data1.Fields(5)) Then
MSFlexGrid1.Text = rs_data1.Fields(5)
Else
MSFlexGrid1.Text = ""
MSFlexGrid1.Col = 5
'rs_data1.MoveNext
Loop
如果第一个列为空则你的文本输入了一个空值.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式