我做一个人事系统,要保存员工的相片扫描的图片。数据库是access,其中照片字段应该设成什么类型呢,是OLE吗,在运行时说数据类型不匹配。保存照片的代码又是怎么样的呢,望高手赐相关代码,提供者有分!

解决方案 »

  1.   

    用數據庫存取圖片,會加大數據庫的容量,不可取。用記取圖片路徑的方法。控件方法:Timage.loadfromfile(...);
      

  2.   

    最好的方法是存路径,浏览的时候从数据库读路径显示图片就行了,access的数据库容量是有限制的,不要将图片存在里面。
      

  3.   

    将JPG格式图片保存到ACCESS数据表中  
    var
      Ind,i:Integer;
      FName:string;
      AJPeg:TJPEGImage;
      temp:TBitmap;
    begin
      if opd1.Execute then
      begin
        btnAdd.Enabled:=False;
        Ind:=Opd1.Files.Count;
        for i:=0 to Ind-1 do
        begin
          FName:=opd1.Files.Strings[i];
          Application.ProcessMessages;
          tbl1.Append;
          tblPictureName.AsString:=FName;
          if UpperCase(Copy(FName,Length(Fname)-3,4))=’.JPG’ then
          begin
            AJpeg:=TJPEGImage.Create;
            AJpeg.LoadFromFile(FName);
            Temp:=TBitmap.Create;
           Image1.Height:=Ajpeg.Height;
            Image1.Width:=Ajpeg.Width;
            Image1.Picture:=nil;
            Image1.Canvas.Draw(0,0,Ajpeg);
            DBImage1.Picture:=Image1.Picture;
            AJpeg.Free;
          end
          else
            tblPicture.LoadFromFile(FName);
          tbl1.Post;
        end;
      end;
    说明:
    tbl1:TADOQuery;
    opd1:TOpenPictureDialog;tblPicture是tbl1的字段,OLE型。
    uses
      JPEG;
      

  4.   

    TO:xiao0101,谢谢你的帮助,我是出学者,有相关代码可以让我参考吗?谢谢各位!
      

  5.   

    在ACCESS中图片一般是不入库的,太大了,执行起来也慢
      

  6.   

    xiao0101() 的说法可能要商量,
    因为员工可能并不多,而且照片一般不大,故存在数据库中更完整与安全,
    我的一个项目就是用Access存照片的,现在我在网吧不好看具体实现了?
    照片字段好像是Blob还是什么Binary类型?
    照片的调出就用DBImage
      

  7.   

    function FileSizes(filename:string):integer;
    var f:file;
    begin
      assignfile(f,filename);
      reset(f,1);
      result:=filesize(f);
      closefile(f);
    end;
    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
       if OpenPictureDialog1.Execute then
       begin
          ADOTable1.append;
          ADOTable1.FieldByName('IMG_FILENAME').AsString:=extractfilename(OpenPictureDialog1.filename);
          ADOTable1.FieldByName('IMG_FILESIZE').AsInteger:=filesizes(OpenPictureDialog1.filename);
          TBlobField(ADOTable1.FieldByName('IMG_FILEDATA')).loadfromfile(OpenPictureDialog1.filename);
          ADOTable1.post;
          ADOTable1AfterScroll(ADOTable1);
      end;
    end;procedure TForm1.ADOTable1AfterScroll(DataSet: TDataSet);
    begin
                image1.Picture.Create;
          if not ADOTable1.eof then
            if trim(ADOTable1.FieldByName('IMG_FILENAME').asstring)<>'' then
            begin
                TBlobField(ADOTable1.FieldByName('IMG_FILEDATA')).savetofile(ApplicationPath+ADOTable1.FieldByName('IMG_FILENAME').asstring);
                Image1.Picture.LoadFromFile(ApplicationPath+ADOTable1.FieldByName('IMG_FILENAME').asstring);
                deletefile(ApplicationPath+ADOTable1.FieldByName('IMG_FILENAME').asstring);
            end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      ApplicationPath:=ExtractFilePath(Application.ExeName);
      if copy(ApplicationPath,length(ApplicationPath),1)<>'\' then
      ApplicationPath:=ApplicationPath+'\';
      ADOConnection1.ConnectionString:= stringreplace(ADOConnection1.ConnectionString,'Data Source=images.mdb','Data Source='+ApplicationPath+'images.mdb',[rfReplaceAll]);
      ADOConnection1.Open;
      AdoTable1.open;
    end;procedure TForm1.LabelDelphiKTopClick(Sender: TObject);
    begin
       ShellExecute(application.handle,pchar('OPEN'),pchar('http://delphi.ktop.com.tw'),nil,nil,0);
    end;end.
      

  8.   

    用access存几千图片太小意思了,cxdbimage控件可以直接读出