用delphi怎样实现在sqlserver中图形格式文件的存取?各位高手,大侠们帮忙呀 !!!

解决方案 »

  1.   

    这样的问题在论坛里都有成千上万个人问过了,搜一搜已解决的帖子或者faq吧
     ________________________欢迎访问和宣传我的论坛http://hthunter.vicp.net/
      

  2.   

    http://expert.csdn.net/Expert/topic/2994/2994835.xml?temp=.4359095
    随便一搜就有,doc和图片一样操作.
      

  3.   

    你做一个插入代码不就行了
    用adotable datasource 还有dbimage了 

    adotable.append;
    adotable.post;
      

  4.   

    http://expert.csdn.net/Expert/topic/2938/2938363.xml?temp=.1467096这里也有:P
      

  5.   

    //俺用它也混了不少分了。。又拿出来 :)
    // 通过 , 'doc' 的数据库中为image 类型
    // 不管是WORD,EXCLE,还中JPG的都能用
    // 注意打开文件时一定要先定位(即要先写sql 查询确定有个再打开 ),要不然会出错,还有就是临时文件的删除。。
    // delphi 7+sql2000通过。。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB, StdCtrls, shellapi,Buttons, OleCtnrs;
    type
      TForm1 = class(TForm)
        ADOConnection1: TADOConnection;
        Button1: TButton;
        Button2: TButton;
        OpenDialog1: TOpenDialog;
        ADOQuery1: TADOQuery;
        OleContainer1: TOleContainer;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
       s:string;
    implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
     if OpenDialog1.Execute then
      begin
        if not ADOQuery1.Active then ADOQuery1.Open;
        ADOQuery1.Append;
        s :=ExtractFileName(OpenDialog1.FileName);
        (ADOQuery1.FieldByName('doc') as TBlobField).LoadFromFile(OpenDialog1.filename);
         ADOQuery1.Post;end;
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    (ADOQuery1.FieldByName('doc') as TBlobField).savetoFile(ExtractFileDir(Application.ExeName)+'\'+s);// (ADOQuery1.FieldByName('doc') as TBlobField).savetoFile('你要的路径' +s)  ;
     
      
      shellexecute(handle,nil,pchar(s),nil,nil,sw_shownormal);
       end;end.
      

  6.   

    //上边发错了。。
    //不好意思。。
    //记得加上uses jpeg ;
    //其中有些地方不是太严密,回去修改下。。
    //delphi7+ sql2000通过.可以保存jpeg,jpg,bmp三种格式。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, jpeg,DB, ADODB, ExtCtrls, Buttons, Grids, DBGrids,
      DBCtrls;type
      TForm1 = class(TForm)
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        Button1: TButton;
        OpenDialog1: TOpenDialog;
        Edit1: TEdit;
        Image1: TImage;
        Image2: TImage;
        BitBtn1: TBitBtn;
        DBGrid1: TDBGrid;
        DataSource1: TDataSource;
        ADOQuery1pic: TBlobField;
        ADOQuery1borj: TStringField;
        procedure Button1Click(Sender: TObject);
        procedure BitBtn1Click(Sender: TObject);  private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      s:string;
      s1:string;
    implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
    bitmap1:tbitmap;
    pjpg:tjpegimage;
    pic:TMemoryStream;begin
    pjpg:=tjpegimage.Create;
    if opendialog1.Execute
        then
         s:=opendialog1.FileName ;
         s1:=extractfileext(s);
             
         if (uppercase(s1) ='.JPG' ) or (uppercase(s1)='.JPEG') // 图片格式一定要大写
           THEN
             begin
                  pjpg.LoadFromFile(s );
                  pic:=TMemoryStream.Create;
                  pjpg.SaveToStream(pic);
                  image1.Picture.Bitmap.Assign(pjpg);              pic.Position:=0;
                  adoquery1.Insert ;
                  adoquery1.FieldByName('borj').VALUE := 2;
                  TBlobField(adoquery1.FieldByName('pic')).LoadFromStream(pic);
                  adoquery1.post;
                  pic.Free;
                  pjpg.free;
            end ;    if (uppercase(s1)='.BMP')    then           begin
                  edit1.Text :=uppercase(s1);             image1.Picture.LoadFromFile(s);
                 adoquery1.Insert ;
                 adoquery1.FieldByName('pic').Assign(image1.Picture.Graphic);
                 adoquery1.FieldByName('borj').VALUE := 3;             adoquery1.Post ;
              end;
     end;  procedure TForm1.BitBtn1Click(Sender: TObject);   var
        jpeg:tjpegimage;
          begin
           image1.Picture.Graphic :=nil;
                with adoquery1 do
                     begin
                        if adoquery1.FieldByName('borj').Value =3   // bmp
                        then
                         image2.Picture.Bitmap.Assign(fieldbyname('pic'))  ;                     if adoquery1.FieldByName('borj').Value =2  //jpge;                     then
                            begin
                                   jpeg:=tjpegimage.Create ;
                                    try
                                     jpeg.Assign(adoquery1.FieldByName('pic') );
                                      image2.Picture.Graphic:=jpeg;
                                       finally
                                       jpeg.Free ;
                                     end;
                            end;                 end ;
                        end;end.
      

  7.   

    Procedure..............................
    var
      Simage:TMemoryStream;
    begin
      Simage:=TMemoryStream.Create;
      Simage.LoadFromFile('c:\aaa.bmp');
      Simage.Position:=0;
      try
        ADOQuery.Open;
        ADOQuery.Append;
        TBlobField(ADOQuery.FieldbyName('Photo')).LoadFromStream(Simage);
        ADOQuery.Post;
        Simage.Free;
       except
          MessageDlg('保存图像失败,请重试!', mtInformation,[mbOK],0);
       end;end;
    ////////////////////////////////////////////////////////////////////////////////////////////procedure TForm1.Button3Click(Sender: TObject);
    var
       bmp : TBitMap;
    begin
      if OpenDialog1.Execute then
      begin
        bmp := TBitMap.Create;
        bmp.LoadFromFile(OpenDialog1.FileName);
        Image1.Picture.Bitmap := bmp;
        bmp.Free;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      MaxNo : Integer;
      MStream:TMemoryStream;
    begin
      With DataModule1.Query1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select Max(No) from testblob');
        if Not Prepared then Prepared := True;
        Open;
        MaxNo := Fields[0].AsInteger;
      end;
      MStream := TMemoryStream.Create;
      Image1.Picture.Bitmap.SaveToStream(MStream);
      ShowMessage(IntToStr(MStream.Size));
      MStream.Position := 0;
      DataModule1.Table1.Insert;
      DataModule1.Table1.FieldByName('No').AsInteger := MaxNo + 1;
      //DataModule1.Table1.Fields[1].Assign(Image1.Picture.Bitmap);
      //TBlobField(DataModule1.Table1.FieldByName('Image')).LoadFromStream(MStream);
      try
        DataModule1.Table1.Post;
      except
        ON E:Exception do
          begin
           MStream.Free;
           Showmessage(E.Message);
           Exit;
          end;
      end;
      MStream.Free;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      DataModule1.Table1.Delete;
    end;procedure TForm1.Button4Click(Sender: TObject);
    var
      BlobS : TBlobStream;
    begin
      Image1.Hide;
      //Image1.Picture.Bitmap.FreeImage;
      BlobS := TBlobStream.Create(TBlobField(DataModule1.Table1.FieldByName('Image')),bmRead);
      Image1.Picture.bitmap.LoadFromStream(BlobS);
      Image1.Refresh;
      Image1.Show;
      BlobS.Free;
    end;procedure TForm1.Button5Click(Sender: TObject);
    var
      MaxNo : Integer;
      MStream:TStringStream;
    begin
      With DataModule1.Query1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select Max(No) from testblob');
        if Not Prepared then Prepared := True;
        Open;
        MaxNo := Fields[0].AsInteger;
      end;
      MStream := TStringStream.Create('');
      Image1.Picture.Bitmap.SaveToStream(MStream);   //注意这里
      ShowMessage(IntToStr(MStream.Size));
      MStream.Position := 0;
      DataModule1.Query1.Active := False;
      DataModule1.Query1.Close;
      DataModule1.Query1.SQL.Clear;
      DataModule1.Query1.SQL.Add('Insert into testblob values(:No,:Image)');
      DataModule1.Query1.ParamByName('No').AsInteger := MaxNo + 1;
      DataModule1.Query1.ParamByName('Image').AsBlob := MStream.DataString;
      DataModule1.Query1.Prepare;
      DataModule1.Query1.ExecSQL;
      DataModule1.Table1.Refresh;
    end;像这样子试试
    如果是jpg,就先将它转换为bmp,再保存.