将图片的路径存入数据库的图片字段中,然后通过引用Microsoft DAD 3.6 Object Library生成对象来操作数据库。当前的记录是第二条,我用MoveNext语句将数据库的记录指针移后一位,拿到下一张图片的路径,但是明明有记录(我用数据库软件Access打开数据库能看到有5-6条记录),却拿不到下一条记录,而用MovePrevious语句将记录移上一位,但是就出错,但是MoveFirst和MoveLast语句却能正常工作,为什么呢?

解决方案 »

  1.   


    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这是源代码,请各位帮个忙,谢谢。
      

  2.   

    还有,补充一下,窗体的控件明细:
    Command1:打开图片按钮
    Command2:打开数据库按钮
    Command3:写入路径到数据库按钮
    Command4:“最前”按钮
    Command5:“上一”按钮
    Command6:“下一”按钮
    Command7:“最后”按钮
    Text1:显示图片路径的文本框
    Text2:显示数据库路径的文本框(默认是E:\vb\新文件\例子文件\将图片的路径保存到数据库\我的数据库.mdb)
    Text3:输入需要打开的表的名称的文本框(默认是新表)
    Text4:输入需要读取的字段的名称的文本框(默认是图片字段)
    Image1:图像框
      

  3.   

    DAO都不用了
    代码没看出什么问题
      

  4.   

    源码的下载地址:http://download.csdn.net/source/3160040
    还有,请教各位,现在你们一般用什么对象来操作数据库,有认为现在自己用的对象不错的请推荐一下,让我也来学习学习,谢谢.
      

  5.   

    在菜单:工程->引用 里面找 Microsoft ActiveX Data Object 2.8 Library
    '在窗体的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
      

  6.   

    5楼,你的那个: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"是什么?是SQL命令?
      

  7.   

    5楼,你的那个: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"是什么?是SQL命令?
      

  8.   

    我曾经出现过!
    情况是每一个按钮(上一条,下一条,首条,最后)都单独的连接了数据库,并且都有打开和关闭记录语句。
    数据库打开时,记录始终处在第一条。
    问题就在 
        点首条,正常显示,后关闭数据库。再次打开时,记录又再第一条。
         点最后,正常,后又关闭数据库。因为记录处在第一条。
         点上一条,打开数据库,但是记录处在第一条,报错。
         点 下一条,数据库又重新打开,记录还是在第一条,正常实现点击一次,后数据库又关闭。再点击,情况还是一样,只显示两个记录:第一条和第二条。如果是上述情况
     解决办法:在form load中,连接数据库
               在按钮中,不连接也不打开数据库
               在退出时,关闭数据库。