我把图片路径存储到SQL中,怎样用VB6.0根据图片路径显示图片啊?

我数据库tupian(path(nvchar(30)),ziti(nvchar(10)),bihua(int)).path存储的是图片的路径,在代码中判断:假如我设定的一... 我数据库tupian(path(nvchar(30)),ziti(nvchar(10)),bihua(int)).path存储的是图片的路径,在代码中判断:假如我设定的一个字符串str=数据库中字段“ziti”&&设定的strokestep=字段“bihua”时,把path付给lujing,否则lujing为空。然后根据lujing加载图片。但是一直出错,大家看看下面代码哪里错了?
根据大家的回答,我把代码改了一下,可还是不对,我是想遍历数据库中的所有记录,直到有满足条件的为止,那位高手帮我写一下代码啊?急用啊。还有我想在连接数据库前,先判断一下,如果数据库已经打开,就不再执行连接字符串,应该怎样写啊
展开
 我来答
syht2000
高粉答主

2012-08-03 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
你的sql不对,而且判断也有问题(表示条件应该是and而不是连接符&),按条件查询就要写成
sSQL = "SELECT * FROM font where ziti=""" & str & """ and bihua=""" & strokeStep & """"
后面那个If (str = rs.Fields("ziti") & strokeStep = rs.Fields("bihua")) Then可以去掉了,改成
if not rs.eof then

大概就是这样,没怎么用过VB ,实际上select *也是没必要的,应该是select top 1 *,或者如果你仅仅只是需要path,也可以写成select top 1 path from ...

至于根本的错误原因是你之前的sql返回的一个多项的记录集rs(比如数据库中一共10条记录),而你直接判断If (str = rs.Fields("ziti"),相当于只是把str跟这个记录集的第一条判断(大概是的,记不太清),也就是说,除非你那个sql找出的结果中刚好第一条满足这两个条件,那样才能显示,否则就算这十条中有一条满足,你的if结果也是假的。至于怎么改动上面已经说过了。
创作者zUzVB1Sl31
2012-08-03 · 编程类资料、英语学习资料
创作者zUzVB1Sl31
采纳数:1331 获赞数:5975

向TA提问 私信TA
展开全部
Dim i As Integer
Dim str As String
Dim conn As ADODB.Connection
Dim iStm As ADODB.Stream
Dim iRe As ADODB.Recordset
Dim n As Integer

Private Sub Form_Load()

'‘----------------------------
Picture1.Picture = LoadPicture(App.Path + "\界面素材\加载图片.jpg")
str = "Provider=SQLOLEDB;data Source= 192.168.12.67 ; Initial Catalog=服装销售系统;User Id= sa ;Password= 5332852 "
Set conn = New ADODB.Connection
conn.Open str
n = Val(Trim(Text1.Text))
End Sub

Sub SaveFile() '定义读入图片程序

On Error Resume Next '重复保存同一幅图片会出错提示,忽略,保持程序运行的流畅性。

Set iStm = New ADODB.Stream '读取文件到内容

Dim sFile As String
'数据库支持PNG图片,但VB的image、picture控件不支持PNG格式的图片。
CommonDialog1.Filter = "JPG|*.jpg|位图|*.bmp|GIF|*.gif"
CommonDialog1.ShowOpen

If CommonDialog1.FileName = "" Then
Exit Sub
End If

sFile = CommonDialog1.FileName

Picture1.Picture = LoadPicture(sFile) '把图片显示到图片框(Pictrure1)

With iStm
.Type = adTypeBinary '数据类型为二进制数
.Open
.LoadFromFile "" & sFile & "" '保存图片
End With

End Sub

Sub ReadFile() '定义读出图片程序

If Trim(Text1.Text) = "" Then
MsgBox "图片编号为空", vbInformation, "提示"
Exit Sub
End If

Set iRe = New ADODB.Recordset

iRe.Open "select * from img where 编号=" & n, conn, adOpenKeyset, adLockReadOnly '注意此处数值型参数n的语法形式

On Error GoTo Err

Set iStm = New ADODB.Stream

With iStm
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write iRe("photo") '读取图片字段数据
.SaveToFile App.Path & "\temp1.jpg" '保存图片。注意,图片也可以保存为其他格式。
End With

Picture1.Picture = LoadPicture(App.Path & "\temp1.jpg") '读取图片到图片框(Pictrure1)

iRe.Close '关闭对象
iStm.Close

Kill App.Path & "\temp1.jpg" '删除临时文件
Exit Sub
Err:
MsgBox "此图片编号不存在", vbInformation, "提示"
End Sub

Private Sub Command1_Click() '读入图片
Call ReadFile
End Sub
Private Sub Command2_Click() '读出图片
Call SaveFile
End Sub
Private Sub Command3_Click() '图片另存

If Trim(Text1.Text) = "" Then
MsgBox "图片编号为空", vbInformation, "提示"
Exit Sub
End If

If Picture1.Picture = 0 Then
MsgBox "图片为空,请读出图片", vbInformation, "提示"
Exit Sub
End If

Set iRe = New ADODB.Recordset
iRe.Open "select * from img where 编号=" & n, conn, adOpenKeyset, adLockReadOnly
Set iStm = New ADODB.Stream

If iRe("photo").ActualSize = 0 Then '注意判断语句
MsgBox "相片为空,请重新选择!", vbInformation, "提示"
Exit Sub '退出
End If

CommonDialog1.Filter = "JPG|*.jpg|GIF|*.gif|位图|*.bmp"
CommonDialog1.ShowSave

If CommonDialog1.FileName = "" Then
Exit Sub
End If

sFile = CommonDialog1.FileName

On Error GoTo Err '利用出错提示进行删除保存操作(类似于覆盖)

With iStm
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write iRe("photo") '读取图片字段数据
.SaveToFile sFile '保存到路径
Exit Sub
End With
Err:
Dim Result As Integer
Result = MsgBox("文件名重复,请重新输入新的文件名。否则,将覆盖源文件!", vbYesNo + vbInformation, "提示")
If Result = vbYes Then
Kill sFile '先删除,后保存。
iStm.Write iRe("photo")
iStm.SaveToFile sFile
End If
End Sub

Private Sub Command5_Click()
Set iRe = New ADODB.Recordset '打开保存文件的表
Dim P As String
P = MsgBox("添加成功!是否保存?", vbQuestion + vbOKCancel, "系统消息")
If P = vbOK Then
With iRe
.Open "Select * from A人员信息 WHERE 工号='" + Text2 + "'", conn, adOpenKeyset, adLockOptimistic

.Fields("图片") = iStm.Read 'iStm把载入的图片传递给iRe.Fields("photo"):img表的photo字段
.Update
End With
Else
Picture1.Picture = LoadPicture(App.Path + "\界面素材\加载图片.jpg")
End If
End Sub

Private Sub Form_Unload(Cancel As Integer) '退出
conn.Close
Set conn = Nothing
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
syx54
2012-08-03 · TA获得超过7378个赞
知道大有可为答主
回答量:6567
采纳率:83%
帮助的人:2734万
展开全部
你这个数据库根本没连接好!
还有说说思路:
连接数据库成功,读取数据就可以获得图片文件的路径(包括文件名),那么你只要判断该存放路径的字段是否为空,就可以了。
更多追问追答
追问
我数据库连接成功了。我的思路是根据我写入的两个值假如是str(string)和strokestep(int),数据库tupian中的表font中有三个字段(path,ziti,bihua),如果str=ziti AND  strokestep=bihua时,就把path的值取出来,根据path加载图片。
追答
哦,那你的代码没有问题.
那么,你说不行是指什么?(错误提示)还是没有结果?
你用Debug.Print lujing
看看路径的具体内容,是否包含了:
盘符、路径、文件名?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ZHMINGEN
2012-08-03 · TA获得超过1735个赞
知道大有可为答主
回答量:3149
采纳率:68%
帮助的人:1246万
展开全部
你仅仅查询的是第一条记录,所以在第一条记录没有你的条件时,是不会显示图片的。
修改为:
sSQL = "SELECT * FROM font Where ziti='" & str & "' and bihua='" & strokeStep & "'"
Set rs = New ADODB.Recordset
rs.Open sSQL, cn,2,2
lujing = rs.Fields("path")
picBackgd.Picture = LoadPicture(lujing)

sSQL = "SELECT * FROM font Where ziti='" & str & "' and bihua='" & strokeStep & "'"
为带条件的SQL语句,后面就不需要判断了,而且会显示符合条件的记录。
更多追问追答
追问
rs.Open sSQL, cn,2,2

cn是什么啊?我不太懂。我需要遍历整个表
还是不对啊数据库中各记录的类型为tupian(path(nvchar(30)),ziti(nvchar(10)),bihua(int))
追答
cn是数据库连接对象,必须首先连接数据库,数据库连接后才能连接数据表,RS是数据表连接后的记录集对象。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
limzerg
2012-08-03 · TA获得超过811个赞
知道小有建树答主
回答量:284
采纳率:100%
帮助的人:138万
展开全部
If (str = rs.Fields("ziti") & strokeStep = rs.Fields("bihua")) Then
lujing = rs.Fields("path")
Else: lujing = ""
缺少end if吧?

还有&应该改为And否则成了拼接字符串了, else lujing = ""这行也多余,因为只要dim lujing as string了,初始化lujing就是空串"".
追问
你说的我都已经改过来了,还是不对
追答
你的str和strokeStep初始化了没有?
还有你如果先挑出符合条件的记录,是不是也应该用do until..... loop吧?
还有每次判断完了之后rs.movenext了没有?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式