我在学北大青鸟第一学期的VB课程,有个关于数据库的问题不明白:
一个添加数据的窗体,5个textbox(学号,姓名,VC成绩,VB成绩,SQL成绩),2个commandbutton(确定和取消)。如何实现当我输入完信息,点确定的时候,系统先去相应的表中查找,如果输入的学号已经存在,就报错,添加失败;如果不存在就将记录写入数据库。现在的情况是,我定义了一个插入数据的函数,点确定后执行INSERT语句,也设置了报错,可每次测试输入重复数据时,都提示添加数据成功,但数据库中的记录没有变化,如果输入一个不重复的数据就可以添加进去。我郁闷很久了!以下是我写的查询函数的代码,请大侠指点,看我写得对不对Public Function InsertSQL(ByVal InsertString As String) As Boolean
Call StudDataRcs.Open(InsertString, StudData, adOpenDynamic, adLockOptimistic, -1)
StudDataRcs.MoveFirst
Do While (Not StudDataRcs.EOF)
If StudDataRcs.Fields("studcode").Value = adddata.txtcode.Text Then
    MsgBox "学号重复,请确认后再输!", vbCritical + vbOKOnly, "错误"
    InsertSQL = False
    Exit Function
End If
StudDataRcs.MoveNext
Loop
InsertSQL = True
End Function

解决方案 »

  1.   

    这是添加记录窗体的“确定”代码Private Sub ok_Click()
    Dim InsertString As String
    On Error Resume Next
    InsertString = "INSERT INTO stud_info(studcode,studname,studvc,studvb,studsql) VALUES ('" & txtcode.Text & "','" & txtname.Text & "','" & txtvc.Text & "','" & txtvb.Text & "','" & txtsql.Text & "')"
    If InsertSQL(InsertString) = True Then
        StudDataRcs.Update
        If MsgBox("数据添加成功!" & vbCrLf & "是否继续添加?(Y/N)", vbInformation + vbYesNo, "提示") = vbYes Then
            With adddata
                .txtcode.Text = ""
                .txtcode.SetFocus
                .txtname.Text = ""
                .txtvc.Text = ""
                .txtvb.Text = ""
                .txtsql.Text = ""
            End With
        Else
            Unload Me
        End If
    End If
    End Sub
      

  2.   

    那干吗要用call,后面的-1又是干什么用的。
      

  3.   

    Public Function InsertSQL(ByVal InsertString As String) As Boolean
    Call StudDataRcs.Open(InsertString, StudData, adOpenDynamic, adLockOptimistic, -1)
    StudDataRcs.MoveFirst
    Do While (Not StudDataRcs.EOF)
        If trim(StudDataRcs.Fields("studcode").Value) = trim(adddata.txtcode.Text) Then
            MsgBox "学号重复,请确认后再输!", vbCritical + vbOKOnly, "错误"
            InsertSQL = False
            Exit Function
        End If
        StudDataRcs.MoveNext
    Loop
    InsertSQL = True
    End Function
      

  4.   

    如果不用call,系统会提示找不到 = 号,后边的-1是书上写的,我还没弄明白是干什么的,呵呵
      

  5.   

    to: tztz520(午夜逛街) 
    还是不行啊,我输入了重复数据,还是提示添加成功
      

  6.   

    你可以把If StudDataRcs.Fields("studcode").Value = adddata.txtcode.Text Then改成
    If Trim(StudDataRcs.Fields("studcode").Value) = Trim(adddata.txtcode.Text) Then试试
    如是我做的话,我是这样做:
    public Function check() as boolean
    dim rs as new recordset
    check=true
    rs.open "select studecode from stud_info where studecode='" & adddata.txtcode.text & "'",conn,adOpenDynamic, adLockOptimistic
    if not rs.eof then
    check=false
    msgbox "重复数据"
    end if 
    rs.close
    set rs = nothing
    end functionPrivate Sub ok_Click()
    Dim InsertString As String
    yn=check()
    if not yn then exit sub
    On Error Resume Next
    InsertString = "INSERT INTO stud_info(studcode,studname,studvc,studvb,studsql) VALUES ('" & txtcode.Text & "','" & txtname.Text & "','" & txtvc.Text & "','" & txtvb.Text & "','" & txtsql.Text & "')"
    conn.execute(insertstring)
        If MsgBox("数据添加成功!" & vbCrLf & "是否继续添加?(Y/N)", vbInformation + vbYesNo, "提示") = vbYes Then
            With adddata
                .txtcode.Text = ""
                .txtcode.SetFocus
                .txtname.Text = ""
                .txtvc.Text = ""
                .txtvb.Text = ""
                .txtsql.Text = ""
            End With
        Else
            Unload Me
        End If
    End If
    End Sub
    conn是new adodb.connection,rs是new adodb.recordset
      

  7.   

    这一句
    StudDataRcs.Open "select studcode from stud_info where studcode='" & adddata.txtcode.Text & "'", StudData, adOpenDynamic, adLockOptimistic提示:
    实时错误'-2147217913 (80040e07)':
    标准表达式中数据类型不匹配.这是什么意思啊?