Paradox_JvDBImage ve jpeg kayıt

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Paradox_JvDBImage ve jpeg kayıt

Mesaj gönderen haydarxxx »

Arkadaşlar Forumda arama yapmadan bu başlığı açmadım bunu belirterek soruma geçiyorum.

JEDi nin companettini indirdim çünkü bu konuda forumuda çok araştırdım veritabanına jpeg eklemek için herkez bunu öneriyor.

Bende veritabanıma jpeg resim eklemek istiyorum pardox veri tabanımda Resim adında OLE tanımlı bir alanım var JvDBImage DataSource yi alanımla ilişkilendirdim forumda yaptığım aramalardan bir çok kodu denedim neleri denediğimi buraya yazamıyorum jpeg ile ne gördüysem denedim :?

isteğim OpenPictureDialog la jpeg resimlerini görüp DataSource ile ilişkilendirdiğim JvDBImage almak ve table1.post; etmek bir türlü kayıt yapamadım.Lütfen bu konuda bilgisi olan arkadaş var ise JvDBImage ile ilgili tekrar bu bilgiyi paylaşabilirmi.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Ben Jedi'lar ile çalışmadım normal Delphi'nin kendi (BDE) bileşenleri ile yapmıştım bir zamanlar. Orada JPEG veya BMP farketmez, Ctrl+Insert (Ctrl+C) ve Shit+Insert (Ctrl+V) kopyala yapıştır ile ilgili componente resimleri yapıştırıyordum. Open dialoglar ile kendim açıp, LoadFromFile methodları ile de resim yükleyip POST ile DB'ye gönderiyordum.

Sorun tam anlaşılamadı bence. Örneğinizi adım adım daha net yazarsanız yanıtlayan olacaktır.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
shadowmann
Üye
Mesajlar: 508
Kayıt: 30 Oca 2004 10:49

Mesaj gönderen shadowmann »

Sorun alanı ole olarak tanımlamanız. Blob olarak tanımlayınız.

Kod: Tümünü seç

IBDataSet.Edit;
OpenPictureDialog1.InitialDir:=MEResimYolu.Text;
if OpenPictureDialog1.Execute then
JvDBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
IBDataSet.Post;
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

selam Kuri_YJ
Sorum açık zannediyorum ama tekrar bir deneyeyim :)

veritabnıma jpeg resim eklemek istiyorum herkez biliyor delphi jpeg resimleri desteklemiyor bmp den başka bir şey tanımıyor.Bmp yi jpeg gibi gösteren kodlar var ama veri tabnına yine bmp olarak ekliyor jpeg görsede buda veri tabanını şişiriyor.Jpeg resimlere yok göstermeden kaydatmak istiyorum.Kayıt kodu arıyorum

Forumda bakarsanız jpeg resmi veri tabanına kayıt için JEDİ companetti öneriliyor.Bende JEDİ var ama jpeg resmi çağrıp veri tabanına nasıl kayıt edeceğimi bilmiyorum.örneğin yaptığım bir projede kullandığım bir kod var ama bu jpeg resimleri bmp gibi yüklüyor çünkü veri tabanı resim boyutlarına göre çok şişkin

var
jpg : TJPEGImage;
bmp : TBitmap;
ico : TIcon;
yol:AnsiString;
begin
OpenDialog1.Title:='Resim Seç';
OpenDialog1.Filter:='Jpg Dosyaları|*.jpg|ico Dosyaları|*.ico';

if OpenDialog1.Execute Then
begin

yol := OpenDialog1.FileName;
//eğer jpeg resim ise
if (ExtractFileExt(yol) = '.jpg') or (ExtractFileExt(yol) = '.jpeg') then
begin
try

jpg := TJPEGImage.Create;
jpg.LoadFromFile(yol);

bmp := TBitmap.Create;
bmp.Width := jpg.Width;
bmp.Height := jpg.Height;
bmp.Canvas.Draw(0,0,jpg);

