AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Bild in Access DB speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Bild in Access DB speichern

Ein Thema von Gehstock · begonnen am 25. Okt 2007 · letzter Beitrag vom 26. Okt 2007
Antwort Antwort
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#1

Bild in Access DB speichern

  Alt 25. Okt 2007, 13:56
Datenbank: Access • Zugriff über: ADO
Delphi-Quellcode:
procedure TForm7.SavePic;
var
  bS : TADOBlobStream;
  Pic : TJpegImage;
begin
  bS := TADOBlobStream.Create(AdoTable1Picture, bmWrite);
  try
    Pic.Assign(AdoImage);
    try
     Pic.SaveToStream(bS);
     bs.Position := 0;
     TBlobField(Table1.FieldByName('Bild')).LoadFromStream(bs);
    finally
     Pic.Free;
    end;
  finally
    bS.Free
  end;
end;
Delphi-Quellcode:
  if Button = nbPost then
   begin
    LoadPIC.Visible := false;//TButton
    SavePIC;

erzeugt nur einern "Stream Lesefehler" in der DB werden nur die eingaben von den DBEdit Feldern gespeichert
Marcel
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Bild in Access DB speichern

  Alt 25. Okt 2007, 14:29
bist du dir sicher, dass du die Tabelle zum editieren freigegeben hast:

also so:
Delphi-Quellcode:
BlobField := TBlobField(Table1.FieldByName('Bild'));
Table1.Edit;
BlobField.LoadFromStream(bs);
Jürgen Höfs
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Bild in Access DB speichern

  Alt 25. Okt 2007, 16:28
klappt net er speichert einfach nicht vermute das programm weiß nicht in welche spalte hier mal der komplette source mit exe



Delphi-Quellcode:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, DBCtrls, Grids, DBGrids, ExtCtrls, DB, DBTables,
  ADODB, Jpeg, ExtDlgs;

type
  TForm7 = class(TForm)
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit5: TDBEdit;
    DBEdit6: TDBEdit;
    DBNavigator1: TDBNavigator;
    DBEdit8: TDBEdit;
    Label8: TLabel;
    Label12: TLabel;
    DBEdit11: TDBEdit;
    ADOImage: TImage;
    Table1: TADOTable;
    ADOTable1Nr: TAutoIncField;
    ADOTable1Name: TWideStringField;
    ADOTable1Vorname: TWideStringField;
    ADOTable1Strasse: TWideStringField;
    ADOTable1Ort: TWideStringField;
    ADOTable1Termin: TDateField;
    ADOTable1TelefonFest: TWideStringField;
    ADOTable1TelefonMobil: TWideStringField;
    ADOTable1Picture: TBlobField;
    LoadPIC: TButton;
    OpenPicture: TOpenPictureDialog;
    procedure FormCreate(Sender: TObject);
    function JpegStartsInBlob(PicField:TBlobField):integer;
    procedure OpenPic;
    procedure SavePic;
    procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    procedure LoadPICClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form7: TForm7;

implementation

{$R *.dfm}

procedure TForm7.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
begin
if Length(DBEdit1.text)> 0 then OpenPic;
 if Button = nbedit then
   begin
    LoadPIC.Visible := True;
   end;
  if Button = nbInsert then
   begin
    LoadPIC.Visible := True;
   end;
  if Button = nbPost then
   begin
    LoadPIC.Visible := false;
    SavePIC;
   end;
end;

procedure TForm7.FormCreate(Sender: TObject);
begin
   Table1.Active := True;
   OpenPic;
end;

function TForm7.JpegStartsInBlob(PicField:TBlobField):integer;
var
 bS : TADOBlobStream;
 buffer : Word;
 hx : string;
begin
 Result := -1;
 bS := TADOBlobStream.Create(PicField, bmRead);
 try
  while (Result = -1) and (bS.Position + 1 < bS.Size) do begin
   bS.ReadBuffer(buffer, 1);
   hx:=IntToHex(buffer,2);
   if hx = 'FFthen begin
     bS.ReadBuffer(buffer, 1);
     hx:=IntToHex(buffer,2);
     if hx = 'D8then Result := bS.Position - 2
     else if hx = 'FFthen bS.Position := bS.Position-1;
   end;//if
  end;//while
 finally
  bS.Free
 end; //try
end;

procedure TForm7.LoadPICClick(Sender: TObject);
{var
  jpg: TJPEGImage;
  bmp: TBitmap;   }

begin
if OpenPicture.execute then
 begin
  AdoImage.Picture.LoadFromFile(OpenPicture.FileName);
end;
end;

procedure TForm7.OpenPic;
var
  bS : TADOBlobStream;
  Pic : TJpegImage;
begin
  bS := TADOBlobStream.Create(AdoTable1Picture, bmRead);
  try
    bS.Seek(JpegStartsInBlob(AdoTable1Picture), soFromBeginning);
    Pic:=TJpegImage.Create;
    try
     Pic.LoadFromStream(bS);
     ADOImage.Picture.Graphic:=Pic;
    finally
     Pic.Free;
    end;
  finally
    bS.Free
  end;
end;

procedure TForm7.SavePic;
var
  bS : TADOBlobStream;
  Pic : TJpegImage;
begin
  bS := TADOBlobStream.Create(AdoTable1Picture, bmRead);
  try
    Pic.Assign(AdoImage);
    try
     Pic.SaveToStream(bS);
     bs.Position := 0;
     ADOTable1Picture := TBlobField(Table1.FieldByName('Bild'));
     Table1.Edit;
     ADOTable1Picture.LoadFromStream(bs);
    finally
     Pic.Free;
    end;
  finally
    bS.Free
  end;
end;

end.
Angehängte Dateien
Dateityp: rar adressen_194.rar (401,6 KB, 10x aufgerufen)
Marcel
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Bild in Access DB speichern

  Alt 26. Okt 2007, 12:30
Push
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Bild in Access DB speichern

  Alt 26. Okt 2007, 12:58
Setze die Tabelle mal in den Edit-Modus, bevor du den BlobStream erzeugst, ansonsten schau dir mal an, wie ich es hier und hier realisiert habe. Wenn du dort TTable geben TAdoTable austauschst, sollte es genauso funktionieren.

Grüße
Mikhal

[edit]Rechtschreibfehler...[/edit]
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz