Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
ClientDataSet image field yükleme (DataSnap)
#21
(25-01-2023, Saat: 09:56)yemre Adlı Kullanıcıdan Alıntı:
(25-01-2023, Saat: 09:25)tekrar gözden geçirdim şu an sorunum düzeldi . hi_selamlar Adlı Kullanıcıdan Alıntı:
procedure TForm3.Button2Click(Sender: TObject);
   var
 siras:Integer;
 i,n:Integer;
 msFoto: TMemoryStream;

begin
  Form3.UniQuery1.Close;
  Form3.UniQuery1.SQL.Clear;
  Form3.UniQuery1.SQL.Add('select * from  data_ilan ');
  Form3.UniQuery1.Open;
  n:=Form3.UniQuery1.RecordCount;

for i := 0 to n-1 do
  begin
   siras:= Form3.UniQuery1sira.Value;
   Form3.UniQuery1.Next;
if siras= 1 then
  begin
       Memo1.Lines.Clear;
       Memo1.Lines.Add(Form3.UniQuery1metin.Value);
       msFoto := TMemoryStream.Create;
        try
       TBlobField(UniQuery1.FieldByName('pic')).SaveToStream(msFoto);
       msFoto.Position := 0;
       Image1.Bitmap.LoadFromStream(msFoto);
       finally
         msFoto.Free;
       end;
  end
else if siras=2 then
  begin
       Memo2.Lines.Clear;
       Memo2.Lines.Add(Form3.UniQuery1metin.Value);
       msFoto := TMemoryStream.Create;
        try
       TBlobField(UniQuery1.FieldByName('pic')).SaveToStream(msFoto);
       msFoto.Position := 0;
       Image2.Bitmap.LoadFromStream(msFoto);
       finally
         msFoto.Free;
       end;
  end
  else if siras=3 then
  begin
       Memo3.Lines.Clear;
       Memo3.Lines.Add(Form3.UniQuery1metin.Value);
       msFoto := TMemoryStream.Create;
        try
       TBlobField(UniQuery1.FieldByName('pic')).SaveToStream(msFoto);
       msFoto.Position := 0;
       Image3.Bitmap.LoadFromStream(msFoto);
       finally
         msFoto.Free;
       end;
  end
  else if siras=4 then
  begin
       Memo4.Lines.Clear;
       Memo4.Lines.Add(Form3.UniQuery1metin.Value);
       msFoto := TMemoryStream.Create;
        try
       TBlobField(UniQuery1.FieldByName('pic')).SaveToStream(msFoto);
       msFoto.Position := 0;
       Image4.Bitmap.LoadFromStream(msFoto);
       finally
         msFoto.Free;
       end;
  end
  else if siras=5 then
  begin
       Memo5.Lines.Clear;
       Memo5.Lines.Add(Form3.UniQuery1metin.Value);
       msFoto := TMemoryStream.Create;
        try
       TBlobField(UniQuery1.FieldByName('pic')).SaveToStream(msFoto);
       msFoto.Position := 0;
       Image5.Bitmap.LoadFromStream(msFoto);
       finally
         msFoto.Free;
       end;
  end
  else if siras=6 then
  begin
       Memo6.Lines.Clear;
       Memo6.Lines.Add(Form3.UniQuery1metin.Value);
       msFoto := TMemoryStream.Create;
        try
       TBlobField(UniQuery1.FieldByName('pic')).SaveToStream(msFoto);
       msFoto.Position := 0;
       Image6.Bitmap.LoadFromStream(msFoto);
       finally
         msFoto.Free;
       end;
  end
end;
Merhabalar,

Yukarı da paylaşılan link'i tam olarak incelemenizi öneririm.

@RAD Coder > https://www.delphican.com/showthread.php...1#pid51741

msFoto.Position := 0;
nasıl kullanıldığını,

yine aynı şekilde
msFoto.Free;
Hangi aşamadan sonra kullanıldığına dikkat edin.