Table1.edit;
DBImage1.Picture.Bitmap := bmp;

finally
jpg.Free;
bmp.Free;
end;
end;

if ExtractFileExt(yol) = '.ico' then
begin
ico := TIcon.Create;
ico.LoadFromFile(yol);
bmp := TBitmap.Create;
bmp.Width := ico.Width;
bmp.Height := ico.Height;
bmp.Canvas.Draw(0,0,ico);
Table1.Edit;
DBImage1.Picture.Bitmap := bmp;
Table1.Post;
ico.Free;
bmp.Free;
end;
En son haydarxxx tarafından 08 Nis 2006 12:28 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

sy shadowmann
dediğiniz gibi alanı Blob bnary yaptım

IBDataSet.Edit; ıntarbase bağlantısı; satır hata verdi IBDataSet yerine table1.edit olur her halde onuda denedim bu sefer bir sonraki satır

OpenPictureDialog1.InitialDir:=MEResimYolu.Text; satırında Resim yolunu OpenPictureDialog1 kendisi otomatik açması gerekmezmi MEResimYolu.Text;
ne anlama geliyor çözemedim kısacası bunu kendime göre nasıl düzenlemeliyim
shadowmann
Üye
Mesajlar: 508
Kayıt: 30 Oca 2004 10:49

Mesaj gönderen shadowmann »

Hocam ibdataset firebird kullandığım içindi. Siz paradoxta tabii ki table.edit yapacaksınız. OpenPictureDialog1.InitialDir:=MEResimYolu.Text ben bunu open pic dialoga bir varsayılan yol vermek için kullanıyordum. İni den edite (meresimyolu) okuyordum. Yani sen orayı atla.
uses a Jpeg i eklemeyi de unutmayın.

Basitçe

Kod: Tümünü seç

Table1.Edit; 
if OpenPictureDialog1.Execute then 
JvDBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName); 
Table1.Post;
Hepsi bu. Bmp kullanmayın veritabanında resim göstermek için. Ve resmin boyutunu da kendi jvdbimage ile aynı genişlik ve yükseklikte yapın. Yani her resim 15 kb olsa 1000 tane resim olsa fazla yer tutmaz. Ama bmp olursa veritabanın şişer.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

sy shadowmann
ilginiz için önclelikle teşekkür ediyorum.

bende zaten bmp den kaçmaya çalışıyorum :)

Table1.Edit;
if OpenPictureDialog1.Execute then
JvDBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
Table1.Post;

gösterdiğim resim jpeg ama

Bitmap image not valid. hatası alıyorum.

uses de
jpeg im var
..............
ben bir soru bankası oluşturmaya çalışıyorum veri tabanı için firebird mü Paradox mu öneririsiniz.Eğer firebird ise tabloda resim alanı Paradox taki Blob firebird de neye dek geliyor.
shadowmann
Üye
Mesajlar: 508
Kayıt: 30 Oca 2004 10:49

Mesaj gönderen shadowmann »

Tabii ki firebird. Bu konuda forumda gerekli ve yeterli bilgi var.
Bmpleri önce jpg e çevirin sonra db ye gönderin.
Google gruplardan (Arama bmp+jpeg+convert+delphi) kopyala yapıştır yaptım. Belki forumda da vardır.

Kod: Tümünü seç

// BMP to JPG 
procedure TForm1.Button1Click(Sender: TObject); 
  VAR 
   JPEG  :  TJPEGImage; 
   Bitmap:  TBitmap; 
begin 
   Bitmap := TBitmap.Create; 
   TRY 
     Bitmap.LoadFromFile('Chipmonk.BMP'); 
     JPEG := TJPEGImage.Create; 
     TRY 
       JPEG.Assign(Bitmap); 
       JPEG.SaveToFile('Chipmonk.JPG'); 
       Image1.Picture.Graphic := JPEG 
     FINALLY 
       JPEG.Free 
     END 
   FINALLY 
     Bitmap.Free 
   END 
