Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
ClientDataSet image field yükleme (DataSnap)
#1
Merhaba

Android de datasnap ile veri çekiyorum. Resim çekme zorunluluğum oluşu.
Clientdataset fieldbyname('RESIM').savetostream  özlliği bulunmyor.
Clientdataset nesnesindeki resmi image nesnesine alamadım.

Tavsiyeniz var mı? İyi Çalışmalar.
Cevapla
#2
Merhaba,
Blob alanı TBlobField tipine dönüştürmeye zorlayarak, yapabilirsiniz.
TBlobField(DatasetAdı.FieldByName('RESIM')).SaveToStream(StreamAdı);
DelphiCan'dır!
Cevapla
#3
(20-07-2019, Saat: 13:25)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
Blob alanı TBlobField tipine dönüştürmeye zorlayarak, yapabilirsiniz.
TBlobField(DatasetAdı.FieldByName('RESIM')).SaveToStream(StreamAdı);

Merhaba

Açıkcası yardımınız olmasa çözümü bulamazdım. Teşekkür ederim.
Şu anda hiçbir hata vermemesine rağmen listview de image göremiyorum.

aldığım image önce imagelist e alıp listview item a image index numarsı veriyorum.
list e text olarak liste yüklenirken imagler gelmiyor.
Listview item apperance>item özelliği imagelistitem olarak ayarlı ama imagelerı gösteremiyorum.


procedure Tfrmana.Grup_List_Doldur;
      var
vItem:TListViewItem;
ms:TmemoryStream;
i:integer;
begin
i:=0;
ms:=TmemoryStream.Create;

try
try
  datam.SQLConUrun.Connected:=true;
  with DataM.cdsUrun do
  begin
    active:=false;
    CommandText:='SELECT ID,ADI,RESIM FROM GRUP ORDER BY ADI';
    Active:=true;
    while not eof do
    begin
      vItem:=ListView1.Items.Add;
      vItem.Text:=FieldByName('ADI').AsString;
      r:=imgGrup.Source.Add  ;
     // ShowMessage('r:=imgGrup.Source.Add  ;');
      TBlobField(DataM.cdsUrun.FieldByName('RESIM')).SaveToStream(ms);
     // ShowMessage('blobfield');
      //FieldByName('RESIM').Assign(ms);
      ms.Position:=0;

      r.MultiResBitmap.LoadItemFromStream(ms,i+1);
     // ShowMessage('r.MultiResBitmap.LoadFromStream(ms);');
      vItem.ImageIndex:=i;

      i:=i+1;
      next;
    end;
  end;

except on E: Exception do
 ShowMessage(e.Message);
end;
finally
  ms.Free;
end;

end;
Cevapla
#4
Merhaba,
ListViewItem'ın icon özelliğine stream'dan doğrudan bir veri atayabilirsiniz.
Örneğin, 
vItem.Icon.LoadFromStream(ms);
Kodunuzun ilgili kısmı en sade şekilde aşağıdaki gibi olmalıdır.
  while not eof do
  begin
    vItem := ListView1.Items.Add;
    vItem.Text := FieldByName('ADI').AsString;
    TBlobField(datam.cdsUrun.FieldByName('RESIM')).SaveToStream(ms);
    vItem.Icon.LoadFromStream(ms);
    next;
  end;
DelphiCan'dır!
Cevapla
#5
Tesekkurler, paylasim icin , benimde mobilden cektigim resmi db ye kayit ettirmem gerekiyor, ayni sekilde yapabilirmiyim. Vede ustad, firedac ile dogrudan dbye baglanamiyorum androitten. hata verip duruyor. bunu illaki bir servis uzerindenmi yapmam gerekiyor.
Cevapla
#6
(21-08-2020, Saat: 10:48)TheEAK Adlı Kullanıcıdan Alıntı: Tesekkurler, paylasim icin , benimde mobilden cektigim resmi db ye kayit ettirmem gerekiyor, ayni sekilde yapabilirmiyim.  Vede ustad, firedac ile dogrudan dbye baglanamiyorum androitten. hata verip duruyor. bunu illaki bir servis uzerindenmi yapmam gerekiyor.

