resimlerini veritabanında değilde ayrı bir klasörde tutmak isteyen arakadaşlar olabilir.bunun avantajları ve dezavantajları forumumuzda tartışıldı. burada resimleri ayrı bir klasörde tutmak isyen arkadaşlara bir nebze olsun yardımım olsun dedim.
ben firebird veritabanı ve ibx bileşeni kullandım. veritabanında RESIM alanını varchar olarak tanımladım.
öncelikle veritabanı ile bütün bağlantı ayarlarını yaptığımızı varsayıyorum.
formumuza bir image1, bir popupmenu1, bir opendialog1 koyalım.
poupmenu1 de;
-resim aç
-resim kaydet
-resim sil tanımlayalım
opject inspector den image1 in PopupMenu bağlantısını popupmeu1 yapalım.
resim aç için kod.
Kod: Tümünü seç
procedure TfrmAna.Resimekle1Click(Sender: TObject);
begin
if opendialog1.Execute then // eğer opendialog1 aktif ise
begin
image1.Picture.LoadFromFile(opendialog1.FileName); //opendialog1 deki resmi image nesnesine aktar
end;
end;
Kod: Tümünü seç
ibdataset1.Edit;
ibdataset1RESIM.AsString:= opendialog1.FileName;//veritabanındaki RESIM alanına opendialog1 deki yolun ismini yaz.
ibdataset1.Post;
Kod: Tümünü seç
ibdataset1.Edit;
ibdataset1RESIM.AsString:='';
ibdataset1.Post;
image1.Picture.LoadFromFile(ibdataset1.fieldByName('RESIM').AsString);//image nesnesini güncelledik.
içine yazın. örneğin button click olayı olabilir.
Kod: Tümünü seç
ibdataset1.Close;
ibdataset1.SelectSQL.Clear;
ibdataset1.SelectSQL.Add('Select * From BILGILER');
ibdataset1.SelectSQL.Add('where ADISOYADI LIKE '''+CeEdit1.Text+'%'' order By ADISOYADI');
ibdataset1.Open;
image1.Picture.LoadFromFile(ibdataset1.fieldByName('RESIM').AsString);//veritabanında kayıtlı yoldaki resmi image1 nesnesine aktar.
bunuda şu şekilde hallettim.
enter tuşuna basılırsa
Kod: Tümünü seç
procedure TfrmAna.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = Char(VK_RETURN) then
begin
ibdataset1.Next;
image1.Picture.LoadFromFile(ibdataset1.fieldByName('RESIM').AsString);
end;
end;
Kod: Tümünü seç
procedure TfrmAna.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
image1.Picture.LoadFromFile(ibdataset1.fieldByName('RESIM').AsString);
end;
fakat hız süper. daha önce yaptığım bir projede resimleri veritabanına kaydetmiştim. formu kapatırken
tablolarıda kapattığım için bir form 5-6 saniyede kapanıyordu. ben resimleri veritabanına kaydetme taraftarı
değilim.
kolay gelsin.