你那个COMMANDBUTTON的CLICK事件做些什么事啊?

解决方案 »

  1.   

    什么也没有作!就是刚刚执行到COMMADN的CLICK事件的第一条语句,但是还没有
    执行时,就发生了VALUE变成NULL的事情了,可是我在表中对这个字段是不允许空值的呀!
      

  2.   

    是多用户用的数据库吗?可能是别的程序更改了数据库内容也许你的记录集的游标,Locktype等要设一下,
      

  3.   

    首先生命,不不是多用户用的数据库,而是单机使用!
    记录集的游标使用的是ADUSERCLIENT!
      

  4.   

    ADUSERCLIENT?? you mean adUseClient?
      

  5.   

    是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.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
      

  6.   

    大概看了一下你的代码,挺乱的。你那个变成NULL可能是因为rst1的游标已经移到最后EOF了,就先MOVEFIRST。至于不能CLOSE 则是因为你的记录集绑定到DATAGRID1 上,看你的绑定方式。
    也许啦。
      

  7.   

    当Adodb.Recordset 与 DataGrid绑定时
    对于某类型的字段(且体我记不清了)进行修改时,
    清空DataGrid的框框时,其相关的Field会自动变成NULL值
      

  8.   

    首先声明,这几天出差了,所以没有上来!
    nwe_wyl2000(kaimi):你说得不对,我的rst1游标没有到达EOF,而是在BOF
    houtianxi:我不太明白您所说的,我其实没有用数据榜定
    cuiyxy:我实验过了,与DataGrid没有关系,如果去掉Adodb.Recordset与DataGrid
    地榜定,还是会出现错误!
      

  9.   

    你应该判断这时RST是否满足以下条件(NOT (RST。BOF OR RST。EOF))这样可能就不会有事了吧。试下吧,你的程序实在长,呵呵。
      

  10.   

    mmzxg,难道我没有说明白吗?我的RST1没有其他任何问题,只是出现了我所说的错误,
    我只是不明白为什么会出现这个错误?