https://www.youtube.com/watch?v=ntQCqpak9dw

Mobil cihazda çektiğimiz bir resmi herhangi uzaktaki bir veritabanına kayıt işlemini öğreneceğiz. Datasnap kullanarak uzaktaki MSSQL veritabanına mobil cihazdan çektiğimiz görüntüyü yazacağız.

File >New > Others > DataSnap Server >ok açılan pencerede windows işaretli >next -Forms Application >next - VCL Application >next - Sonraki ekranda; TCP/IP - Server Methods Class - Sample Methods seçtik >next. Test port’a tıklayarak kontrol ediyoruz >next - TDSServerModule >Finish. Delphi DataSnap Server’ı bizim için oluşturdu. Uygulamamızı kaydediyoruz, project1.dproj→DsServerPhoto. DsServerPhoto.exe >sağ tuş >add new >Database > Datamodule oluşturuyoruz. Datamodule’ümüzü kaydedelim. unit2.pas→uDmod - Datamodule >name →dMod. Datamodule’e koyduğumuz nesneleri ServerMethods’ a koyarakta kullanabiliriz fakat karışık olmaması için datamodule ekliyoruz.uDmod >Palette >FDConnection1 - FDQuery1. FDConnection’a çift tıklıyoruz açılan pencerede Driver ID: MSSQL , Database, server kısmınıda dolduruyoruz. OSAuthent > yes, test’e tıklıyoruz kontrol ediyoruz >ok pencereyi kapatıp kaydediyoruz.FDConnection1 >name →con - FDQuery1 >name →qKayıt. Veritabanımızın içinde  ad soyad string tablomuz var birde BlobField’imiz var. BlobField ile mobil cihazdan çektiğimiz resmi DataSnap Server aracılığı ile veritabanımıza yazacağız. FDQuery’ çift tıklıyoruz açılan pencereye → select*from TBL_KAYIT >execute, alanlarımız geliyor >ok. Alanları çekmek için qKayıt >FieldEditor > açılan pencerede sağ tuş > add all fields, alanların geldiğini görüyoruz.DataSnap Clientler DataSnap Server ile ServerMethodsUnit aracılığı ile haberleşirler ServerMethodsUnit’e yazdığımız functionlar ve procedureler clientler tarafından çağrılırlar.Datamodule’e yazdığımızı çağıramıyoruz bunun için ServerMethodsUnit’e DataSetProvider ekliyoruz.Use unitden server methods’umuzu data module’e tanıtıyoruz. DataSetProvider >name →dspKayit. dspKayit >object inspector > DataSet >dMod.qKayit artık clientlerimiz Datamodule’de ki querylerimize erişebilir. Sunucu kısmımız tamamlandı çalıştırıyotuz. Sunucumuz aktif, connection ve query’i elle açıyoruz. Önemli bir nokta; DataSnap Clienti yazarken sunucu sunucusu mutlaka açık ve client’i yazdığımız makine tarafından erişilebilir olmalı. Con ve query’e active →true işaretliyoruz.  DataSnap server’ı çalıştırıp açık bırakarak clienti yazmaya başlıyoruz.

ProjectGroup1 > sağ tuş > add new project > multi device> blank application açıyoruz. Kaydediyoruz, unit2.pas→uMainClnt - Project1.droj →PhotoClint - ProjectGroup1.grouproj →DsPhoto . Clientin arayüz tasarımı; uMainClint >Palette >Toolbar1 > Toolbar’ın içerisine button ekledik. Button1 >align >left. Buttona isim yerine simge verelim bunun için button1> object inspector >Style Lookup >camerabuttonbordere simgesini seçiyoruz. Palette >Layout> align >center. Layout’un içerisine Image yerleştiriyoruz, kameradan çektiğimiz görüntüyü ekrana gösterebilmek için. Image >align >client. Palette >Listbox ekliyoruz veri gireceğimiz diğer alanları ve buttonu yerleştirmek için. Listbox>align >bottom. Listbox > sağ tuş >Items Editor >3 adet ıtem ekledik. 3 Item’ı seçip textlerini siliyoruz,  Height >40 ayarlıyoruz. LisboxItem 1 >edit1 ekledik > label1 ekliyoruz- LisboxItem 2 >edit2  > label2 ekliyoruz - LisboxItem 3 >button2. Label1 >text → Adı - Label2 >text → Soyadı. Edit 1 ve 2 >align >client. Button2 > align > client. Btuuton2 >name btnKaydet. Kamera componenti ekliyoruz, mobil cihazdan aldığımız görüntüyü bize verecek. Palette >CameraComponent1 >name > Camera. Üzerine çift tıklayarak eventlarına ulaşıyoruz.