Kolay gelsin.

Merhabalar,

Belki teşekkür etmek istersiniz.
   
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#22
(24-01-2023, Saat: 18:14)yemre Adlı Kullanıcıdan Alıntı: sıraya göre image yüklüyorum siras 25 olduğu yerde bu hatayı veriyor 


procedure TForm3.Button2Click(Sender: TObject);
   var
 siras:Integer;
 i,n:Integer;
 msFoto: TMemoryStream;

begin
  Form3.UniQuery1.Close;
  Form3.UniQuery1.SQL.Clear;
  Form3.UniQuery1.SQL.Add('select * from  data_ilan ');
  Form3.UniQuery1.Open;
  n:=Form3.UniQuery1.RecordCount;
  msFoto := TMemoryStream.Create;
 // try
  //TBlobField(UniQuery1.FieldByName('pic')).SaveToStream(msFoto);
  //msFoto.Position := 0;
   //finally
  //msFoto.Free;
  //end;


for i := 0 to n-1 do
  begin
  siras:= Form3.UniQuery1sira.Value;
  Form3.UniQuery1.Next;
  TBlobField(UniQuery1.FieldByName('pic')).SaveToStream(msFoto);
  //msFoto.Position := 0;
   msFoto.Free;
if siras= 1 then
  begin
       Memo1.Lines.Clear;
       Memo1.Lines.Add(Form3.UniQuery1metin.Value);
       Image1.MultiResBitmap.LoadFromStream(msFoto);
  end
else if siras=2 then
  begin
       Memo2.Lines.Clear;
       Memo2.Lines.Add(Form3.UniQuery1metin.Value);
       Image2.Bitmap.LoadFromStream(msFoto);
  end
  else if siras=3 then
  begin
       Memo3.Lines.Clear;
       Memo3.Lines.Add(Form3.UniQuery1metin.Value);
       Image3.Bitmap.LoadFromStream(msFoto);
  end
  else if siras=4 then
  begin
       Memo4.Lines.Clear;
       Memo4.Lines.Add(Form3.UniQuery1metin.Value);
       Image4.Bitmap.LoadFromStream(msFoto);
  end
  else if siras=5 then
  begin
       Memo5.Lines.Clear;
       Memo5.Lines.Add(Form3.UniQuery1metin.Value);
       Image5.Bitmap.LoadFromStream(msFoto);
  end
  else if siras=25 then
  begin
       Memo6.Lines.Clear;
       Memo6.Lines.Add(Form3.UniQuery1metin.Value);
       Image6.MultiResBitmap.LoadFromStream(msFoto);
  end
end;

Kodunuzu analiz ettiğimde gördüğüm mantıksal, mental ve algoritmik sorunları bildirmeden konuyu kapatmak olmaz, eksik kalır. 

1- Form3'te kodları yazdığınız için bileşenlerin başına "form3." koymanıza gerek yok.
2- UniQuery1sira yerine, UniQuery1.FieldByName('sira') kullanın. Çünkü UniQuery1 Field Editor'ünden bu veri tipini sildiğinizde veya yeni bir alan eklediğinizde kontrolü ve güncellenmesi güçtür.
3- Query filed'larında kullandığınız ".Value" yerine, doğrudan tip dönüşümünü yazın.
    Örneğin: UniQuery1sira.value yerine, UniQuery1.FieldByName('sira').AsInteger gibi
    Çünkü Value variant tiptir. Çalışma anında atama yapılacağı zaman öncelikle atama yapılacak veri tipine uygun veri olup olmadığını kontrol edecek, daha sonra bu veri tipini bulacak ve atamayı ondan sonra gerçekleştirecektir. Doğrudan tip belirtirsek, çalışma anında doğrudan veri uyuşmazlığı kontrol edilir ve atama yapılır. Yani dah hızlı bir atama gerçekleşmiş olur.  
