Firebird veritabanını lokal ağda kullanır gibi internet üzerinden bağlanarak kullanmak istiyorum.Ancak bazı sorunlarım var.Eminim başkaları da bu tür sorunlar yaşıyordur.Bu topik altında belki bu sorunları çözebiliriz yada benim yaptığım bir hata varsa düzeltebiliriz.
Öncelikle forumda bu konu ile yazılmış tüm yazıları okudum.Ve bu yazılanlara göre hiçbir sorun yok gibi görünüyor ancak bir sorun var…
Önce programım hakkında bilgi vereyim.Delphi 2005 ile yazıldı.Firebird bağlantı komponenti IBX bileşenleri.Firebird sürümü 2,5.Veritabanında 15-20 adet tablo var.Kayıt sayısı en sık kullanılan tabloda 1000-1500 civarında şu an.Programım veritabanına bir ini dosyadan bağlantı yolunu alarak bağlanıyor.
Örneğin:
Kod: Tümünü seç
Localhost:C:\Data\MYDATA.FDB
Yada client olarak kullanılacaksa ;
Kod: Tümünü seç
192.168.1.15:C:\Data\MYDATA.FDB
Program ilk açıldığında sadece kullanıcıların tutulduğu tabloyu açıp kullanıcı adı ve parola ile giriş yapılıyor ve ana form açılıyor.Sonra hangi form açılırsa o formu ilgilendiren tabloya bağlı dataset açılıyor ve o form kapandığında o datasette kapatılıyor.FetchAll olayı kesinlikle yok…Formlarda birer adet dbgrid bulunuyor.Yani aynı anda çoğu kez bir adet dataset db’ye bağlanıyor.Blob alan sadece bir iki tabloda birer adet var.
Şimdi bu databasein bulunduğu statik ip alan bir bilgisayara internet bağlantısı ile bağlanılacağı zaman ise şu işlemler yapılıyor.Firebird.conf dosyasında port tanımlamaları yapılıyor.O bilgisayarın bağlı olduğu adsl modeminden gerekli yönlendirmeler yapılıyor.Güvenlik duvarından gerekli izinler, hem program izni verilerek, hem portlar açılarak hemde bir sonraki aşama olarak(tabi başarısızlık olunca) güvenlik duvarı pasifize edilerek her türlü kısıtlama kaldırılıyor.
Programın database bağlantı söz dizesi ise aşağıdaki gibi değiştiriliyor.
Kod: Tümünü seç
88.xxx.xxx.179:C:\Data\MYDATA.FDB
Sonuç;
Program veritabanına bağlanıyor.Kullanıcı tablosuna bağlanıyor.Kullanıcı adı ve parolasını kontrol edip ana sayfaya ulaşıyor.Lokal ağda 1 sn süren bu işlem internet üzerinden olunca 10 sn sürüyor.Bunun normal olduğunu düşünüyorum.Ancak sorun bundan sonra başlıyor.Herhangi bir forma girmek istediğimde yani veri yüklü bir tabloya bağlanılan bir forma girmek istediğimde program donup kalıyor.Ve görev yöneticisinden sonlandırılana kadarda öyle hareketsiz ve donuk şekilde kalıyor.
Formumun kodları hakkında da bilgi vereyim.
Açılırken sadece create yordamında kodum var.Yani show yordamında v.b. kodum yok….
Kod: Tümünü seç
MyDataset.SelectSQL.Clear;
MyDataset.SelectSQL.Text := 'Select ADISOYADI,DTAR,BADI,TEL1,TEL2,TEL3,ADRES,IL,ILCE From HASTALAR ';
MyDataset.Open;
Kod: Tümünü seç
MyDataset.SelectSQL.Clear;
MyDataset.SelectSQL.Text := 'Select ADISOYADI From HASTALAR ';
MyDataset.Open;
Gene deneme amaçlı formun üzerindeki dbgridin bağlantılarını kopartıyorum.Maalesef sonuç aynı.
Veritabanında bu tabloda bir autoincrement alanım var sayısal tipte ve primary key.Yani indexlemelerim var.Gerçi sorunun bununla bu kadar alakalı olmamamsı gerekir ama aklıma gelen her şeyi siz sormadan yazmak istiyorum.
Bu bağlantı kodunu comment içine alıp derliyorum projeyi.Şak diye açıyor.Bu kodu koyunca donup kalıyor….
Nerede hata yapıyorum.Yorumlarınızı bekliyorum...
Şimdiden teşekkürler....