拜托各位大虾帮帮忙!

解决方案 »

  1.   

    adoquery.close;
    adoquery.sql.text := 'select id, img from table';
    adoquery.open;
    adoquery.edit;
    Tblobfield(adoquery.fieldbyname('img')).loadfromfile('c:\test.bmp');
    adoquery.post;
      

  2.   

    同意楼上的,或者用流 Steam
      

  3.   

    http://soft.56kc.com/FileDown.aspx?FID=169
      

  4.   

    http://blog.csdn.net/ghyghost/archive/2003/07/21/15773.aspx
      

  5.   

    请问能否像存integer类型的变量一样,和varchar类型的数据一起存入数据库呢?
      

  6.   

    保存图片到数据库中:
    procedure AddPicToDatabase(Filename:string);
    var
      JPG:TJPEGImage;
      Stream:TMemoryStream;
    begin
    try
      jpg:=TJPEGImage.Create;
      stream:=TMemoryStream.Create;
      jpg.LoadFromFile(Filename);
      jpg.SaveToStream(stream);
      stream.Position:=0;
      TBlobField(mainfrm.Table1.FieldByName('Pic')).LoadFromStream(stream);
      jpg.Free;
      stream.Free;
    except
    end;
    end;从数据库中读出图片
    procedure LoadPicFromDatabase(Sender:TImage);
    var
      Jpg:TJpegImage;
      Stream:TMemoryStream;
    begin
      jpg:=TJpegImage.Create;
      stream:=TMemoryStream.Create;
      TBlobField(mainfrm.Table1.FieldByName('Pic')).SaveToStream(stream);  
      stream.Position:=0;
      jpg.LoadFromStream(stream);
      sender.Picture.Assign(jpg);
      jpg.Free;
      stream.Free;
    end;
    ---------------------------------------------- 
      

  7.   

    我的怎么还不行啊,麻烦各位给看看保存到数据库中:
    ****************************************************
     ms:=TMemoryStream.Create ;
        image1.Picture.Graphic.SaveToStream(ms);
            with adoquery1 do
            begin
                close;
                sql.Clear;
                sql.Add('insert into T_EmergenceAssistantInfo (PlanNumber,PlanEnterprise,Name,'+
                    'StyleIndex,ReplaceIndex)'+
                    ' values('+quotedStr(Trim(edtPlanNumber.Text))+','+
                    quotedStr(Trim(edtPlanEnterprise.Text))+','+
                    quotedStr(Trim(cbxPicture.Text))+','+
                    quotedStr('Picture')+','+quotedStr('Y')+')');
                ExecSql;
                close;
                sql.clear;
                sql.Add('select * from T_EmergenceAssistantInfo where PlanNumber='+
                        quotedStr(Trim(edtPlanNumber.Text))+' and PlanEnterprise='+
                        quotedStr(Trim(edtPlanEnterprise.Text))+
                        ' and Name='+quotedStr(Trim(cbxPicture.Text))+
                        ' and StyleIndex='+quotedStr('Picture')+
                        ' and ReplaceIndex='+quotedStr('Y'));
                Open;
                adoquery1.Edit;
                ms.Position :=0;
                Tblobfield(adoquery1.fieldbyname('Picture')).LoadFromStream(ms);
                post;
            end;
            ms.Free ;
    ***************************************************
    从数据库中取出图片:
    ************************************************************
     with adoquery1 do
            begin
                close;
                sql.Clear;            sql.Add('select * from T_EmergenceAssistantInfo where PlanNumber='+
                        quotedStr(Trim(edtPlanNumber.Text))+' and PlanEnterprise='+
                        quotedStr(Trim(edtPlanEnterprise.Text))+
                        ' and Name='+quotedStr(Trim(cbxPicture.Text))+
                        ' and StyleIndex='+quotedStr('Picture')+
                        ' and ReplaceIndex='+quotedStr('Y'));
                Open;
                if fieldBYName('Picture')<>nil then
                begin
                ms:=TMemoryStream.Create ;
                Tblobfield(adoquery1.fieldbyname('Picture')).SaveToStream(ms);
                ms.Position:=0;
                if ms.Size>0 then
                begin
                image1.Picture.Graphic.loadFromStream(ms);
                end;
               end;
            end;
            ms.Free ;
      

  8.   

    存:
          MemStream := TMemoryStream.Create;              //创建流
          try
            MemStream.LoadFromFile(filedirectory);  //将文件读到流中去,你文件都没有LOAD,那怎么保存
            MemStream.Seek(0, soFromBeginning);
            with ADOQuery do
            begin
              Append;
              TBlobField(FieldByName('fieldname')).LoadFromStream(MemStream);
              Post;
            end;
          finally
            MemStream.Free;
          end;
      

  9.   

    先 uses jpeg
    var
      ImageBMP:Tbitmap;
      ImageJPEG:Tjpegimage;
    begin
    try
      if bsSkinOpenPictureDialog1.Execute then
      begin
        Data.dsProbation.DataSet.Edit;
        if uppercase(ExtractFileExt(bsSkinOpenPictureDialog1.FileName))='.JPG' then
        begin
          ImageBMP:=Tbitmap.Create;
          ImageJPEG:=TjpegImage.Create;
          ImageJPEG.LoadFromFile(bsSkinOpenPictureDialog1.FileName);
          ImageBMP.Assign(ImageJPEG);
          ImageBMP.SaveToFile(ExtractFilePath(application.ExeName)+'TempBMP.BMP');
           //bsSkinDBImage1.Picture.LoadFromFile(bsSkinOpenPictureDialog1.FileName);//
          bsSkinDBImage1.Picture.LoadFromFile(ExtractFilePath(application.ExeName)+'TempBMP.BMP');
        end
        else
          bsSkinDBImage1.Picture.LoadFromFile(bsSkinOpenPictureDialog1.FileName);
      end;
      except
       unit1.frm_mian.bsSkinMessage1.MessageDlg('您选择的图片格式有误,请从新选择!', mtInformation, [mbOK], 0);
      exit;
      end;
    end;
    不知道是我用的控件问题还是DELPHI的BUG ,DBImage1不能正常显示JPG的图片,所以要把JPG的转成BMP的,如果在放入数据库,这样唯一不好的就是BMP的图太大了,影响数据库的质量!
      

  10.   

    sql server 2000中建立存取处理的存储过程
    CREATE PROCEDURE sp_textcopy
    @srvname varchar (30), --服务器名
    @login varchar (30),  --用户名
    @password varchar (30),  --密码
    @dbname varchar (30),  --数据库名
    @tbname varchar (30),  --表名
    @colname varchar (30),  --存储文件的字段名
    @filename varchar (30),  --要存取的文件名
    @whereclause varchar (40),  --条件
    @direction char(1) --I 为存储到数据库,O 从数据库中读出成文件
    AS 
    DECLARE @exec_str varchar (255) 
    SELECT @exec_str = 
            'textcopy /S"' + @srvname + 
            '" /U ' + @login + 
            ' /P ' + @password + 
            ' /D ' + @dbname + 
            ' /T ' + @tbname + 
            ' /C ' + @colname + 
            ' /W "' + @whereclause + 
            '" /F "' + @filename + 
            '" /' + @direction 
    EXEC master..xp_cmdshell @exec_str  
    go--调用示例:
    --1.创建示例表和初始化数据
    create table tb(id int,img image)
    insert tb 
    select 1,0x
    union all select 2,0x
    go--2.将文件保存到数据库中
    declare @srv varchar(255),@db sysname,@tb sysname,@col sysname
    select @srv=@@servername --服务器名
    ,@db=db_name() --数据库名
    ,@tb='tb' --表名
    ,@col='img' --列名
    sp_textcopy @srv,'sa','sa的密码',@db,@tb,@col,'c:\test.jpg','where id=1','I' --保存到id=1的记录中,注意条件是:id=1
    sp_textcopy @srv,'sa','sa的密码',@db,@tb,@col,'c:\test.doc','where id=2','I' --保存到id=2的记录中,注意条件是:id=2--3.从数据库中读出保存为文件
    sp_textcopy @srv,'sa','sa的密码',@db,@tb,@col,'c:\test.jpg','where id=1','O' --读出id=1的记录,注意条件是:id=1
    sp_textcopy @srv,'sa','sa的密码',@db,@tb,@col,'c:\test.doc','where id=2','O' --读出id=2的记录,注意条件是:id=2在delphi中只需执行sql语句:“adoquery1.SQL.Add(exec sp_textcopy);
                                 adoquery1.execsql;”/*--利用 textcopy.exe文件实现在数据库中存储/读取文件 需要textcopy.exe文件,该文件可以在sql 7.0安装光盘找到--转贴自大力--*/
      

  11.   

    那種方法只支持*.BMP不支持*.jpg或*.jpeg,*.JPG,*.JPEG
      

  12.   

    具體做法從以下函數是去體會吧:
    procedure TFBathDetail.LoadData;
    var
      ImageStream: TMemoryStream;
      JPEGImage: TJPEGImage;
      SqlText:string;
    begin
      with FDMPurchase.BathDetail do
      begin
        if RecordCount > 0 then
        begin
          EdtXSNo.Text := FieldByName('XSNo').AsString;
          EdtXStypeNo.Text := FieldByName('XStypeNO').AsString;
          if FDMPurchase.BathSort.Lookup('XStypeNO',FieldByName('XStypeNO').AsString,'XStypeName')<>null then
          EdtXStypeName.Text:=FDMPurchase.BathSort.Lookup('XStypeNO',FieldByName('XStypeNO').AsString,'XStypeName');
          EdtCsimpleName.Text := FieldByName('CsimpleName').AsString;
          EdtCpropName.Text := FieldByName('CpropName').AsString;
          EdtEnglishName.Text := FieldByName('EnglishName').AsString;
          EdtRe.Text := FieldByName('Re').AsString;
          if FBathDetail.State = 2 then
          begin
             SqlText := format('select XSTX from IXiShuiDetail where XSNo=''%s''', [trim(EdtXSNo.Text)]);
             OpenData(SqlText, FDMPurchase.Comm);
            ImageStream := TMemoryStream.Create;
            if (trim(FieldByName('Format').AsString) = 'jpg') or (trim(FieldByName('Format').AsString) = 'JPG')
              or (trim(FieldByName('Format').AsString) = 'jpeg') or (trim(FieldByName('Format').AsString) = 'JPEG') then
            begin
              JPEGImage := TJPEGImage.Create;
              try
                TblobField(FDMPurchase.Comm.FieldByName('XSTX')).SaveToStream(ImageStream);
                ImageStream.Seek(0, 0);
                JPEGImage.LoadFromStream(ImageStream);
                ImgXSTX.Picture.Bitmap.Assign(JPEGImage);
                SetSize;
              finally
                ImageStream.Free;
                JPEGImage.Free;
              end;
            end
            else
            begin
              try
                TblobField(FDMPurchase.Comm.FieldByName('XSTX')).SaveToStream(ImageStream);
                ImageStream.Seek(0, 0);
                ImgXSTX.Picture.Bitmap.LoadFromStream(ImageStream);
                SetSize;
              finally
                ImageStream.Free;
                JPEGImage.Free;
              end;
            end;
          end;
        end;
      end;
    end;function TFBathDetail.SaveData: boolean;
    var
      SqlText,ImageType,filepath: string;
    begin
      result := false;
      if trim(EdtXSNo.Text)='' then
      begin
        messagedialog('警告', '編號不能為空,請輸入!', mtWarning, [MBok], 0, 0);
        abort;
      end;
      if State = 1 then
      begin
        SqlText := format('select XSNo from IXiShuiDetail where XSNo=''%s''', [trim(EdtXSNo.Text)]);
        OpenData(SqlText, FDMPurchase.Comm);
        if FDMPurchase.Comm.RecordCount <> 0 then
        begin
          messagedialog('警告', '已存在此類別編號,請重新輸入', mtWarning, [MBok], 0, 0);
          abort;
        end;
      end;
      if State = 1 then
      begin
        with FDMPurchase.BathDetail do
        begin
          OpenData('select top 1 * from IXiShuiDetail',FDMPurchase.BathDetail);
          Append;
          FieldByName('XSNo').AsString := EdtXSNo.Text;
          FieldByName('XStypeNO').AsString := EdtXStypeNo.Text;
          FieldByName('CsimpleName').AsString := EdtCsimpleName.Text;
          FieldByName('CpropName').AsString := EdtCpropName.Text;
          FieldByName('EnglishName').AsString := EdtEnglishName.Text;
          FieldByName('Re').AsString := EdtRe.Text;
          filepath:=ExtractFileExt(PictureFileName);
          ImageType := rightstr(PictureFileName, (length(filepath) - Pos('.', filepath)));
          if ImageType <> '' then
          begin
            TblobField(FieldByName('XSTX')).LoadFromFile(PictureFileName);
            FieldByName('Format').AsString := ImageType;
            FieldByName('ImagePath').AsString:=PictureFileName;
          end;
          Post;
          ApplyUpdates(0);
          PictureFileName := '';
        end;
        State := 0;
        OpenData('select * from IXiShuiDetail', FDMPurchase.BathDetail);
        result := true;  end;
      if State = 2 then
      begin
        try
          with FDMPurchase.BathDetail do
          begin
            OpenData('select  * from IXiShuiDetail where XSNo='+#39+trim(EdtXSNo.Text)+#39,FDMPurchase.BathDetail);
            Edit;
            FieldByName('XSNo').AsString := EdtXSNo.Text;
            FieldByName('XStypeNO').AsString := EdtXStypeNo.Text;
            FieldByName('CsimpleName').AsString := EdtCsimpleName.Text;
            FieldByName('CpropName').AsString := EdtCpropName.Text;
            FieldByName('EnglishName').AsString := EdtEnglishName.Text;
            FieldByName('Re').AsString := EdtRe.Text;
            filepath:=ExtractFileExt(PictureFileName);
            ImageType := rightstr(PictureFileName, (length(PictureFileName) - Pos('.', PictureFileName)));
            if ImageType <> '' then
            begin
              TblobField(FieldByName('XSTX')).LoadFromFile(PictureFileName);
              FieldByName('Format').AsString := ImageType;
              FieldByName('ImagePath').AsString:=PictureFileName;
            end;
            Post;
            ApplyUpdates(0);
            PictureFileName := '';
          end;
          State := 0;
          OpenData('select * from IXiShuiDetail', FDMPurchase.BathDetail);
          result := true;
        except
          messageDialog('出錯', '保存數據時出錯,請重新保存或放棄.', mterror, [mbOk], 0, 0);
        end;
      end;
    end;
      

  13.   

    http://blog.csdn.net/ghyghost/archive/2003/07/21/15773.aspx
    http://blog.csdn.net/ghyghost/archive/2003/07/21/15774.aspx
      

  14.   

    功能:将一个文件保存到数据库中,然后再将文件从数据库中另存为
    以下的代码只是代码片断,有什么可以e-mail给我。
    --------------------------------------------------------------------
    保存
    ---------
    function PicToVarArray(pic: TPicture): Variant;
    var
      MS: TMemoryStream;
      s: string;
    begin
      MS := TMemoryStream.Create();
      Pic.Bitmap.SaveToStream(MS);
      SetLength(S, MS.Size);
      Move(MS.Memory^, Pointer(S)^, MS.Size);
        MS.Free();
      Result := StringToVariantArray(S);
    end;
    ------------------------------------------------------
    function SaveImage(var imag: OleVariant):Boolean
    begin
     ...
     SQL:='insert table(Fimag) values(:imag)'
     ....
     Parameters[1].Value :=imag;
    end
    ------------------------------
    读取
    -----------------------------
    var
     MS:TMemoryStream;
    begin
    ...........
     MS:=TMemoryStream(DataSet.CreateBlobStream(DataSet.FieldByName('Fimag'),bmRead));
     MS.SaveToFile('保存的文件名');
    ................
    end
    这个是我很早以前的代码了,希望能帮到你。