4- if - else - else if yerine, case kullanın. Çünkü ilerleyen süreçte "siras" tipinin değerleri değişecek ve artacak gibi görünüyor. Bu durumda if kontrolleri oldukça kompleks hale gelecektir.
5- Bazı kod satırlarınız tekrarlı olduğu için bunları da kontrolün (if'leri) dışına çıkarmak daha mantıklı olacaktır.

Özetle aşağıdaki yapıda kodlamanız daha sağlıklı olacktır. Bir sonraki aşaması (procedurel yazım) var, faklat ona geçmeniz için erken olduğunu düşünüyorum.

var
 siras: Integer;
 i, n: Integer;
 msFoto: TMemoryStream;
begin
 UniQuery1.Close;
 UniQuery1.SQL.Clear;
 UniQuery1.SQL.Add('select * from  data_ilan ');
 UniQuery1.Open;
 n := UniQuery1.RecordCount;
 Memo2.Lines.Clear;
 msFoto := TMemoryStream.Create;
 try
   for i := 0 to n - 1 do
   begin
     siras := UniQuery1.FieldByName('sira').AsInteger;
     UniQuery1.Next;
     msFoto := Nil;
     TBlobField(UniQuery1.FieldByName('pic')).SaveToStream(msFoto);
     msFoto.Position := 0;
     Memo2.Lines.Add(UniQuery1.FieldByName('metin').AsString);
     case siras of
       1:
         begin
           Image1.MultiResBitmap.LoadFromStream(msFoto);
         end;
       2:
         begin
           Image2.Bitmap.LoadFromStream(msFoto);
         end;
       3:
         begin
           Image2.Bitmap.LoadFromStream(msFoto);
         end;
       4:
         begin
           Image2.Bitmap.LoadFromStream(msFoto);
         end;
       5:
         begin
           Image2.Bitmap.LoadFromStream(msFoto);
         end;
       25:
         begin
           Image2.Bitmap.LoadFromStream(msFoto);
         end;
     end;
   end;
 finally
   msFoto.Free;
 end;
end;
Begin : = end / 2;
Cevapla
#23
üstadım çok iyi anlattın yalnız yazdığınız kodu aynen kopyaladım uygulama içinde butona basınca alttaki resimde görülen hatayı veriyor


Ek Dosyalar Resimler
   
Cevapla
#24
Şöyle deneyin.
var
  siras: Integer;
 i, n: Integer;
 msFoto: TMemoryStream;
begin
 UniQuery1.Close;
 UniQuery1.SQL.Clear;
 UniQuery1.SQL.Add('select * from  data_ilan ');
 UniQuery1.Open;
 n := UniQuery1.RecordCount;
 Memo2.Lines.Clear;
 for i := 0 to n - 1 do
 begin
   msFoto := TMemoryStream.Create;
   try
     siras := UniQuery1.FieldByName('sira').AsInteger;
     UniQuery1.Next;
     TBlobField(UniQuery1.FieldByName('pic')).SaveToStream(msFoto);
     msFoto.Position := 0;
     Memo2.Lines.Add(UniQuery1.FieldByName('metin').AsString);
     case siras of
       1:
         begin
           Image1.MultiResBitmap.LoadFromStream(msFoto);
         end;
       2:
         begin
           Image2.Bitmap.LoadFromStream(msFoto);
         end;
       3:
         begin
           Image2.Bitmap.LoadFromStream(msFoto);
         end;
       4:
         begin
           Image2.Bitmap.LoadFromStream(msFoto);
         end;
       5:
         begin
           Image2.Bitmap.LoadFromStream(msFoto);
         end;
       25:
         begin
           Image2.Bitmap.LoadFromStream(msFoto);
         end;
     end;
   finally
     msFoto.Free;
   end;
 end;
end;
Begin : = end / 2;
Cevapla
#25
(25-01-2023, Saat: 13:48)yemre Adlı Kullanıcıdan Alıntı: hata devam ediyor hocam

UniQuery1.Close;
Satırına tıklayın F5 tuşuna basın.
Kod editörünün bilgi çubuğunda (Gutter) kırmızı bir işaret göreceksiniz.
Sonrasında F9 ile uygulamayı çalıştırın. 
Button3'e tıklayın.
Uygulama sizin kesme işareti bıraktığınız yerde duracak ve sizin yönlendirmenizi bekleyecek.
Bu durumdayken F8 tuşuna basarak ilk satırı yorumlayarak geçmesini sağlayın.
Diğer satırlar için de bunu yapın.
Hangi satırda bu hatanın geldiğini yakalamış olacaksınız. 
O satırı bildirin, birlikte çözüm yolu bulalım.
Begin : = end / 2;
Cevapla
#26
procedure TForm3.Button2Click(Sender: TObject);
        var
siras: Integer;
i, n: Integer;
msFoto: TMemoryStream;
begin
UniQuery1.Close;
UniQuery1.SQL.Clear;
UniQuery1.SQL.Add('select * from  data_ilan ');
UniQuery1.Open;
n := UniQuery1.RecordCount;

   for i := 0 to n - 1 do
   begin
   //ShowMessage('0');
   msFoto := TMemoryStream.Create;
   try
    //ShowMessage('1');
    siras := UniQuery1.FieldByName('sira').AsInteger;
    UniQuery1.Next;
    TBlobField(UniQuery1.FieldByName('pic')).SaveToStream(msFoto);
    msFoto.Position := 0;
    //ShowMessage('2');
    case siras of
      1:
        begin
        ShowMessage('3');
          Memo1.Lines.Clear;
          Memo1.Lines.Add(UniQuery1.FieldByName('metin').AsString);
          Image1.Bitmap.LoadFromStream(msFoto);
        end;
      2:
        begin
          Memo2.Lines.Clear;
          Memo2.Lines.Add(UniQuery1.FieldByName('metin').AsString);
          Image2.Bitmap.LoadFromStream(msFoto);
        end;
      3:
        begin
          Memo3.Lines.Clear;
          Memo3.Lines.Add(UniQuery1.FieldByName('metin').AsString);
          Image3.Bitmap.LoadFromStream(msFoto);
        end;
      4:
        begin
          Memo4.Lines.Clear;
          Memo4.Lines.Add(UniQuery1.FieldByName('metin').AsString);
          Image4.Bitmap.LoadFromStream(msFoto);
        end;
      5:
        begin
          Memo6.Lines.Clear;
          Memo6.Lines.Add(UniQuery1.FieldByName('metin').AsString);
          Image6.Bitmap.LoadFromStream(msFoto);
        end;
      6:
        begin
          Memo5.Lines.Clear;
          Memo5.Lines.Add(UniQuery1.FieldByName('metin').AsString);
          Image5.Bitmap.LoadFromStream(msFoto);
        end;
    end;
   finally
  msFoto.Free;
  end;
end;
end;

üstadım kusura bakmayın benim hatam msFoto := Nil; bu satırı silmemişim şuan resimler yüklendi ama veritabanımdaki sıraya göre yüklenmiyor karışık yüklüyor.Benim istediğim siras 1 ise memo1 e ve ımage1 e veritabanındaki sira 1 olan yerdeki resim ve yazının gelmesi
Cevapla
#27
(25-01-2023, Saat: 14:02)yemre Adlı Kullanıcıdan Alıntı:
procedure TForm3.Button2Click(Sender: TObject);
        var
siras: Integer;
i, n: Integer;
msFoto: TMemoryStream;
begin
UniQuery1.Close;
UniQuery1.SQL.Clear;
UniQuery1.SQL.Add('select * from  data_ilan ');
UniQuery1.Open;
n := UniQuery1.RecordCount;

   for i := 0 to n - 1 do
   begin
   //ShowMessage('0');
   msFoto := TMemoryStream.Create;
   try
    //ShowMessage('1');
    siras := UniQuery1.FieldByName('sira').AsInteger;
    UniQuery1.Next;
    TBlobField(UniQuery1.FieldByName('pic')).SaveToStream(msFoto);
    msFoto.Position := 0;
    //ShowMessage('2');
    case siras of
      1:
        begin
        ShowMessage('3');
          Memo1.Lines.Clear;
          Memo1.Lines.Add(UniQuery1.FieldByName('metin').AsString);
          Image1.Bitmap.LoadFromStream(msFoto);
        end;
      2:
        begin
          Memo2.Lines.Clear;
          Memo2.Lines.Add(UniQuery1.FieldByName('metin').AsString);
          Image2.Bitmap.LoadFromStream(msFoto);
        end;
      3:
        begin
          Memo3.Lines.Clear;
          Memo3.Lines.Add(UniQuery1.FieldByName('metin').AsString);
          Image3.Bitmap.LoadFromStream(msFoto);
        end;
      4:
        begin
          Memo4.Lines.Clear;
          Memo4.Lines.Add(UniQuery1.FieldByName('metin').AsString);
          Image4.Bitmap.LoadFromStream(msFoto);
        end;
      5:
        begin
          Memo6.Lines.Clear;
          Memo6.Lines.Add(UniQuery1.FieldByName('metin').AsString);
          Image6.Bitmap.LoadFromStream(msFoto);
        end;
      6:
        begin
          Memo5.Lines.Clear;
          Memo5.Lines.Add(UniQuery1.FieldByName('metin').AsString);
          Image5.Bitmap.LoadFromStream(msFoto);
        end;
    end;
   finally
  msFoto.Free;
  end;
end;
end;

üstadım kusura bakmayın benim hatam msFoto := Nil; bu satırı silmemişim şuan resimler yüklendi ama veritabanımdaki sıraya göre yüklenmiyor karışık yüklüyor.Benim istediğim siras 1 ise memo1 e ve ımage1 e veritabanındaki sira 1 olan yerdeki resim ve yazının gelmesi

Merhabalar,


UniQuery1.First;
While not UniQuery1.EOF do
begin
    try
        ....
        ....
        ....
        ....
    finally
        msFoto.Free;
    end;
       
    UniQuery1.Next;
end;


Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#28
(25-01-2023, Saat: 14:02)yemre Adlı Kullanıcıdan Alıntı:
procedure TForm3.Button2Click(Sender: TObject);
        var
siras: Integer;
i, n: Integer;
msFoto: TMemoryStream;
begin
UniQuery1.Close;
UniQuery1.SQL.Clear;
UniQuery1.SQL.Add('select * from  data_ilan ');
UniQuery1.Open;
n := UniQuery1.RecordCount;

   for i := 0 to n - 1 do
   begin
   //ShowMessage('0');
   msFoto := TMemoryStream.Create;
   try
    //ShowMessage('1');
    siras := UniQuery1.FieldByName('sira').AsInteger;
    UniQuery1.Next;
    TBlobField(UniQuery1.FieldByName('pic')).SaveToStream(msFoto);
    msFoto.Position := 0;
    //ShowMessage('2');
    case siras of
      1:
        begin
        ShowMessage('3');
          Memo1.Lines.Clear;
          Memo1.Lines.Add(UniQuery1.FieldByName('metin').AsString);
          Image1.Bitmap.LoadFromStream(msFoto);
        end;
      2:
        begin
          Memo2.Lines.Clear;
          Memo2.Lines.Add(UniQuery1.FieldByName('metin').AsString);
          Image2.Bitmap.LoadFromStream(msFoto);
        end;
      3:
        begin
          Memo3.Lines.Clear;
          Memo3.Lines.Add(UniQuery1.FieldByName('metin').AsString);
          Image3.Bitmap.LoadFromStream(msFoto);
        end;
      4:
        begin
          Memo4.Lines.Clear;
          Memo4.Lines.Add(UniQuery1.FieldByName('metin').AsString);
          Image4.Bitmap.LoadFromStream(msFoto);
        end;
      5:
        begin
          Memo6.Lines.Clear;
          Memo6.Lines.Add(UniQuery1.FieldByName('metin').AsString);
          Image6.Bitmap.LoadFromStream(msFoto);
        end;
      6:
        begin
          Memo5.Lines.Clear;
          Memo5.Lines.Add(UniQuery1.FieldByName('metin').AsString);
          Image5.Bitmap.LoadFromStream(msFoto);
        end;
    end;
   finally
  msFoto.Free;
  end;
end;
end;

üstadım kusura bakmayın benim hatam msFoto := Nil; bu satırı silmemişim şuan resimler yüklendi ama veritabanımdaki sıraya göre yüklenmiyor karışık yüklüyor.Benim istediğim siras 1 ise memo1 e ve ımage1 e veritabanındaki sira 1 olan yerdeki resim ve yazının gelmesi

Case içindeki 5 ve 6 kodları dikkatinizden kaçmış. 5'i 6'ya, 6'ya da 5'e yazmışsınız.
İkinci husus  
UniQuery1.Next;
yanlış satıra koyulmuş.
Sıra alındıktan sonra next yaparsanız; birinci sıradaki değere veri tabanındaki ikinci satır bilgilerini atamış olursunuz. 
Mantıksal bir hata ile karşılaşmamak için kodlarınızı şöyle düzenleyin.
var
 siras: Integer;
 i, n: Integer;
 msFoto: TMemoryStream;
begin
 UniQuery1.Close;
 UniQuery1.SQL.Clear;
 UniQuery1.SQL.Add('select * from  data_ilan ');
 UniQuery1.Open;
 n := UniQuery1.RecordCount;
 for i := 0 to n - 1 do
 begin
   msFoto := TMemoryStream.Create;
   try
     siras := UniQuery1.FieldByName('sira').AsInteger;
     TBlobField(UniQuery1.FieldByName('pic')).SaveToStream(msFoto);
     msFoto.Position := 0;
     case siras of
       1:
         begin
           Memo1.Lines.Clear;
           Memo1.Lines.Add(UniQuery1.FieldByName('metin').AsString);
           Image1.Bitmap.LoadFromStream(msFoto);
         end;
       2:
         begin
           Memo2.Lines.Clear;
           Memo2.Lines.Add(UniQuery1.FieldByName('metin').AsString);
           Image2.Bitmap.LoadFromStream(msFoto);
         end;
       3:
         begin
           Memo3.Lines.Clear;
           Memo3.Lines.Add(UniQuery1.FieldByName('metin').AsString);
           Image3.Bitmap.LoadFromStream(msFoto);
         end;
       4:
         begin
           Memo4.Lines.Clear;
           Memo4.Lines.Add(UniQuery1.FieldByName('metin').AsString);
           Image4.Bitmap.LoadFromStream(msFoto);
         end;
       5:
         begin
           Memo5.Lines.Clear;
           Memo5.Lines.Add(UniQuery1.FieldByName('metin').AsString);
           Image5.Bitmap.LoadFromStream(msFoto);
         end;
       6:
         begin
           Memo6.Lines.Clear;
           Memo6.Lines.Add(UniQuery1.FieldByName('metin').AsString);
           Image6.Bitmap.LoadFromStream(msFoto);
         end;
     end;
   finally
     msFoto.Free;
   end;
   UniQuery1.Next;
 end;
end;
Begin : = end / 2;
Cevapla
#29
Evet şu an gayet istediğim gibi çalışıyor yardımlarınız için çok teşekkür ederim
Cevapla
#30
Telefonumdan resim seçtiğimde kırmızı ok ile gösterilen alanda image alanı bulunuyor orada gözükmesi gerekirken siyah ok ile gösterilen yere kaymasını anlamadım ? bu konu hakkında fikriniz var mı


Ek Dosyalar Resimler
   
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