Kodbank İndir

! CODEBANK 2012 !

İNDİRMEK&DETAYLI BİLGİ ALMAK İÇİN BURAYI TIKLAYINIZ.

ÖNEMLİ AÇIKLAMA: MUTLAKA OKUYUNUZ!

Gönderen Konu: Firebird'ün aktif olmasını bekleme  (Okunma sayısı 921 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı ZoRan

  • Kıdemli Üye
  • *****
  • İleti: 115
  • Rep: +1/-0
  • Cinsiyet: Bay
    • Proton Yazılım
Firebird'ün aktif olmasını bekleme
« : 28 Aralık 2009 16:17:24 »
Firebird Windows açıldıktan bir müddet sonra ancak aktif olabiliyor. Bu ise Programınızı Başlagıç ta veya Registerde otomatik çalıştırmada sorunlara sebep oluyor.
Zira başlangıç veya registerden otomatik çalıştırdığınızda sizin program çalışır ancak firebird hazretleri hala hazır olamamıştır ve programınız Veri tabanı hatası na sebep olur.
Bunu önlemek için programınızın Firebirdün hazır oluncaya kadar beklemesi lazım ki hata ile karşılaşmayın. Bunu yapmanın yolu ise şayet data modulunuz var ise Create yoksa ilk formun create olayında denetleyebilirsiniz. Çok kısa kod aşağıda dır.

Aşağıdaki kod veri tabanını her halikarda önce kapatır sonra yeniden dosyanın yerini göstererek yeniden açar. Neden Kapatıyoruz ?. Çünkü siz programı yazarken genelde D:\program\falan\db gibi kalsör tanımlayıp vt orda ararsınız ama kullanıcı onu c:\program files\vs ye kurar o zaman siz programı derlemeden vt yi kapatmış olacaksınız yoksa ömür billah vt yi açamazsınız. Vt nin yerini ister ini dosyasında ister windows registry de saklayın yada direk exe dosyanın olduğu klasörün altında DB diye bir klasör koyun aşağıdaki örnek vt exe neredeyse onun altında db klasöründe aramaktadır.
aşağıdaki döngüde zamanı uzatıp, kısaltarak veya x denemeden sonra açılamaz ise programı kapatacak sayaç kodu da yazabilirsiniz NOKTA


procedure TData.DataModuleCreate(Sender: TObject);
var
  vt:string;
begin
//---> Veritabanını Aç

vt:=ExtractFileDir(Application.ExeName)+'\db\ofis.fdb';
if FileExists(vt) then
   begin
      while True do begin
        try // veri tabanını önce kapat sonra aç, açılırsa döngüden çık
           ofis.Close;
           ofis.DatabaseName:=vt;
           ofis.Open;
           break;
        except // açılmazsa bekle sonra yeniden dene
            Sleep(1000)
        end;
      end;
 end else
   begin
      ShowMessage('Veri Tabanı Dosyası Bulunamadı. ');
      Application.Terminate;
   end;
//---> Veritabanını Aç
« Son Düzenleme: 28 Aralık 2009 16:25:33 by ZoRan »
İmza Atmaya fırsat Bulmadım. En yakın zamanda atarız bir imza.

Çevrimdışı barutali

  • Administrator
  • *****
  • İleti: 2.117
  • Rep: +51/-0
  • Cinsiyet: Bay
  • Falan filan ...
Ynt: Firebird'ün aktif olmasını bekleme
« Yanıtla #1 : 26 Ocak 2010 22:35:09 »
firebird kullanıcıları için güzel bi yazı olmuş teşekkürler hocam.



Amatör Küme Programcı

Çevrimdışı ZoRan

  • Kıdemli Üye
  • *****
  • İleti: 115
  • Rep: +1/-0
  • Cinsiyet: Bay
    • Proton Yazılım
Ynt: Firebird'ün aktif olmasını bekleme
« Yanıtla #2 : 23 Kasım 2010 13:52:03 »
Üstteki yazının biraz daha geliştirilmişi Ver 2.0 yani


//---> Veritabanını Aç
vt:=inioku(ChangeFileExt(Application.Exename, '.ini'),'GENEL','Dosya'); // ini dosyadan değişken okuyan function bana aittir.
// ini dosyadan okunamazsa default klasörü ata.
if vt='' then vt:='db\taksitci.dat';
// veri tabanını önce mutlaka kapat
taksit.Close;
taksit.DatabaseName:=vt;
i:=1;
if FileExists(vt) then
   begin
      while not taksit.Connected do begin
        try
           taksit.Open;
        except // açılmazsa bekle sonra yeniden dene
            Sleep(1000);
            inc(i);
            if i >60 then
               begin
                 mesaj('Dosya açılamadı');
                 halt(1);
               end;
        end;
      end;
 end else
   begin
      ShowMessage('taksitci.dat veri tabanı dosyası bulunamadı. ');
      halt(1);
   end;
//---> Veritabanını Aç



function inioku(Dosya:string;Grup:String;Degisken:string):string;
var
  r:string;
  INIDosya : TIniFile;
begin
INIDosya := TIniFile.Create(Dosya);
r:=INIDosya.ReadString(GRUP,DEGISKEN,'');
INIDosya.Free;
result:=r;
end;
« Son Düzenleme: 23 Kasım 2010 13:55:20 by ZoRan »
İmza Atmaya fırsat Bulmadım. En yakın zamanda atarız bir imza.