Delphi Can

Orjinalini görmek için tıklayınız: ClientDataSet image field yükleme (DataSnap)
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2 3
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.
Merhaba,
Blob alanı TBlobField tipine dönüştürmeye zorlayarak, yapabilirsiniz.
TBlobField(DatasetAdı.FieldByName('RESIM')).SaveToStream(StreamAdı);
(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;
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;
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.
(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.
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ı');
@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.
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;
@yemre,
Uses bölümüne Data.DB ekleyin.
Sayfalar: 1 2 3