Var AbitMap:TBitMap;
 st:TStringStream;
begin
try
  ABitMap:=TBitMap.Create;
  aBitMap.LoadFromFile('D:\SAMPLE.BMP');
  st:=TStringStream.create('');
  aBitMap.SaveToStream(st); 
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('INSERT INTO Sys_user(USER_ID,USER_PIC) VALUES(''AA'',:pic)');
  Query1.ParamByName('PIC').AsBlob:=st.DataString;
  Query1.ExecSQL;
  finally
   abitmap.Free;
   st.Free;
   End;
上面的代码会出现死掉的情况(窗口就不能动了)
   用 SELECT DBMS_LOB.GETLENGTH(USER_PIC) FROM SYS_USER;执行结果为  0,插入的纪录成功了 
      可是blob字段User_Pic长度怎么是0呢?
保存于显示数据库中的图片究竟该如何做?请高手帮忙。希望把Query或者Table的重要属性也要说明
一下(我很菜)

解决方案 »

  1.   

    你参考一下吧,ACCESS的数据库,图片字段高为“OLE 对象”,能保存,但我不知道怎么查询显示出来,哪位大虾能告知,一并不胜感激!!
    procedure Tfrm_Main.BtnSaveToDBClick(Sender: TObject);
    var
      ext:string;
    begin
      if image1.Picture.Graphic <>nil then
      begin
        try
        DM.ADOConnection.BeginTrans  ;
        DM.ADODataSet_classMate.Edit ;
           DM.ADODataSet_classMate.FieldByName('相片').Assign(image1.Picture.Graphic);
           //以下记录保存到数据库的图像格式
           ext:=extractfileext(openpicturedialog1.FileName);
           if uppercase(ext) = '.BMP' THEN
              DM.ADODataSet_classMate.FieldByName('isbmp').Value :=1
              ELSE IF (UPPERCASE(EXT) = '.JPEG') OR (UPPERCASE(EXT) = '.JPG') THEN
                DM.ADODataSet_classMate.FieldByName('isbmp').Value :=0;
        DM.ADODataSet_classMate.Post ;
        DM.ADOConnection.CommitTrans ;
        except
        DM.ADOConnection.RollbackTrans ;
        showmessage('图片保存失败!');
        end;//try
      end;
    end;
      

  2.   

    var picname,exename:string;
        jpegimage:TJPEGImage;
    begin
      if not (adoquery1.State in [dsinactive]) then //写模式
      begin
      if OpenPictureDialog1.Execute then
        begin
          picname:=OpenPictureDialog1.FileName;
          exename:=ExtractFileExt(picname);
         if (UpperCase(exename)='.JPG')or(UpperCase(exename)='.JPEG') then
           begin
             jpegimage:=TJPEGImage.Create;
              try
                jpegimage.LoadFromFile(picname);
                adoquery1.edit;
                DBImage1.Picture.Graphic.Assign(jpegimage);
                adoquery1.Post;
              finally
               jpegimage.Free;
              end;
            end
          else
          begin
          adoquery1.Edit;
          adoquery1DSDesigner13.LoadFromFile(OpenPictureDialog1.FileName);
          adoquery1.Post;
          end;
        end;
      end;
      

  3.   

    本人有幼儿园收费系统项目,希望和各位delphi精英合作。特别是幼儿园考勤方面的,需要会delphi开发考勤机控制方面的人合作。电邮:[email protected]  qq 30770898