<1>.据说字段类型为OLE时能存储图片,当图片为JPG格式时用流操作,请各位告知如何做?
<2>.若存储的是路径和名称时又该怎么做?据说这样效率高。
比如说有一个表为Table,其一个字段Img为OLE类型,现在我想在某个记录(或者说任一记录,就象在Access下操作一样!)为A(主键)的Img中插入F:\JPG.jpg图片,该怎么操作?怎么显示?请给出代码!谢谢!

解决方案 »

  1.   

    var:pic:TMemoryStream;
    begin
    pic:=TMemoryStream.Create;
    image1.Picture.SaveToStream(pic);
    pic.Position:=0;
    TBlobField(FieldByName('Img')).LoadFromStream(pic);
    pic.Free;
    end;
      

  2.   

    <1>.字段类型为OLE时能存储图片,当图片为JPG格式时用流操作,请各位告知如何做?
    a.读取var
      tmpF:TBlobField; 
      filename:String;
    ..
      
      tmpF:=Table1.FieldByName('Image') as TBlobField;
      filename:=Table1.FieldByName('FileName').AsString;
      
      tmpF.SaveToFile(filename);b.写入var
      tmpF:TBlobField; 
    ..
      
      tmpF:=Table1.FieldByName('Image') as TBlobField;
      Table1.FieldByName('FileName').Value:=filename;
      tmpF.LoadFromFile(filename);<2>.若存储的是路径和名称时
    将图片复制到exe下一级目录 ImageFodera.读取var
       filename:String;
       filepath:String;
    ..
      
      filename:=Table1.FieldByName('FileName').AsString;
      filepath:=ExtractFilePath(Application.ExeName);
      
      filename:=filepath+filename;
      //打开文件 b.写入var
      filepath:String;
    ..
      
      Table1.FieldByName('FileName').Value:=ExtractFileName(filename);
      CopyFile(filename,filepath+ExtractFileName(filename)); 
      

  3.   

    to qwertyasd:
        您这段类似的代码我见过,可我就是不懂。
    to gong_hui2000:
        还是不懂啊,详细点行否?
    CopyFile(filename,filepath+ExtractFileName(filename)); 中filename怎么定义?还有,编译时说不是table插入方式,用query也是如此。
    各位,用下面的写点代码吧:
        比如说有一个表为Table,其一个字段Img为OLE类型,现在我想在某个记录(或者说任一记录,就象在Access下操作一样!)为A(主键)的Img中插入F:\JPG.jpg图片,该怎么操作?怎么显示?
      

  4.   

    楼主留下email,给个完整的例子给你。ado读写access数据库,支持jpg和bmp。
      

  5.   

    //Copyfile 是 API方法,原型定义 
    //CopyFile(SorceFile:PAnsiChar, TargetFile:PAnsiChar, bFailExists:Boolean);
    CopyFile(filepath+ExtractFileName(filename),filename,false);这种方式只是存储文件名,而将文件内容复制到指定的目录下。所以Img必须为文本类型#A(主键)的Img中插入F:\JPG.jpg图片,该怎么操作?怎么显示Table.FieldByName('Img').Value:='Jpg.jpg';CopyFile('f:\jpg.jpg',ExtractFilePath(Application.ExeName)+'jpg.jpg',false);
      

  6.   

    var
      m_jpeg        : TJpegImage;
      m_blob        : TStream;
    begin
            {读取JPG图像}
            m_blob := adoDataSet.CreateBlobStream(adoDataSet.FieldByName   ('Picture'),bmRead);
            m_jpeg:=TJpegImage.Create;
            try
              if m_blob.Size<>0 then begin
                try
                  m_jpeg.LoadFromStream(m_blob);
                  imInput.Picture.Assign(m_jpeg);
                  imInput.Refresh;
                except
                end;{try}
              end
              else
                imInput.Picture.Assign(nil);
            finally
              m_jpeg.Free;
              m_blob.Free;
            end;{try}
    end;begin
      {如果图像不为空,把图像以JPG格式导入到字段中}
      if Assigned(imInput.Picture.Graphic) then begin
        jpg := TJpegImage.Create;
        ms := TMemoryStream.Create;
        try
          jpg.Assign(imInput.Picture.Graphic);
          jpg.SaveToStream(ms);
          if SizeOf(ms) > 0 then
            (adoDataSet.FieldByName('PICTURE') as TBlobField).LoadFromStream(ms);
        finally
          ms.Free;
          jpg.Free;
        end;{try}
      end;{if}
    //注:imInput为TImage类型
    end;
      

  7.   

    var
    pjpg:tjpegimage;
    pic:TMemoryStream;
    begin
    pjpg:=tjpegimage.Create;
    pjpg.LoadFromFile(F:\JPG.jpg);
    pic:=TMemoryStream.Create;
    pjpg.SaveToStream(pic);
    pic.Position:=0;
    dataset.TBlobField(FieldByName('Img')).LoadFromStream(pic);
    dataset.post;
    pic.Free;
    end;都第二遍了~~
    这个完全按着你的意思了,而且简单!
      

  8.   

    改一下上面
    var
    pjpg:tjpegimage;
    pic:TMemoryStream;
    begin
    pjpg:=tjpegimage.Create;
    pjpg.LoadFromFile(F:\JPG.jpg);
    pic:=TMemoryStream.Create;
    pjpg.SaveToStream(pic);
    pic.Position:=0;
    TBlobField(dataset.FieldByName('Img')).LoadFromStream(pic);
    dataset.post;
    pic.Free;
    end;都第二遍了~~
    这个完全按着你的意思了,而且简单!
      

  9.   

    to zdcnow(磁效应):
        我的Email:[email protected]
    谢谢!
      

  10.   

    各位,请教个问题:
    var
      jpg:Tjpegimage;
    begin
      jpg:=Tjpegimage.Create;
      jpg.LoadFromFile('filepath+filename');//这句可以
    //  if openpicturedialog1.Execute then
    //    jpg.LoadFromFile(''''+openpicturedialog1.FileName+'''');//这两句为什么不行?提示不能打开这个文件。经查看,得到的路径和文件跟前一句是一样的
    还有,下面的也不行:
    procedure TForm1.Image1Click(Sender: TObject);
    begin
      if openpicturedialog1.Execute then
        image1.Picture.LoadFromFile (''''+openpicturedialog1.FileName+'''');
    end;
      

  11.   

    前段时间刚写了一个程序,管理自己的图片的,有些没有写完,还有一些决策性错误(用ADOTABLE)太消耗内存了,想换成ADOQUERY,每次只是打开一条记录。图片存储于提取都没有问题,如果需要给我发邮件,我发给你[email protected]
      

  12.   


    xdf_hubei(向太傅) :
        发各给我吧!谢谢!
    各位:
        下面是怎么回事?
    var
      jpg:Tjpegimage;
    begin
      jpg:=Tjpegimage.Create;
      jpg.LoadFromFile('filepath+filename');//这句可以
    //  if openpicturedialog1.Execute then
    //    jpg.LoadFromFile(''''+openpicturedialog1.FileName+'''');//这两句为什么不行?提示不能打开这个文件。经查看,得到的路径和文件跟前一句是一样的
    还有,下面的也不行:
    procedure TForm1.Image1Click(Sender: TObject);
    begin
      if openpicturedialog1.Execute then
        image1.Picture.LoadFromFile (''''+openpicturedialog1.FileName+'''');
    end;
      

  13.   

    真是笨!前面的问题解决了,原来是我搞错。
    zdcnow(磁效应):
        麻烦您的例子也请发一下。