Rica ederim.
DB'ye doğrudan bağlanıyorsanız, aynı yöntemle (SaveToStream, LoadFromStream) TBlobField'ı set ederek resmi veri tabanına kaydedebilirsiniz.
Firedac bileşen setleri uzak bağlantı için yalnızca desktop uygulamalarına destek vermektedir. Yani bu bileşen seti ile Android ve iOS uygulamaları uzak veri tabanlarına bağlantı sağlayamazsınız. Fakat lokal (cihaz üzerindeki) SQLite ve IBLite veri tabanlarına bağlanabilirsiniz.
Tavsiye etmemekle birlikte, mobil uygulama ile doğrudan uzak db bağlantıları için Devart Unidac bileşen setini kullanabilirsiniz.
DelphiCan'dır!
Cevapla
#7
Bu fonksiyon database'e kaydetmek için işini görecektir.

procedure SavetoFireDACBlob(cds : Tclientdataset; img : Timage; fie : string);
var
BlobStream: tStream;
Surf: TBitmapSurface;
begin
if Img <> nil then
begin
  Surf := TBitmapSurface.Create;
  Surf.Assign(img.Bitmap);
  BlobStream := TMemoryStream.Create;
  if not TBitmapCodecManager.SaveToStream(BlobStream, Surf, '.jpg') then
    raise EBitmapSavingFailed.Create('No');
  BlobStream.Position := 0;
  cds.ParamByName(fie).LoadFromStream(BlobStream, ftBlob);
  Surf.Free;
end;
end;


Kullanımı:
 SavetoFireDACBlob(qutablo,image1,'tablodakiresimalanıadı');
Cevapla
#8
@Jakarta2,
Form editörümüz üzerinde kod biçimlendirme amacı ile kullandığımız 2 adet buton bulunmaktadır. Delphi Logolu olan (Delphi Kod Ekle) buton ile Delphi kodu, Süslü Parantez simgeli buton (Kod Biçimlendirme) ile de diğer dillere ait (SQL'de dahil) kodlar eklenerek (aşağıdaki ekran görüntüsünde işaretlenmişir), kod biçimlendirme yapılmaktadır. 
Bu kapsamda;

kodbicim.jpg

Doğru kod tag'larını kullanarak bize yardımcı olursanız memnun oluruz.
Aksi durumda DelphiCan Forum Kurallarında belirtilen yaptırımlar uygulanacaktır.
İlgi ve anlayışınız için şimdiden teşekkür eder, iyi çalışmalar dileriz.

Önemli Not: Herhangi bir yerden kopyaladığınız metni, DelphiCan metin editörüne yapıştırmadan önce, metin editörünün araç çubuğunda bulunan "Kaynağı Görüntüle" butonuna tıklayın. Daha sonra kopyaladığınız metni yapıştırın. Böylece harici bir kaynaktan aldığınız metin biçimlendirmesi yok sayılacaktır.
Delphi Can'dır!
WWW
Cevapla
#9
Android uygulaması yapıyorum Resim ImageControl1'e resim yükleyebiliyorum onu mysql veritabanıma aktarmaya çalışıyorum bu kodu yazdım yalnız ftblob undeclared identifier hatası veriyor yanlış mı yazıyorum daha sade bir kod mevcut mudur ?






procedure TForm2.Button2Click(Sender: TObject);
var
 BlobStream: tStream;
 Surf: TBitmapSurface;
begin
      if ImageControl1 <> nil then
 begin
   Surf := TBitmapSurface.Create;
   Surf.Assign(ImageControl1.Bitmap);
   BlobStream := TMemoryStream.Create;
   if not TBitmapCodecManager.SaveToStream(BlobStream, Surf, '.jpg') then
     raise EBitmapSavingFailed.Create('No');
   BlobStream.Position := 0;
   Form3.UniQuery1.ParamByName('pic').LoadFromStream(BlobStream,ftblob);
   Form3.UniQuery1.ExecSQL;
   Surf.Free;
 end;
     Form3.Show;
end;
Cevapla
#10
@yemre,
Uses bölümüne Data.DB ekleyin.
Begin : = end / 2;
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Birden Fazla İmage ı Whatsapp ile paylaşmak barissagir 1 632 05-06-2025, Saat: 03:24
Son Yorum: barissagir
  ClientDataSet Field Not found hatası. mcuyan 0 636 07-06-2024, Saat: 19:57
Son Yorum: mcuyan
  Google play Uygulama yükleme hatası [Çözüldü] codder71 3 1.364 23-02-2024, Saat: 22:42
Son Yorum: codder71
  Cihaza ipa dosyası yükleme emrahozten 13 7.053 27-10-2023, Saat: 17:13
Son Yorum: emrahozten
  FMX Listview Image Sorunu [ÇÖZÜLDÜ] Mesut 1 928 20-10-2023, Saat: 15:03
Son Yorum: Mesut



Konuyu Okuyanlar: 1 Ziyaretçi