var
yol:AnsiString;
begin
OpenPictureDialog1.Title:='Resim Seç';
OpenPictureDialog1.Filter:='Bmp Dosyaları|*.bmp|ico Dosyaları|*.ico';
if OpenPictureDialog1.Execute Then
begin
yol:=OpenPictureDialog1.FileName;
IBTable1.Edit;//değişme moduna al
DBImage1.Picture.LoadFromFile(yol);
end;
Yukarıdaki Kod la IB Veritabanına kolayca resim ekliyorum....Ama Data Çok yer kaplıyor...
Bunun Başka yolu Veya Kod 'u yokmu!!!
Yer kaplamasının açıklamasını şu şekilde yapayım hocam.
Öncelikle kodlar ile ilgili bir problem yok. Nasıl bir kod ile alırsan al boyut değişmez. Bu tamamen resimin boyutu ile alakalı.
Tabi kayıt esnasında değişik sıkıştırma yöntemleri de var ise bilemiyorum. Birde sanırım veritabanını şişirenler bmp dosyaları onların yerine jpg dosyaları kullanman daha az yer kaplamasını sağlar.
En son heskin35 tarafından 12 May 2005 02:01 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Hocam nekadar dogrudur yada guvenlidir bilmem ama ben bu konuyla ilgili soyle bi cozum buldum veritabanına resimleri eklemiyorum sadece resmin yolunu kaydediyorum ve o yola gore timage nesnesine resmi yukluyorum sadece tek yapılması gereken resimlerin ismini ve yerinin degismemesi bilmiyorum sizcede uygun mu bu yontem.
Dtgb ...Kardeşim Söylediğin Doğru Resimleri hedefleyip veritabanına resim ekleniyor...Fakat Biz Ağ bilgisayarlarında ayrı ayrı dosyalar tuttuğumuz için problem oluyor Örnek; 1 nolu Resim 5 Nolu terminaldeyse 3. Nolu resim 10 Nolu terminalde kayıtlı oluyor..Yapılan düzeltmelere görede yerleri değişebiliyor..Yani Türkçesi Her Terminalin Ayrı ayrı çalıştığı resimler var ..Arşivleride farklı...Bu yüzden Problem oluyor...Veritabanına kaydetmek daha mantıklı Çünkü Tüm Terminaller Veritabanındaki aynı resmi aynı anda görebiliyor.....Bir 600 Kb. Bmp Resmi Yine örnek; Tif formatında 20 kb. Jpeg Formatında 50 Kb. gif Formatında 60 kb.(Ortalama) yer kaplıyor.. Bu sebeble 100 Kayıtlık veritabanında Bmp formatı aşağı yukarı (Resmin Büyüklüğüne bağlı) 30-40 Mb. Yer kaplıyor..Yani 1000 Kayıta ulaşınca 400 Mb yapar ..Benim korkum kayıt sayısı artıkça Veritabanında ne tür bir problem oluşacak,Yavaşlama,Kitlenme olurmu Benim için bu Önemli,Yedekleme ise önemli değil Dvd Writer'le bu sorun çözülür.. Birde...Eğer Bir DBJpeg ve DBTiff Component'i Bulursam veya Veritabanına kaydedersem Kodlarını,Bu sitede 10 Gün Hayrına Dağıtacağım...
Evt ag ortamında haklısın
belki soyle cozum olabilir tum resimleri tek bir serverda toplaman ve terminallerin erisebilecegi sabit bir parth vermek. ama resimler uzerinde degisiklik yapıyorsan onda belki problem olabilir.
bende dtgb arkadaşımızın dediğine ufak bir eklenti yaparak farklı bir fikir vermek istiyorum.
Madem her kullanıcıda resimler farklı isimler altında olabiliyor.ozaman veritabanına kaydederken resim yoluyla birlikte kullanıcı isminide kaydettirin,daha sonra kişi çağırıldığında öncelikle dosyadaki kullanıcı adına baksın ve o kullanıcının resimlerinin olduğu klasörden resimi göstersin.
Sltokar Kardeşim Farklı bir fikir vermiş Teşekkürler Onun Üzerinde deneme yapacağım..Fakat Söyle bir durum yine oluşacak Çalıştığımız Resimler Grafik türü resimler bayağı ağır,Bazen İki kişi çalışmak zorunda oluyoruz..Ozaman İki Kullanıcı tanımlamak gerekir..dtgb Kardeşimin dediğide mantıklı fakat Resimleri Hangi kullanıcı ve Kullanıcıların yaptığı Muhakkak bilinmesi lazım....Çünkü Bu konuda Tarih sorgulamasıda yapılıyor..
Network ortamında eğer Resim directory'sini herkesin görebileceği bir paylaşılmış Directory'e koyarsanız, kullanıcılar (kendi terminallerinde durmadığı için) herkesin görebileceği bir ortamda duran Resimleri görebileceği için paylaşım sorunu yaşamazsınız. Herkes herkesin resmini görebilir. Eğe paylaşılmış directory'e directory açma yetkisi vs. verirseniz insanlar kendi yaptığı resimleri de klasörler altında düzenleyebilirler.
Ayrıca, eğer illa ki DB'de tutacağım diyorsanız, JPG veya BMP olarak resimleri (Doğrudan resim olarak tutmaktansa) onları BLOB olarak yani, bir stream olarak kaydederseniz. Yani dosyayı oraya kaydederseniz ve lazım olduğunda oradan dosyayı söküp, diske yazıp sonra diskten okutarak yaparsanız DB'deki yer kaybı minimize olur. 60 K'lık JPEG'e 600 K yer ayıtrmanıza gerek kalmaz.
Bu yöntem diğer tüm dosyalar için uygulanabilir. Örneğin bir Word Belgesini DB'de tutmak isterseniz, o dosyayı bir Binary File olarak açıp bir TMemoryStream'e alıp sonra DB'ye yine TMemoryStream olarak yazarsınız, gerektiğinde de oradan aynen alıp diske yazıp diskten açarsanız her türlü dosyayı DB'de saklama imkanı elde etmiş olursunuz.