Entwickler-Ecke

Datenbanken - Bilder in Datenbanken


Flash_68 - Fr 24.02.12 16:07
Titel: Bilder in Datenbanken
Hallo zusammen,

ich möchte gern Bilder in Datenbanken einfügen und auslesen bzw. mir wieder anzeigen lassen. Habe dazu hier auch schon Themen gefunden, allerdings beziehen sich diese auf Paradox oder andere Datenbanken.

Könnte mir dazu jemand ein paar Tips geben?

Gruß

Flash


bummi - Fr 24.02.12 16:24

was genau ist Dir unklar?

http://www.delphipraxis.net/166618-bilder-datenbanken.html


Flash_68 - Fr 24.02.12 16:58

Es wurde nur geschrieben das ich auf die Pfade der Bilder in die DB einpflegen soll. Mehr wurde nicht geschrieben, wie ich die Bilder selbst einfüge oder auslese hat keiner geschrieben oder ob es das selbe ist wie bei den anderen datenbanken.


bummi - Fr 24.02.12 17:19

Wenn Du keine Visuelle Komponente wie DBImage verwenden willst am Einfachsten per

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
Var
  bmp:TBitMap;
begin
    bmp:=TBitMap.Create;
    try
      bmp.LoadFromFile('C:\Bilder\MeinBild.BMP');
      Bilder.Edit;
      Bilderbild.assign(bmp);
      Bilder.Post;
    finally
      bmp.Free;
    end;
end;


mit DBImage-Komponente

Delphi-Quelltext
1:
2:
3:
4:
5:
begin
      Bilder.Append;
      DBImage1.Picture.Bitmap.LoadFromFile('C:\Bilder1\4KEYBUT.BMP');
      Bilder.Post;
end;



im Beispiel

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
CREATE TABLE [dbo].[Bilder](
  [id] [int] IDENTITY(1,1) NOT NULL,
  [Bild] [varbinary](max) NULL,
 CONSTRAINT [PK_Bilder] PRIMARY KEY CLUSTERED 
(
  [id] ASC
) ON [PRIMARY]
) ON [PRIMARY]


Wenn Du JPG's verwenden willst muss Du Streams verwenden.
Hake gerne nach wenn obiges nicht ausreicht ...


Flash_68 - Mo 27.02.12 13:03

Danke erstmal für die Hilfe.

Ich werde wohl überwiegend JPG verwenden und es wäre nett wenn du mir da nochmal helfen könntest.

Gruß

Flash


bummi - Mo 27.02.12 13:25


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
uses LoadSaveImageBlobs,pngimage;
{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
  p:TPicture;
begin
  p := TPicture.Create;
  try
    p.LoadFromFile('C:\Icons\IconCollection\ix_ap_all\128x128\shadow\about.png');
    Bilder.Edit;
    SavePicture2Blob(BilderBild,p);
  finally
    p.Free;
  end;

end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  LoadPictureFromBlob(IMage1.Picture,BilderBild);
end;


Flash_68 - Mo 27.02.12 13:54

das loadSaveImageBlobs findet er bei bei mir nicht, ist das standartmäßig dabei?


bummi - Mo 27.02.12 14:03

Im Anhang meines letzten Postings ....


Flash_68 - Mo 27.02.12 14:08

das hatte ich über sehen, danke.

Moderiert von user profile iconNarses: Beiträge zusammengefasst

und für was steht der Eintrag BilderBild?


bummi - Mo 27.02.12 14:18

Ein Adodataset mit dem SQL 'Select ID,Bild from Bilder' Bild persistent gemacht

DeinDataset.FieldByName('Bild') .....


Flash_68 - Mo 27.02.12 14:30

Jetzt bekomme ich die Fehlermeldung Inkompatible Typen TBlobfield und TField für die Zeile mit dem SavePicture2Blob.


bummi - Mo 27.02.12 15:51

was für ein Feld hast Du den verwendet? varbinary ?
Wenn Du es nicht persistent gemacht hast BilderBild sondern über Bilder.FieldByName('Bild') zugreifst mußt Du es Casten z.B.

Delphi-Quelltext
1:
SavePicture2Blob(TBlobField(Bilder.FieldByName('Bild')),p);                    


Flash_68 - Mo 27.02.12 16:03

Das hat gut geklappt mit dem casten, danke.

Kannst du mir das mit dem persistent machen mal erklären?


bummi - Mo 27.02.12 16:04

Doppelklick auf dem Dataset, rechter Mausklick Felder hinzufügen ....


Flash_68 - Mo 27.02.12 16:11

In der Liste ist mein Feld vorhanden, habe alle felder da eingetragen die ich benötige.


bummi - Mo 27.02.12 16:43

Dann kannst Du sie auch direkt verwenden ohne über FieldByName und Cast zu gehen ...


Flash_68 - Mo 27.02.12 16:59

Kann es daran liegen das es in einem Datenmodul liegt?


bummi - Mo 27.02.12 17:06

Wo es liegt ist wurscht, was für ein Fehler bekommst Du denn und was für ein FeldTyp ist es (wenn Du es anklickts im Objektinspektor oder in den Deklarationen in Deiner Pas).


Flash_68 - Di 28.02.12 10:12

Ich habs jetzt wie es ohne den cast geht:

SavePicture2Blob(dm_filme.ADS_FilmeBild,p);

Ich mußte das Datenmodul mit angeben.