两个问题。第一个问题 两张图片写入数据库
          第二个问题 图片有路径删除原文件问题。  有代码有真相。请大家帮帮我。谢谢了。我是新手。详细点好。。 VB自己看书学的。·· 没看好久····
看到一个实体例子。存一张可以。但是自己这个里面有两张图片。自己折腾了半天还是过来求助了。确实没搞出来。新手新手请大家帮帮····代码如下。
Option Explicit
Dim Cn As ADODb.Connection
Dim Rs As ADODb.Recordset
Dim mst As ADODb.Stream  
Dim mystr As String--------------------------------
前面我想的解决方法是在写一个 dim mst2 as adodb.steam   什么的重新定义个ADODB两个来。但是这样试试那样试一试都不行。所以来求助下。···例子是默认的 一个打开按钮 一个图片保存按钮。我自己做的东西。是两张图片都需要保存到数据库, 这个例子只保存一张我研究了下 也没整出来。 我的数据表名是 CON  我这里用的是IMAGE BOX 控件
一个打开按钮代码是
'On Error GoTo errh
CommonDialog1.Filter = "所有文件图片|*.jpg;*.gif;*.bmp|BMP|*.bmp|JPG|*.jpg|GIF|*.gif|"
 'CommonDialog1.FilterIndex = 2 “这句什么意思?  ”CommonDialog1.ShowOpen
Image1.Picture = LoadPicture(CommonDialog1.FileName)
mystr = CommonDialog1.FileName在保存按钮那里的代码是:
If mystr <> "" Then
     Set Cn = New ADODB.Connection
     Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\data\qx.mdb;Persist Security Info=False"
     Cn.Open
     Set rs = New ADODB.Recordset
     rs.Open "select * from con", Cn, adOpenStatic, adLockOptimistic
     Set mst = New ADODB.Stream
     mst.Type = adTypeBinary
     mst.Open
     mst.LoadFromFile mystr
     rs.AddNew
     rs.Fields("tu1").Value = mst.Read
     rs.Update
     rs.Close
     Cn.Close
-----------------------FORM LOAD-------
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\data\qx.mdb;Persist Security Info=False"
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = "select * from con"
Adodc1.Refresh----------以上方法解决了一张图片保存到数据库。同时用MOVE.first 什么的浏览也可以加载显示。
但是两张如何写啊。? 谁能告诉一下。详细点的 我折腾了没出来。---------之前很多朋友说写数据库不好。数据库太大。而且慢。  我前面也弄出个方法。 自己研究的比较笨。就是保存图片文件名。但是同时只要图片文件名加载到 IMAGE里面就 自动根据当前时间和日期给图片命名。这样图片永远不会重复名字。加载时候只要加载数据库里字段名字就可以了。但是遇到个问题。删除就是大问题。  删除数据库记录但是里面图片根本没有删除。
因为图片是在别的文件夹下的------------ 具体代码如下。谁顺便告诉我这样怎么删除这样的文件
以下TEXT18.TEXT就是文件时间加文件名,这样就不会覆盖了保存了。
Private Sub Command3_Click()   '打开图片1进行
On Error Resume Next
     CommonDialog1.Filter = "所有图片文件 |*.jpg;*.bmp;*.gif|BMP格式|*.BMP|JPG格式|*.JPG|GIF格式|*.GIF"
    CommonDialog1.ShowOpen
    CommonDialog1.CancelError = True
     Path = CommonDialog1.FileName
   Image1.Picture = LoadPicture(Path)    Text24.Text = Format$(Date, "yyyy-mm")
   boa = Format(Now, "yyyy-mmdd-hhmm-ss" & "-")
     Text18.Text = boa & Dir(CommonDialog1.FileName)
End Sub移动的时候
Private Sub Command7_Click()     '上一条   里面“tu2"也是一个文本框获得名字加日期和时间
Adodc1.Recordset.MovePrevious
dirname4 = App.Path & "\image\"
Image1.Picture = LoadPicture(dirname4 & Text24.Text & "\" & Adodc1.Recordset.Fields("tu2"), 1)
If Adodc1.Recordset.BOF Then
Adodc1.Recordset.MoveFirst这样就完成了移动。但是到删除的时候就傻眼了。。 
Adodc1.Recordset.Delete
用这个删除的时候如何在定义回去图片就不行了。试了各种办法
'Kill dirname & "\" & "CommonDialog1.FileName"   等等 都不行。我估计是自己没弄对。所以希望大家帮忙看看这两个问题。····

解决方案 »

  1.   

    CommonDialog1.Filter = "所有文件图片|*.jpg;*.gif;*.bmp|BMP|*.bmp|JPG|*.jpg|GIF|*.gif|"
    一句中指定了4个过滤器分别是 
    所有文件图片|*.jpg;*.gif;*.bmp
    BMP|*.bmp
    JPG|*.jpg
    GIF|*.gif
    在CommonDialog1.FilterIndex = 2 这句指定后面的打开对话框在用户没选择过滤类型的一开始,使用第二个,也就是BMP|*.bmp
      

  2.   

    第二个问题:你应该学会使用ADODB对象,而不是ADODC控件
    下面是一个ADODB连接数据库并显示出来的示例,可以参考一下
    Ctrl+t找Microsoft DataGrid Control.... 
    菜单"工程"->"引用" 找 Microsoft ActiveX Data Object.... 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 '打开记录集
    Set DataGrid1.DataSource = rst '给DataGrid设置数据源
      

  3.   

    删除的时候用SQL语句的Delete和你上面说的KILL语句,前者删除记录,后者删除硬盘上的图片文件
      

  4.   


    谢谢泰山的解答。问题是第一个存入两张图片到数据库问题没解决。···ADODB我看了。也大概会绑定。问题是 我之前做那个的时候只会用ADODC控件。   希望更多高手来解答下问题。···
      

  5.   

    两张图片为什么不在数据库里建两个IMAGE字段呢?
    如果图片数量不固定,那就两张图片分别写两条记录.读取的时候把满足条件的两张图片都读出来,显示到程序里.
    还有一种办法,就是把两张图片压缩成一个文件,然后写入数据库.读取的时候再解出来.
      

  6.   

    再来一次
     rs.AddNew
      rs.Fields("tu1").Value = mst.Read
      rs.Update
      rs.Close
      

  7.   


    这个代码不是这样的么
    If mystr <> "" Then
      Set Cn = New ADODB.Connection
      Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\data\qx.mdb;Persist Security Info=False"
      Cn.Open
      Set rs = New ADODB.Recordset
      rs.Open "select * from con", Cn, adOpenStatic, adLockOptimistic
      Set mst = New ADODB.Stream
      mst.Type = adTypeBinary
      mst.Open
      mst.LoadFromFile mystr
      rs.AddNew
      rs.Fields("tu1").Value = mst.Read
      rs.Update
      rs.Close
      Cn.Close
    -------------我改成
    dim as mysty1 String
    If mystr <> "" Then
      Set Cn = New ADODB.Connection
      Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\data\qx.mdb;Persist Security Info=False"
      Cn.Open
      Set rs = New ADODB.Recordset
      rs.Open "select * from con", Cn, adOpenStatic, adLockOptimistic
      Set mst = New ADODB.Stream
      mst.Type = adTypeBinary
      mst.Open
      mst.LoadFromFile mystr
      rs.AddNew
      rs.Fields("tu2").Value = mst.Read  rs.Update
      rs.Close
      Cn.Close但是并保存不上。只能保存一个。····
      

  8.   


    有两个字段 一个是 tu1 一个是tu2 现在tu1 参考实际例子可以保存进去。但是tu2 无法二进制存进去。两个压缩一个文件。那读取的时候也是麻烦啊 现在image控件绑定的名字 是 tu1 以及image2控件绑定名字是tu2  有两个字段······
      

  9.   

    http://download.csdn.net/source/1483930
      

  10.   

    本帖最后由 bcrun 于 2010-12-31 22:42:29 编辑
      

  11.   

    需要重新定义一个dim mst as adodb.recordest ?
    你语句里有两个MST1 MST2 还有你用 text.text控件获取的是什么 是路劲么?还是拿着个获取文件名?
    mst1.LoadFromFile Text3.Text我的代码前面保存到数据库里 只有图片直接二进制。这个你再写两个这个是撒意思?
    rs.Fields("id").Value = Text1.Text
      rs.Fields("xm").Value = Text2.Text-------------------
    楼上的朋友请指教。别的高手欢迎来说说。这个问题好久了,就是没人解答。难道很难么。不像啊。···
      

  12.   

    是两个,text3,text4存放的是路径.他们的边上放一个按钮,用来打开文件.界面图片在我空间.
      

  13.   

    谢谢曹··兄··  你的这个写法是, ADODB直接写记录集。 但是我现在用的是ADODC控件 绑定的。也不是绑定 就是FORM LOAD里面加载 了个ADODC控件 字符串 
     我这样写Dim Cn As adodb.Connection
    Dim rs As adodb.Recordset
    Dim mst As adodb.Stream
    Dim mst1 As adodb.Stream
    Dim mystr As String
    Dim mystr1 As StringIf mystr <> "" And mystr1 <> "" Then    Set Cn = New adodb.Connection
         Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\data\qx.mdb;Persist Security Info=False"
        Cn.Open
        Set rs = New adodb.Recordset
         rs.Open "select * from con", Cn, adOpenStatic, adLockOptimistic
         Set mst = New adodb.Stream
         mst.Type = adTypeBinary
         mst.Open
         mst.LoadFromFile mystr
        Set mst1 = New adodb.Stream
         mst1.Type = adTypeBinary
         mst1.Open
         mst1.LoadFromFile mystr1
         rs.AddNew
         rs.Fields("tu1").Value = mst.Read
         rs.Fields("tu2").Value = mst1.Read
         rs.Update
         rs.Close
         Cn.Close就是参考你的那个写的。但是现在有个问题。 。。我这个是在一个界面下编辑的 这个界面下有。添加删除保存等按钮。Adodc1.Recordset.AddNew 这时添加按钮但是在图片在保存里又写入上面的代码 保存图片到数据库的
     rs.AddNew
         rs.Fields("tu1").Value = mst.Read
         rs.Fields("tu2").Value = mst1.Read
         rs.Update
         rs.Close
         Cn.Close
    这样就相当于 添加了两条数据。···   一条刷新Adodc1.Recordset.AddNew文字数据  一条是这个图片保存的、