Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
FMX Connection Control
#1
Merhaba arkadaşlar,

FMX projemde Datasnap kullanıp FB database e connection sağlıyorum. Windows da çok bir problem olmuyor. Fakat Mobil kısmında en ufak bir network probleminde uygulama kapanıyor.

SQLConnection kullanıyorum DS bağlantısı için.

Uygulamanın ilk açılışında ve ileriki safhalarda DS bağlantısının var olup olmadığını yok ise bir daha denemesini (Post, Update delete vs..) denemeden de fayda yok ise demekki komple hat yok ise; Bağlantı sağlanamadı hatasını nasıl yakalar ve gösterebilirim? Hani event'da yakalarım bunu? Sizler hangi yöntemi kullanıyorsunuz?

Şimdiden teşekkürler.
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#2
Merhaba,
Mobil uygulama çalışma prensibinde, hiçbir connection sürekli açık kalmaz. Kalmamalı.
Client (mobil) sunucuya istek gönderdiği anda connection açılır, sonuç dönünce kapanır. REST bileşenleri de bu prensiple çalışır. 
Mobil uygulama yaşam döngüsüne bakarsanız; uygulama arka plana alındığında, aktif işleri geçici süreliğine askıya alınır. Uzun süre arka planda kalırsa, OS tarafından uygulama sonlandırılır. 

Geçici çözüm; IFMXApplicationEventService'ini yakalayıp, duruma göre bağlantıyı yeniden sağlamalısınız.
Kalıcı çözüm; Android tarafı için servis, iOS tarafı için UIBackgroundModes -- > Fetch
Fakat tekrarlamakta fayda var; connection sürekli bağlı kalmamalıdır.
Begin : = end / 2;
Cevapla
#3
Hocam zaten sürekli açık değil DB Connection.

Fakat ben Open yada post işleminden önce connection kontrolünü nasıl yapabilirim. sonumu orada. SQlconnection ve ClientDataSet kullanıyorum. Fakat kontrolünü yapamadım.
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#4
@mcuyan hocam, internet bağlantı kontrolünü butona tıklamadan önce yapıp OFF ise açtırmayıp ON ise açtırsanız nasıl olur?

şuradaki yöntemi kullanarak. https://www.delphican.com/showthread.php?tid=25
Cevapla
#5
Datasnap çalışan bilgisayara ping atmak
Begin : = end / 2;
Cevapla
#6
@RAD Coder da aslında sizinle aynı şeyi söylüyor.

* Özetle kontrol yapmaya zaman kaybetmeyin, Open/Post ile açık bağlantı yapmayın.

* Mobil için her defasında bağlantıyı yeni baştan yapın ve POST yerine SQL ExecSQL kullanın, sorgulamayı da benzeri şekilde open yapın ama işi bitince kapatın.

* Ardışık işlemler için TRANSACTION kullanın. Hatta veritabanına DML ARRAY yapısı ile parametrik toplu giriş yapın. (DML olarak aratın çıkar)
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#7
Aslında ben yanlış yazdım sanırım.
Open'ı db de bazı bilgileri alıp editlere yazmak sonra da close için kullanıyorum. Yani sürekli DB ye bağlantı yapmıyorum. Zaten öyle olsa iyicene perşian edicek bizi.
Evet update insert gibi DML leri ExecSQL ile çalıştıyorum @mrmarman hocam.
@RAD Coder hocam IFMXApplicationEventService bunu hiç kullanmadım.

Ayrıca KeepAlive açık kalmıştı. Onu da kapattım. Sonuçta sürekli bağlantı istemiyoruz.

Aklıma şey geldi;
SQLCOnnection un Before open kısmına @mrmarman hocam'ın https://www.delphican.com/showthread.php...757&page=3 sayfsındaki bağlantı testi prosedürü ile test edip, eğer hat var ise; işlemden önce bunun kontrolünü yapmak yok ise abort etme fikri. Fakat hat yok ise uyguamayı kapatıp açmadan yeni den bağlantıyı sağlaymıyrum. bu konuda ne yapabiliriz?
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#8
Alıntı:Fakat hat yok ise uyguamayı kapatıp açmadan yeni den bağlantıyı sağlaymıyrum. bu konuda ne yapabiliriz?
Yeniden bağlantı sağlanmaması derken uygulamanın açılış ekranında direkt bağlantı şeklinde mi bir yapı var ? Öyle ise bundan da vazgeçin derim.
* Bir nefes payı bırakırsanız süreç sağlıklı yürüyecektir.

1. Uygulama açıldı, kullanıcı bilgileri, veri tabanı erişim bilgileri set edildi vs. ( SQLite veritabanı local  aşağıda detaylandırıyorum)

2. Kanımca veritabanına ilk erişim amacı kullanıcı yetkilerinin teyidi olabilir gibi geliyor. Ben olsam ne yapardım diye kendime sorduğumda, kullanıcı tanımlama anında localde (mobil app özel klasöründedir, root olmayan cihaz erişemez) güvenli kullanıcı olduğunu belirten bir SQLite veritabanı bulundurur, bilgileri bir sonraki sefere sunucuya gerek kalmadan bu tablodan sorgulardım. Bu sadece projenin açılması ilk ekranın gelmesi ile ilgili bir ÖN - GEÇİŞ izni olarak değerlendirin.

3. Uygulama açıldı. ilk seviye kullanıcı erişimi alındı, sonra artık uygulama içerisinde bir kullanıcı hareketi ile bu kullanıcı bilgisini sunucuya teyit ettirir localdeki SQLite tablosunu güncel haliyle yenileriz. Aynı zamanda kullanıcının asıl yetkisi nedir onu programa set edersiniz.

4. BU uygulama açıldı anından sonraki işlemler CONNECT / SQL Sorgu / CLOSE şeklinde olacağından konu gereği uygulamadan yeniden çıkıp girme gereği ortadan kalkar.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#9
@mrmarman hocam işte problem orada..
4.adımda yazdığınız connect kısmında bı ön kontrol yaptırmaktan bahsediyorum. Bunu hangi olayda yazacağız.. sqlbeforeconnect ? Yada bağlantı kontrolünün algoritmasını soruyorum. Bı türlu mantığı oturtamadim . Sizlerin hangi yöntemi kullandığınızı merak ediyorum.
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#10
Ben daima şunu uyguluyorum.
Bir sınıf yazıyorum (class). Bu sınıf nesnenin private kısmında bir Connect function yer alıyor . OnConnectionStat event de eklerim ki projede bağlantı durum monitörü olarak statusbarda kullanırım.

Bu sınıf benim db'ye erişim için tüm property, method ne varsabbarındırsığından, her işleme ait procedure function'un ilk satırı connect(); if not FState then exit şeklinde bir kontrol yer alıyor.

Bunu size izah etmek için örnek proje yazman gerekir belki ama siz bunu rahatlıkla halledersiniz.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  TCPClient Connection Refused Sorunu tmrksmt 4 1.122 22-07-2021, Saat: 15:27
Son Yorum: enigma
  Tab control - Geçiş [ÖRNEK PROJE] Mr.Developer 10 3.450 06-11-2020, Saat: 16:47
Son Yorum: hayalyilmaz43
  Socket error #110. connection time out hatası hbulus 6 3.741 05-02-2020, Saat: 13:11
Son Yorum: adelphiforumz
  Push Service Connection ikurt07 1 1.621 23-12-2019, Saat: 16:52
Son Yorum: TescilsizUzman
  İos Arka Plan Connection theercan08 3 2.721 25-06-2019, Saat: 15:16
Son Yorum: TescilsizUzman



Konuyu Okuyanlar: 1 Ziyaretçi