将图片的路径存入数据库的图片字段中,然后通过引用Microsoft DAD 3.6 Object Library生成对象来操作数据库。当前的记录是第二条,我用MoveNext语句将数据库的记录指针移后一位,拿到下一张图片的路径,但是明明有记录(我用数据库软件Access打开数据库能看到有5-6条记录),却拿不到下一条记录,而用MovePrevious语句将记录移上一位,但是就出错,但是MoveFirst和MoveLast语句却能正常工作,为什么呢?
调试欢乐多
Dim Dase As Database '声明数据库对象
Dim Rec As Recordset '声明表对象'这是显示打开对话框的代码
Private Sub Command1_Click()
CommonDialog1.Filter = "图片文件(*.bmp *.jpg *.png *.ico *.gif)|*.bmp;*.jpg;*.png;*.ico;*.gif"
CommonDialog1.ShowOpen
If CommonDialog1.FileName <> "" Then
Text1.Text = CommonDialog1.FileName
End If
End SubPrivate Sub Command2_Click()
CommonDialog1.Filter = "数据库文件(*.mdb)|*.mdb"
CommonDialog1.ShowOpen
If CommonDialog1.FileName <> "" Then
Text2.Text = CommonDialog1.FileName
End If
End Sub'这是写入的字段的代码
'先引用Microsoft DAO 3.6 Object Library
Private Sub Command3_Click()
Set Dase = Workspaces(0).OpenDatabase(Text2.Text) '打开数据库
Set Rec = Dase.OpenRecordset(Text3.Text, dbOpenDynaset) '打开表
Rec.AddNew '添加新数据
Rec.Fields(Text4.Text).Value = Text1.Text '写入路径
Rec.Update '保存数据
End SubPrivate Sub Command4_Click()
Set Dase = Workspaces(0).OpenDatabase(Text2.Text) '打开数据库
Set Rec = Dase.OpenRecordset(Text3.Text, dbOpenDynaset) '打开表
Rec.MoveFirst
Image1.Picture = LoadPicture(Rec.Fields(Text4.Text).Value)
End SubPrivate Sub Command5_Click()
Set Dase = Workspaces(0).OpenDatabase(Text2.Text) '打开数据库
Set Rec = Dase.OpenRecordset(Text3.Text, dbOpenDynaset) '打开表
Rec.MovePrevious
Image1.Picture = LoadPicture(Rec.Fields(Text4.Text).Value)
End SubPrivate Sub Command6_Click()
Set Dase = Workspaces(0).OpenDatabase(Text2.Text) '打开数据库
Set Rec = Dase.OpenRecordset(Text3.Text, dbOpenDynaset) '打开表
Rec.MoveNext
Image1.Picture = LoadPicture(Rec.Fields(Text4.Text).Value)
End SubPrivate Sub Command7_Click()
Set Dase = Workspaces(0).OpenDatabase(Text2.Text) '打开数据库
Set Rec = Dase.OpenRecordset(Text3.Text, dbOpenDynaset) '打开表
Rec.MoveLast
Image1.Picture = LoadPicture(Rec.Fields(Text4.Text).Value)
End SubPrivate Sub Form_Unload(Cancel As Integer)
Rec.Close '关闭表对象
Dase.Close '关闭数据库
Set Rec = Nothing '释放表
Set Dase = Nothing '释放数据库
End Sub这是源代码,请各位帮个忙,谢谢。
Command1:打开图片按钮
Command2:打开数据库按钮
Command3:写入路径到数据库按钮
Command4:“最前”按钮
Command5:“上一”按钮
Command6:“下一”按钮
Command7:“最后”按钮
Text1:显示图片路径的文本框
Text2:显示数据库路径的文本框(默认是E:\vb\新文件\例子文件\将图片的路径保存到数据库\我的数据库.mdb)
Text3:输入需要打开的表的名称的文本框(默认是新表)
Text4:输入需要读取的字段的名称的文本框(默认是图片字段)
Image1:图像框
代码没看出什么问题
还有,请教各位,现在你们一般用什么对象来操作数据库,有认为现在自己用的对象不错的请推荐一下,让我也来学习学习,谢谢.
'在窗体的Form_Load事件里面写如下代码:
Dim cn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim SqlStr As String
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db1.mdb;Mode=ReadWrite;Persist Security Info=False;Jet OLEDB:Database Password=111"
SqlStr = "Select * From 用户表 where 用户名称 Like '" & Text1.Text & "%'"
rst.CursorLocation = adUseClient
rst.Open SqlStr, cn, adOpenDynamic, adLockOptimistic, adCmdText '打开记录集
Set DataGrid1.DataSource = rst '给DataGrid修改数据源Private Sub Command1_Click()
Dim cn As New ADODB.Connection'声明一个连接对象
Dim rst As New ADODB.Recordset'声明一个记录集对象
Dim SqlStr As String'声明一个字符串变量
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db1.mdb;Mode=ReadWrite;Persist Security Info=False;Jet OLEDB:Database Password=111"
'上面是连接到数据库
SqlStr = "Select * From 用户表"
rst.CursorLocation = adUseClient'设置游标位置
rst.Open SqlStr, cn, adOpenDynamic, adLockOptimistic, adCmdText '打开记录集
rst.Fields("用户名称").Value = Text1.Text'修改记录集中第一条记录"用户名称"字段的数值
rst.Fields("用户口令").Value = Text2.Text'修改记录集中第一条记录"用户口令"字段的数值
rst.UpdateBatch '提交,就是写到硬盘的数据库文件
rst.Close '关闭记录集
Set rst = Nothing '释放
cn.Close '关闭连接
Set cn = Nothing '释放
End Sub
情况是每一个按钮(上一条,下一条,首条,最后)都单独的连接了数据库,并且都有打开和关闭记录语句。
数据库打开时,记录始终处在第一条。
问题就在
点首条,正常显示,后关闭数据库。再次打开时,记录又再第一条。
点最后,正常,后又关闭数据库。因为记录处在第一条。
点上一条,打开数据库,但是记录处在第一条,报错。
点 下一条,数据库又重新打开,记录还是在第一条,正常实现点击一次,后数据库又关闭。再点击,情况还是一样,只显示两个记录:第一条和第二条。如果是上述情况
解决办法:在form load中,连接数据库
在按钮中,不连接也不打开数据库
在退出时,关闭数据库。