end; 


// JPG to BMP 
procedure TForm1.Button2Click(Sender: TObject); 
 VAR 
   JPEG  :  TJPEGImage; 
   Bitmap:  TBitmap; 
begin 
  JPEG := TJPEGImage.Create; 
  TRY 
    JPEG.LoadFromFile('Chipmonk.JPG'); 
    Bitmap := TBitmap.Create; 
    TRY 
      Bitmap.Assign(JPEG); 
      Bitmap.SaveToFile('Chipmonk.BMP'); 
      Image2.Picture.Graphic := Bitmap 
    FINALLY 
      Bitmap.Free 
    END 
  FINALLY 
    JPEG.Free 
  END 
end; 

Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

denedim ama yapamdım :roll:
firebird de geçtim ordada benzer sıkıntılar yaşıyorum

// Blob içeriğini yükle
if opdPictureOpen.Execute then // Resmi seçtiğimiz dialog kutusunu açar
// Seçilen JPEG dosya Jedi'in DBImage'ine bu yöntemle aktarılır.
jdiPhoto.Picture.LoadFromFile(opdPictureOpen.FileName);


denedim bitmap image is not valid. hatası alıyorum. :x
heskin35
Üye
Mesajlar: 132
Kayıt: 30 Haz 2004 09:48

Mesaj gönderen heskin35 »

Jedi kullanırken Uses bölümüne jpeg eklediniz mi? Ben böle çözmüştüm yanlış hatırlamıyor isem şahsen :roll:
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

evet var heskin35


// Blob içeriğini yükle
if opdPictureOpen.Execute then // Resmi seçtiğimiz dialog kutusunu açar
// Seçilen JPEG dosya Jedi'in DBImage'ine bu yöntemle aktarılır.
jdiPhoto.Picture.LoadFromFile(opdPictureOpen.FileName);

gerçi ben bunun yerine kodu böyle kullandım (kodu forumdan almıştım)
çünkü jdiPhoto bulamadım sekmeler içinde

if OpenPictureDialog1.Execute then // Resmi seçtiğimiz dialog kutusunu açar
// Seçilen JPEG dosya Jedi'in DBImage'ine bu yöntemle aktarılır.
JvDBImage1.Picture.LoadFromFile( OpenPictureDialog1.FileName);
Kullanıcı avatarı
HBV
Üye
Mesajlar: 114
Kayıt: 30 Haz 2005 09:28

Mesaj gönderen HBV »

Slm. Ben Jpeg'i Böyle Kaydediyorum,hiç Problem yaşamıyorum.
Uses'e "jpeg;" ekle

Kod: Tümünü seç

 var
 yol:AnsiString;
begin
  OpenPictureDialog1.Title:='Resim Seç';
  OpenPictureDialog1.Filter:='JPEG Dosyalari|*.jpg|ico Dosyalari|*.ico|Bmp Dosyalari|*.bmp';
  if OpenPictureDialog1.Execute Then
    begin
     yol:=OpenPictureDialog1.FileName;
     IBDataSet1.Edit;//değişme moduna al
     JvDBImage1.Picture.LoadFromFile(yol);
  end;
end;
Kaydetmek için de Bir Button'a;

Kod: Tümünü seç

var
 deg:integer;
begin
 deg:=Application.MessageBox('KAYDETMEK iSTiYORMUSUNUZ?','KAYDET',MB_YesNO);
 if deg=mrYes Then
   begin
  if IBDataSet1.State in [dsInsert, dsEdit] then
    IBDataSet1.Post;
    ShowMessage('KART KAYDEDiLDi');
   end
 else
   ShowMessage('KAYIT iSLEMi iPTAL');
end;
Veritabanına Tüm Bilgilerle beraber bu şekilde kaydediyorum.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

