我现在要做一个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//标准表达式中,数据类型不匹配!
请问,怎么解决啊!谢谢!
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//标准表达式中,数据类型不匹配!
请问,怎么解决啊!谢谢!
*****************************************************************************
欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码)
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
sql = "select * from patiantadd where 病历编号= '" & Label3.Caption &"'"
DEBUG.PRING SQL
看看你的SQL能不能正确执行
用sql = "select * from patiantadd where 病历编号= '" & CLNG(Label3.Caption) &"'"
看看行不行
代码够全的
RS.OPEN出错 而且还是数据类型不匹配 那只能是SQL写错了...
也可能使自己见识短
直接RE.OPEN "select * from patiantadd"然后 RS.ADDNEW就可以了 你的rs2.Fields(0)是不是可以重复啊?
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的,这是怎么回事啊?
access会提示数据类型比匹配 你换成Select * from patiantadd where 病历编号=33就能够正确的执行了将你的sql改成select * from patiantadd where 病历编号= " & Label3.Caption &"
就能正确执行了
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,我郁闷死了啊!
你相同编号的记录弄不进去和你的
If rs2.EOF Then
。
ELSE 'ELSE后面有对数据库操作吗?没看到!
MsgBox "信息不正确!", vbOKOnly + vbExclamation, ""
Text1.SetFocus
Text1.Text = ""
rs2.Close
Exit SubENDIF
========================================================
ELSE后面没有对数据库的操作。INSERT我用过,但有问题。你能写出来吗?谢谢!
sql="select * from patiantadd where 病历编号= " & Label3.Caption