我现在要做一个FRM2,目的是要更改另外一个FRM1数据查询里的用户数据,要求是将FRM1中的用户基本数据在FRM2的头部显示,我现在已经完成这个部分,但要按照用户数据的编号都存到另外数据库的数据表中去(这里我们就叫2.MDB),我的代码出现了问题.下面是源代码:
Option Explicit
Dim rs2 As New ADODB.Recordset
Dim iStm As ADODB.Stream
Private Sub Command1_Click()
CDlg.FileName = ""
CDlg.ShowOpen
If CDlg.FileName <> "" Then
Image1.Picture = LoadPicture(CDlg.FileName)
    End If
    With CDlg
        .Filter = "JPG Files|*.JPG|Bitmaps|*.BMP"
    End With
End SubPrivate Sub Command2_Click()
Dim sql As String
Set iStm = New ADODB.Stream
If Text1.Text = "" Then
MsgBox "医生不能为空!", vbOKOnly + vbExclamation, ""
Text1.SetFocus
Exit Sub
End If
If Text2.Text = "" Then
MsgBox "盒数不能为空!", vbOKOnly + vbExclamation, ""
Text2.SetFocus
Exit Sub
End If
If Text3.Text = "" Then
MsgBox "使用情况不能为空!", vbOKOnly + vbExclamation, ""
Text3.SetFocus
Exit Sub
End If
If Text4.Text = "" Then
MsgBox "备注不能为空!", vbOKOnly + vbExclamation, ""
Text4.SetFocus
Exit Sub
End IfWith iStm
.Type = adTypeBinary '二进制模式
.Open
.LoadFromFile (CDlg.FileName)  '图片路径
End Withsql = "select * from patiantadd where 病历编号= '" & Label3.Caption &"'"
rs2.Open sql, conn, adOpenKeyset, adLockPessimistic
If rs2.EOF Then
rs2.AddNew
rs2.Fields(0) = Label13.Caption
rs2.Fields(1) = Text1.Text
rs2.Fields(2) = Combo1.Text
rs2.Fields(3) = Combo2.Text
rs2.Fields(4) = Combo3.Text
rs2.Fields(5) = Text2.Text
rs2.Fields(6) = Combo4.Text
rs2.Fields(7) = Text3.Text
rs2.Fields(8) = Text4.Text
rs2.Fields(9) = DTPicker1.Value
rs2.Fields(10) = iStm.Read
rs2.Update
MsgBox "信息添加成功!", vbOKOnly, ""
rs2.Close
Else
   MsgBox "信息不正确!", vbOKOnly + vbExclamation, ""
   Text1.SetFocus
   Text1.Text = ""
   rs2.Close
Exit Sub
End If
Unload Me
End SubPrivate Sub Form_Load()
Dim rs As New ADODB.Recordset
Dim sql As String
sql = "select * from lei"
rs.Open sql, conn, adOpenKeyset, adLockPessimistic
rs.MoveFirst
Do While Not rs.EOF
If rs.Fields(0) & "" <> "" Then Combo1.AddItem rs.Fields(0)
 If rs.Fields(1) & "" <> "" Then Combo2.AddItem "" & rs.Fields(1)
 If rs.Fields(2) & "" <> "" Then Combo3.AddItem "" & rs.Fields(2)
  If rs.Fields(3) & "" <> "" Then Combo4.AddItem "" & rs.Fields(3)
  rs.MoveNext
Loop
End Sub
当然,中间有填写新数据的部分,我也实现了,但是出现了不能添加相同编号的情况.这个功能是一定要实现对于相同病历编号在另外数据库表添加的,目的是为了以后比较新旧病历的情况.第一次添加是成功的,但第二次就错误了.
错误为:rs2.Open sql, conn, adOpenKeyset, adLockPessimistic//标准表达式中,数据类型不匹配!
请问,怎么解决啊!谢谢!