sy HBV
yaptığım işler sıra ile

*table1.Append;
*procedure TForm1.DBImage1Click(Sender: TObject);
var
yol:AnsiString;
begin
OpenPictureDialog1.Title:='Resim Seç';
OpenPictureDialog1.Filter:='JPEG Dosyalari|*.jpg|ico Dosyalari|*.ico|Bmp Dosyalari|*.bmp';
if OpenPictureDialog1.Execute Then
begin
yol:=OpenPictureDialog1.FileName;
table1.Edit;//değişme moduna al
JvDBImage1.Picture.LoadFromFile(yol);
end;
end;

*procedure TForm1.Button2Click(Sender: TObject);
var
deg:integer;
begin
deg:=Application.MessageBox('KAYDETMEK iSTiYORMUSUNUZ?','KAYDET',MB_YesNO);
if deg=mrYes Then
begin
if table1.State in [dsInsert, dsEdit] then
table1.Post;
ShowMessage('KART KAYDEDiLDi');
end
else
ShowMessage('KAYIT iSLEMi iPTAL');
end;

diyorum Bitmap image is not valid.hatası veriyor.

uses te jpeg tanımlı tablodaki resim alanım Blob
Kullanıcı avatarı
HBV
Üye
Mesajlar: 114
Kayıt: 30 Haz 2005 09:28

Mesaj gönderen HBV »

Slm.Veritabanına Daha Önce kaydettiğiniz Resimleri sıfırlayın veya silin sıfırdan kaydedin düzelecektir.Çünkü daha önce DBImage'ile(?) Bmp kayıt yaptığınız için JvDBImage tanımlamıyor..bendede aynı hata vardı tüm resimleri sıfırlayıp yeniden kayıt yaptım düzeldi.
(Paradox,Resim alanı için "OLE" seçili olacak)

*table1.Append;
*procedure TForm1.DBImage1Click(Sender: TObject);//Burada bir hata var ..Niye DBImage? ..>>>"JvDBImage1Click" Olması lazım,Resimlerinizi daha Önce DBImageyle kaydetmişsiniz.......



{Tavsiyem Firebird Kullan}
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

HBV.
tablodan resim alanlarını kaldırdım yeniden ole yaptım(RESİMLERİ TEMİZLEDİM).Fakat

var
yol:AnsiString;
begin
OpenPictureDialog1.Title:='Resim Seç';
OpenPictureDialog1.Filter:='JPEG Dosyalari|*.jpg|ico Dosyalari|*.ico|Bmp Dosyalari|*.bmp';
if OpenPictureDialog1.Execute Then
begin
yol:=OpenPictureDialog1.FileName;
table1.Edit;//değişme moduna al
JvDBImage1.Picture.LoadFromFile(yol);
end;

ile resmi alıyorum jpeg resim geliyor

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
table1.Post;
end;

yaptığımda alpha alanlarını kaydediyor ama resim alanını boş gösteriyor bir hata vermiyor ama resmi de kaydetmiyor.Kayıt gezintisi yaptığımda resim alanları boş çıkıyor.

yine sizin verdiğiniz kaydet butonu ile işlem yaptığımda

procedure TForm1.Button2Click(Sender: TObject);
var
deg:integer;
begin
deg:=Application.MessageBox('KAYDETMEK iSTiYORMUSUNUZ?','KAYDET',MB_YesNO);
if deg=mrYes Then
begin
if table1.State in [dsInsert, dsEdit] then
table1.Post;

ShowMessage('KART KAYDEDiLDi');
end
else
ShowMessage('KAYIT iSLEMi iPTAL');
end;

Bitmap image is not valid.hatası alıyorum va hatta projeyi kitliyor.Tavsiyenize çoktan uydum bir koldanda firebird de deneyecceğim ama firebird de çok yeniyim.Forumdan araştırma ve inceleme aşamasındayım.umarım orda becerbilirim. :(
Cevapla