关于RECORDSET对象的FIELD对象的VALUE变成NULL!非常奇怪的问题! 你那个COMMANDBUTTON的CLICK事件做些什么事啊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 什么也没有作!就是刚刚执行到COMMADN的CLICK事件的第一条语句,但是还没有执行时,就发生了VALUE变成NULL的事情了,可是我在表中对这个字段是不允许空值的呀! 是多用户用的数据库吗?可能是别的程序更改了数据库内容也许你的记录集的游标,Locktype等要设一下, 首先生命,不不是多用户用的数据库,而是单机使用!记录集的游标使用的是ADUSERCLIENT! ADUSERCLIENT?? you mean adUseClient? 是adUseClient,我拼错了,对不起!另外,代码如下:(程序在运行到***处出错了)Dim sybhsyqyz As String Dim sybhsyqrq As String Dim tcqfw As String Dim sybhsyhyz As String Dim zdyz As String Dim zxyz As String Dim bz As String Dim cnn1 As New ADODB.ConnectionDim rst1 As New ADODB.RecordsetDim rst2 As New ADODB.RecordsetDim rst3 As New ADODB.RecordsetDim str1 As StringDim n As IntegerPrivate Sub Form_Load()sybhsyqyz = ""sybhsyqrq = ""tcqfw = ""sybhsyhyz = ""dqsyxmfl = ""zdyz = ""zxyz = ""bz = ""cnn1.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\jysj.mdb"If sfbz = "否" Then str1 = "select * from 检验阈值表 where ( " & "任务单编号 = '" & rwdbh & "' And 探测器类型 = '" & tcqlx & "' And 试验项目 = '一致性' And 试样编号 = '" & dqsybh & "' And 阈值 <> '') "Else str1 = "select * from 检验阈值表 where ( " & "任务单编号 = '" & rwdbh & "' And 探测器类型 = '" & tcqlx & "' And 试验项目 = '响应阈值' And 试样编号 = '" & dqsybh & "' And 阈值 <> '') "End Ifrst1.CursorLocation = adUseClientrst1.Open str1, cnn1, adOpenKeyset, adLockOptimistic, adCmdTextSet DataGrid1.DataSource = rst1If rst1.RecordCount = 1 Then sybhsyqrq = rst1("检验日期") sybhsyqyz = rst1("阈值")End IfDataGrid1.Columns(0).Visible = False '设置字段为看不见DataGrid1.Columns(1).Visible = FalseDataGrid1.Columns(2).Visible = FalseDataGrid1.Columns(3).Visible = FalseDataGrid1.Columns(4).Visible = FalseDataGrid1.Columns(10).Visible = FalseDataGrid1.Columns(11).Visible = FalseDataGrid1.Columns(12).Visible = FalseDataGrid1.Columns(13).Visible = FalseDataGrid1.Refreshstr1 = "select * from 检验阈值表 where ( " & "任务单编号 = '" & rwdbh & "' And 探测器类型 = '" & tcqlx & "' And 试验项目 = '" & dqsyxm & "' And 试样编号 = '" & dqsybh & "' And 阈值 <> '') "rst2.CursorLocation = adUseClientrst2.Open str1, cnn1, adOpenKeyset, adLockOptimistic, adCmdTextIf rst2.RecordCount > 0 Then sybhsyhyz = rst2("阈值")End IfSet DataGrid2.DataSource = rst2DataGrid2.Columns(0).Visible = False '设置字段为看不见DataGrid2.Columns(1).Visible = FalseDataGrid2.Columns(2).Visible = FalseDataGrid2.Columns(3).Visible = FalseDataGrid2.Columns(4).Visible = FalseDataGrid2.Columns(10).Visible = FalseDataGrid2.Columns(11).Visible = FalseDataGrid2.Columns(12).Visible = FalseDataGrid2.Columns(13).Visible = FalseDataGrid2.Refreshstr1 = "select * from " & dqsyxm & "记录表 where ( " & "任务单编号 = '" & rwdbh & "' And 探测器类型 = '" & tcqlx & "' And 试样编号 = '" & dqsybh & "' )"rst3.CursorLocation = adUseClientrst3.Open str1, cnn1, adOpenKeyset, adLockOptimistic, adCmdTextIf rst3.RecordCount > 0 Then Command(0).Enabled = False Command(2).Enabled = False zdyz_Label(1).Caption = rst3("最大阈值") zxyz_Label(1).Caption = rst3("最小阈值") bz_Label(1).Caption = rst3("比值") Frame5.Enabled = False wd_Text.Text = rst3("温度") xdsd_Text.Text = rst3("相对湿度") dqyl_Text.Text = rst3("大气压力") hjrqs_Text.Text = rst3("环境日期始") hjrqz_Text.Text = rst3("环境日期终") tcqfw_Text.Text = rst3("通电后方位") syjl_Text.Text = rst3("试验记录")Else If rst2.RecordCount > 0 Then Command(0).Enabled = False If rst1.RecordCount > 0 Then If sybhsyqyz <> "未响应" And sybhsyhyz <> "未响应" Then '如果两个阈值都不为0 If Val(sybhsyqyz) >= Val(sybhsyhyz) Then zdyz = sybhsyqyz zxyz = sybhsyhyz Else zdyz = sybhsyhyz zxyz = sybhsyqyz End If bz = Format(Val(zdyz) / Val(zxyz), "0.0") End If zdyz_Label(1).Caption = zdyz zxyz_Label(1).Caption = zxyz bz_Label(1).Caption = bz End If End IfEnd Ifrst3.CloseSet rst3 = NothingIf rst1.RecordCount = 0 And rst2.RecordCount = 0 Then '如果试验前后均未完成 tcqfw_Label.Visible = False tcqfw_Text.Visible = FalseEnd IfEnd SubPrivate Sub Command_Click(Index As Integer)If Index = 0 Then If rst1.RecordCount = 0 Then If MsgBox("环前试验还没有完成,是否开始试验?", vbYesNo + vbCritical + vbDefaultButton2) = vbYes Then*** rst1.Close Set rst1 = Nothing rst2.Close Set rst2 = Nothing cnn1.Close Set cnn1 = Nothing Unload Me syks_Form.Show vbModal Else Exit Sub End If Else rst1.Close Set rst1 = Nothing rst2.Close Set rst2 = Nothing cnn1.Close Set cnn1 = Nothing Unload Me syks_Form.Show vbModal End IfElse Index = 1 Then '退出 rst1.Close Set rst1 = Nothing rst2.Close Set rst2 = Nothing cnn1.Close Set cnn1 = Nothing dqsyxm = "" dqsyxmfl = "" dqsybh = "" dqccbh = "" Unload MeEnd If End Sub 大概看了一下你的代码,挺乱的。你那个变成NULL可能是因为rst1的游标已经移到最后EOF了,就先MOVEFIRST。至于不能CLOSE 则是因为你的记录集绑定到DATAGRID1 上,看你的绑定方式。也许啦。 当Adodb.Recordset 与 DataGrid绑定时对于某类型的字段(且体我记不清了)进行修改时,清空DataGrid的框框时,其相关的Field会自动变成NULL值 首先声明,这几天出差了,所以没有上来!nwe_wyl2000(kaimi):你说得不对,我的rst1游标没有到达EOF,而是在BOFhoutianxi:我不太明白您所说的,我其实没有用数据榜定cuiyxy:我实验过了,与DataGrid没有关系,如果去掉Adodb.Recordset与DataGrid地榜定,还是会出现错误! 你应该判断这时RST是否满足以下条件(NOT (RST。BOF OR RST。EOF))这样可能就不会有事了吧。试下吧,你的程序实在长,呵呵。 mmzxg,难道我没有说明白吗?我的RST1没有其他任何问题,只是出现了我所说的错误,我只是不明白为什么会出现这个错误? SQL中如何返回当前行 100分请教如何开机后强制运行自己的程序 使用vb怎样导入csv文件数据进入sql imagelist控件可以loadpicture互联网上的图片么? 再见了 大家 不想做程序了,现在开始做商务代表了。。。 ***晕死了,flexgrid过期了,怎么办,连打包一个“安装程序”都不让完成***怎么???? 谁知道安装ado25都需要那些支持文件 问几个问题,先来先得分(五)。 WEBSERVER中定义的public class 在VB中怎么定义 事务处理的CommitTrans为什么不报错? 非常非常奇怪的问题!!!!!!11 高分求:精確比較兩個文件的方法
执行时,就发生了VALUE变成NULL的事情了,可是我在表中对这个字段是不允许空值的呀!
记录集的游标使用的是ADUSERCLIENT!
另外,代码如下:(程序在运行到***处出错了)
Dim sybhsyqyz As String
Dim sybhsyqrq As String
Dim tcqfw As String
Dim sybhsyhyz As String
Dim zdyz As String
Dim zxyz As String
Dim bz As String
Dim cnn1 As New ADODB.Connection
Dim rst1 As New ADODB.Recordset
Dim rst2 As New ADODB.Recordset
Dim rst3 As New ADODB.Recordset
Dim str1 As String
Dim n As IntegerPrivate Sub Form_Load()sybhsyqyz = ""
sybhsyqrq = ""
tcqfw = ""
sybhsyhyz = ""
dqsyxmfl = ""
zdyz = ""
zxyz = ""
bz = ""
cnn1.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\jysj.mdb"
If sfbz = "否" Then
str1 = "select * from 检验阈值表 where ( " & "任务单编号 = '" & rwdbh & "' And 探测器类型 = '" & tcqlx & "' And 试验项目 = '一致性' And 试样编号 = '" & dqsybh & "' And 阈值 <> '') "
Else
str1 = "select * from 检验阈值表 where ( " & "任务单编号 = '" & rwdbh & "' And 探测器类型 = '" & tcqlx & "' And 试验项目 = '响应阈值' And 试样编号 = '" & dqsybh & "' And 阈值 <> '') "
End If
rst1.CursorLocation = adUseClient
rst1.Open str1, cnn1, adOpenKeyset, adLockOptimistic, adCmdText
Set DataGrid1.DataSource = rst1
If rst1.RecordCount = 1 Then
sybhsyqrq = rst1("检验日期")
sybhsyqyz = rst1("阈值")
End If
DataGrid1.Columns(0).Visible = False '设置字段为看不见
DataGrid1.Columns(1).Visible = False
DataGrid1.Columns(2).Visible = False
DataGrid1.Columns(3).Visible = False
DataGrid1.Columns(4).Visible = False
DataGrid1.Columns(10).Visible = False
DataGrid1.Columns(11).Visible = False
DataGrid1.Columns(12).Visible = False
DataGrid1.Columns(13).Visible = False
DataGrid1.Refresh
str1 = "select * from 检验阈值表 where ( " & "任务单编号 = '" & rwdbh & "' And 探测器类型 = '" & tcqlx & "' And 试验项目 = '" & dqsyxm & "' And 试样编号 = '" & dqsybh & "' And 阈值 <> '') "
rst2.CursorLocation = adUseClient
rst2.Open str1, cnn1, adOpenKeyset, adLockOptimistic, adCmdText
If rst2.RecordCount > 0 Then
sybhsyhyz = rst2("阈值")
End If
Set DataGrid2.DataSource = rst2
DataGrid2.Columns(0).Visible = False '设置字段为看不见
DataGrid2.Columns(1).Visible = False
DataGrid2.Columns(2).Visible = False
DataGrid2.Columns(3).Visible = False
DataGrid2.Columns(4).Visible = False
DataGrid2.Columns(10).Visible = False
DataGrid2.Columns(11).Visible = False
DataGrid2.Columns(12).Visible = False
DataGrid2.Columns(13).Visible = False
DataGrid2.Refresh
str1 = "select * from " & dqsyxm & "记录表 where ( " & "任务单编号 = '" & rwdbh & "' And 探测器类型 = '" & tcqlx & "' And 试样编号 = '" & dqsybh & "' )"
rst3.CursorLocation = adUseClient
rst3.Open str1, cnn1, adOpenKeyset, adLockOptimistic, adCmdText
If rst3.RecordCount > 0 Then
Command(0).Enabled = False
Command(2).Enabled = False
zdyz_Label(1).Caption = rst3("最大阈值")
zxyz_Label(1).Caption = rst3("最小阈值")
bz_Label(1).Caption = rst3("比值")
Frame5.Enabled = False
wd_Text.Text = rst3("温度")
xdsd_Text.Text = rst3("相对湿度")
dqyl_Text.Text = rst3("大气压力")
hjrqs_Text.Text = rst3("环境日期始")
hjrqz_Text.Text = rst3("环境日期终")
tcqfw_Text.Text = rst3("通电后方位")
syjl_Text.Text = rst3("试验记录")
Else
If rst2.RecordCount > 0 Then
Command(0).Enabled = False
If rst1.RecordCount > 0 Then
If sybhsyqyz <> "未响应" And sybhsyhyz <> "未响应" Then '如果两个阈值都不为0
If Val(sybhsyqyz) >= Val(sybhsyhyz) Then
zdyz = sybhsyqyz
zxyz = sybhsyhyz
Else
zdyz = sybhsyhyz
zxyz = sybhsyqyz
End If
bz = Format(Val(zdyz) / Val(zxyz), "0.0")
End If
zdyz_Label(1).Caption = zdyz
zxyz_Label(1).Caption = zxyz
bz_Label(1).Caption = bz
End If
End If
End If
rst3.Close
Set rst3 = NothingIf rst1.RecordCount = 0 And rst2.RecordCount = 0 Then '如果试验前后均未完成
tcqfw_Label.Visible = False
tcqfw_Text.Visible = False
End IfEnd SubPrivate Sub Command_Click(Index As Integer)If Index = 0 Then
If rst1.RecordCount = 0 Then
If MsgBox("环前试验还没有完成,是否开始试验?", vbYesNo + vbCritical + vbDefaultButton2) = vbYes Then
*** rst1.Close
Set rst1 = Nothing
rst2.Close
Set rst2 = Nothing
cnn1.Close
Set cnn1 = Nothing
Unload Me
syks_Form.Show vbModal
Else
Exit Sub
End If
Else
rst1.Close
Set rst1 = Nothing
rst2.Close
Set rst2 = Nothing
cnn1.Close
Set cnn1 = Nothing
Unload Me
syks_Form.Show vbModal
End If
Else Index = 1 Then '退出
rst1.Close
Set rst1 = Nothing
rst2.Close
Set rst2 = Nothing
cnn1.Close
Set cnn1 = Nothing
dqsyxm = ""
dqsyxmfl = ""
dqsybh = ""
dqccbh = ""
Unload Me
End If
End Sub
也许啦。
对于某类型的字段(且体我记不清了)进行修改时,
清空DataGrid的框框时,其相关的Field会自动变成NULL值
nwe_wyl2000(kaimi):你说得不对,我的rst1游标没有到达EOF,而是在BOF
houtianxi:我不太明白您所说的,我其实没有用数据榜定
cuiyxy:我实验过了,与DataGrid没有关系,如果去掉Adodb.Recordset与DataGrid
地榜定,还是会出现错误!
我只是不明白为什么会出现这个错误?