解决方案 »

  1.   

    看看sql
      
    *****************************************************************************
    欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码) 
    http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
      

  2.   

    害是这个问题...
    sql = "select * from patiantadd where 病历编号= '" & Label3.Caption &"'"
    DEBUG.PRING SQL
    看看你的SQL能不能正确执行
    用sql = "select * from patiantadd where 病历编号= '" & CLNG(Label3.Caption) &"'"
    看看行不行
    代码够全的
      

  3.   

    我的SQL"select * from patiantadd where 病历编号= '" & Label3.Caption &"'"的作用是不是在这里用错了啊?感觉用这个是查询数据库中是否有相同的病历号啊!有简单的只是插入数据的语句吗?谢谢!
      

  4.   

    你吧DEBUG出来的SQL贴出来看看
    RS.OPEN出错 而且还是数据类型不匹配 那只能是SQL写错了...
    也可能使自己见识短
      

  5.   

    我的SQL"select * from patiantadd where 病历编号= '" & Label3.Caption &"'"的作用是不是在这里用错了啊?感觉用这个是查询数据库中是否有相同的病历号啊!有简单的只是插入数据的语句吗?谢谢!
    直接RE.OPEN "select * from patiantadd"然后 RS.ADDNEW就可以了 你的rs2.Fields(0)是不是可以重复啊?
      

  6.   

    哪就直接RS.OPEN "select * from patiantadd"
      

  7.   

    rs.Open "sql = Select * from patiantadd", conn, adOpenKeyset, adLockPessimistic后出现“无效的SQL语句。期待DELECT,INSERT......”,不行的.
      

  8.   

    我在DEBUG.PRING SQL这里做了单步调试,然后在运行后,立即窗口出现:
    Select * from patiantadd where  病历编号='33'sql = Select * from patiantadd where  病历编号='33'
    Select 诊断医生,脱发类型,诊断级数,使用情况,使用盒数,疗效评分,其他用药情况,备注,录入时间,上传图片 from patiantadd where  病历编号='33'
    Select * from patiantadd where  病历编号='33'Select * from patiantadd where  病历编号='33'
    添加的病历编号为33的,这是怎么回事啊?
      

  9.   

    嗯, 你可以去access上执行下这条语句 用Select * from patiantadd where  病历编号='33'
    access会提示数据类型比匹配 你换成Select * from patiantadd where  病历编号=33就能够正确的执行了将你的sql改成select * from patiantadd where 病历编号= " & Label3.Caption &"
    就能正确执行了
      

  10.   

    Select * from patiantadd where  病历编号=33
    Select * from patiantadd where  病历编号='33'sql = Select * from patiantadd where  病历编号='33'
    Select 诊断医生,脱发类型,诊断级数,使用情况,使用盒数,疗效评分,其他用药情况,备注,录入时间,上传图片 from patiantadd where  病历编号='33'
    Select * from patiantadd where  病历编号='33'Select * from patiantadd where  病历编号='33'Select * from patiantadd where  病历编号='33'
    改了后,问题还是这样的!555555,我郁闷死了啊!
      

  11.   

    楼主的意图我好象还没有理解,你就是想插入新记录?那就INSERT啊,和SELECT有什么关系?字段属性先搞清楚,长度限制自己也要注意。
    你相同编号的记录弄不进去和你的
    If rs2.EOF Then

    ELSE    'ELSE后面有对数据库操作吗?没看到!
    MsgBox "信息不正确!", vbOKOnly + vbExclamation, ""
       Text1.SetFocus
       Text1.Text = ""
       rs2.Close
    Exit SubENDIF
      

  12.   

    ELSE    'ELSE后面有对数据库操作吗?没看到!
    ========================================================
    ELSE后面没有对数据库的操作。INSERT我用过,但有问题。你能写出来吗?谢谢!
      

  13.   

    将你的sql改成
    sql="select * from patiantadd where 病历编号= " & Label3.Caption