public
   {Public declarations}
procedure ResimAl;
end;

procedure’e ResimAl tanımladık çünkü thread ile resim almak daha güvenli.


procedure TForm2.ResimAl;
begin
   Camera.SampleBufferToBitmap(Image1.Bitmap True);
end;
end.

Design >Camera > Events >SampleBufferReady . Veri alma işlemini sycnhronize ve thread’in içinde yapacağız.


procedure TForm2.CameraSampleBufferReady(Sender :TObject ; const ATime : TMedia Time);
begin
   TThread.Synchronize(TThread.CurrentThread, ResimAl);
end;

Thread’i tanımladık, Thread ile ilgili detaylı bilgi almak için Thread ile ilgili yazımıza bakabilirsiniz. Kamera simgesinin olduğu butonumuza tıklayarak kod satırımıza gidiyoruz kamera açama kodumuzu yazmak için.


procedure TForm2.Button1Click(Sender : TObject);
begin
   if Camera.Active then
     Camera. Active := False
     else
     Camera.Active :=True;
end;

Kamera açıksa kapa, kapalıysa aç şeklinde basit bir if-else kodu yazdık. Şimdiye kadar yazdığımız kodlar kameradan gelen görüntüyü kaç tane gönderdiysek image nesnesinin bitmap’ine o kadar basıyor. Çalıştırarak windows üzerinde çalışmasını görebiliyoruz. Buraya kadar olan kısımda client tarafında veritabanı bağlantısı yapmadan kısa kodlar ile görüntüleri bitmap’e aktardık.

Datasnap kısmını yazmaya başlıyoruz. Datasnap  Server ile DataSnap Clientler arasındaki bağlantıyı TSQLConnection kullanarak yapacağız. TSQLConnection nesnesinin driver kısmını datasnap seçersek datasnap ile ilgili parametreler gelecektir. Palette >SQLConnection1 ekliyoruz -Driver > datasnap seçtik - HostName’e Ip’mizi yazıyoruz(mobil cihaza aktarınca sunucuyu bulabilmesi için Ip yazmamız gerekiyor. )Eğer internette açık bir  sunucu hizmeti alıyorsanız internetteki Ip’nizi yazmalısınız. Datasnap server ve Datasnap Client arasındaki bağlantı sağlandı. Palette > DSProvider Connection. ClientDataSet ile Datasnap Server arası bağlantı için DsProvider Connection ekledik. DsProvider Connection >Server Class Name →TServerMethods1. Palette >ClientDataSet1 >name →cdsUye - Remote Server →DsProviderConnection - ProviderName  →dsp_Kayit. cdsUye >sağ tuş >Fields Editor > Fieldleri çekiyoruz connectionların false olup olmadığını kontrol ettikten sonra kod yazmaya başlıyoruz. btnKaydet’e çift tıklıyoruz;


procedure TForm2.btnKaydetClick(Sender : TObject);
var
   ms: TMemoryStreans //nesnemizi stream nesnesi içine alacağız.
begin
if not SQLConnection1.Connected then
   SQLConnection1.Open;
   if not cdsUye.Active then
     cdsUye.Open;
   cdsUye.Insert;
     cdsUyeADI.Value := EditAd.Text;
     cdsUyeSOYADI.Value := EditSoyad.Text;
    try
    ms:= TMemoryStream.Create;
    ms.Position :=0;
    if Camera.Active then
       Camera.Active :=False;
     Image1.Bitmap.SaveToStream(ms); //resmi stream’e yaz diyoruz.
     ms.Position := 0;
     cdsUyeFOTO.LoadFromStream(ms); // Stream içerisindeki bilgiyi datasnap’e aktarabilmek için loadfrom fonksiyonu kullanırız.
finally
end;

Stream’i kameradan resmi alıp bir stream’e kaydedip bunuda uzaktaki veritabanına  kaydetme işlemini tamamlamış oluyoruz. Uzaktaki bir stream’i  alıp ekranda bir yere yazarak tam tersinide yapacağız. Çalıştırıyoruz Ad Soyad girip kameradan kayıt alıyoruz.

Şimdi tam tersini yapacağız uzaktaki uzaktaki bir veritabanında bir stream içerisinde blobField de stream kayıtlı bu strem’ı alıp mobil uygulamamızdaki bir bitmapte , image nesnesinde gösterme kısmını yapabiliriz az önce yaptığımız işlemlerin tama tersini yaparak. İlk olarak bir button ekleyelim buttonu yerleştirmek için Listbox’ımıza bir adet daha ListboxItem4 ekliyoruz. Text’ini siliyoruz, Height >40. Palette > Button2 > align >client - name >btnDbDenOku. BtnDbDenOku’ya çift tıklıyoruz kod satırına gidiyoruz. Öncekiyle birkaç farkı olan çok benzer kodlar yazacağız. Datasnap server’ın blobFieldinde bulunan stream’i alıp bu stream nesnesini image’e okutuyoruz. Gelen bir resimse image düzgünce okuyacaktır resmi.


procedure TForm2.btnDbDenOkuClick (Sender : TObject);
var
   ms: TMemoryStream;
begin
if not SQLConnection1.Connected then
   SQLConnection1.Open;
if not cdsUye.Active then
     cdsUye.Open;
if cdsUye.RecordCount >0 then
begin
     cdsUye.Last;
     EditAd.Text:= cdsUyeADI.Value;
     EditSoyad.Text:= cdsUyeSOYADI.Value
     try
       ms: TMemoryStream.Create;
       ms: Position:= 0; //Yanlış yerden okumaya başlamaması için position:= 0
       cdsUyeFOTO.SaveToStream(ms);
       ms.Position:= 0;
       Image1.Bitmap.LoadFromStream(ms);
     finally
     end;
   end;
end.

Uygulamamızı mobil cihaza gönderiyoruz. Target Platforms >Target >Cihazımızı seçiyoruz,  uygulamamız yükleniyor. Uygulamamızı çalıştırıyoruz. Kamerayı açama butonundan açıyoruz verilerimizi girip kaydediyoruz.Uygulamamızı kapatıp açıyoruz verinin gidip geldiğini görüyoruz.

Firma Bilgileri


Camart Araştırma Geliştirme Yazılım Otomasyon San. Tic.Ltd. Şti.

Mersis no : 3356 7133 6775 9746

info@camartarge.com

Vergi Dairse / no : Pamukkale v.d. 196 074 62 30

Tel : +90 850 333 80 20

İban (TL): TR30 0020 5000 0085 3809 5000 03

Arge :

Pamukkale Üniversitesi teknoloji geliştirme bölgesi (Teknokent)

Kınıklı mah. Hüsseyin yılmaz cad. no 67

idari bina d blok no g05 Pamukkale / Denizli

İban (USD):TR03 0020 5000 0085 3809 5001 01


Barbaros Mah. Halk Cad. No 47 / 2 34746 Ataşehir İstanbul

İban (Euro):TR73 0020 5000 0085 3809 5001 02

 
Harita verileri ©2015 Google

İletişim

Facebook Pinterest Twitter Google+ Dribbble