Exception Handle de EDBISAMEngineError ve EDatabaseError yok

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
neu84
Üye
Mesajlar: 307
Kayıt: 06 Oca 2011 11:27

Exception Handle de EDBISAMEngineError ve EDatabaseError yok

Mesaj gönderen neu84 »

S.a arkadaşlar, try catch ile veritabanına baglanmayı deniyorum, özellikle hatalar çıkarıp hata kodlarını görmek ve kullanıcıya bu hata mesajlarını kendim yazmak istiyorum, ancak

Kod: Tümünü seç

    if(e.ClassName='EDBEngineError')then
        ShowMessage(e.Message+' '+'Veritabanına bağlanılamıyor, SQL Server servisi kapalı yada erişim yetkisi olmayabilir. Veritabanının açık olduğundan emin olun.');
      end;
fazlasını elde edemiyorum..

Şu aşagıdaki kodu buldum bi yerden, ama nedense E is EDatabaseError yada E is EDBISAMEngineError yazdıgımda EDatabaseError ve EDBISAMEngineError yı görmüyor altı kırmızı çizili oluyor, Uses kısmına mı bişeyler yazmam gerek diye araştırdım yazmam gereken şeyi bulamadım.. Ne önerebilirsiniz bana?

Kod: Tümünü seç

  try
         Open;
      except
         on E: Exception do
            begin
            if (E is EDatabaseError) and (E is EDBISAMEngineError) then
               begin
               if (EDBISAMEngineError(E).ErrorCode=DBISAM_OSEACCES) then
                  ShowMessage('Cannot open table '+TableName+
                    ', another user has the table open already')
               else
                  ShowMessage('Unknown or unexpected '+
                    'database engine error # '+
                    IntToStr(EDBISAMEngineError(E).ErrorCode));
               end
            else
               ShowMessage('Unknown or unexpected '+
                    'error has occurred');
            end;
      end; end;
Yardımlarınız için çok tşkler şimdiden..
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Exception Handle de EDBISAMEngineError ve EDatabaseError

Mesaj gönderen mkysoft »

hangi veritabanını kullandığınızı yazmamışsınız gerçi çokta önemi yok. kullandığınız bağlantı kompanenti önemli kaynak kodları library path'e ekleyin. hata mesajını debug edin, veri tabanından gelen hata mesajları çok büyük ihtimal sizin kullandığınız türde gelmiyor. Aşağıda MySQL hataları için yaptığım kod var:

Kod: Tümünü seç

  try
    veriler.data_dershane.Connect;
  except
    on E:EZSQLThrowable do
    begin
      fr_giris.SendToBack;
      CikisIptal:=True;
      if pos('Access denied for user',E.Message) > 0 then
        raise Exception.Create('Kullanıcı adınız yada şifreniz yanlış!');
      if pos('Unknown MySQL server host',E.Message) > 0 then
        raise Exception.Create(ana_bilgisayar + ' isimli ana bilgisayara ulaşılamıyor!');
      if pos('Can''t connect to MySQL server on',E.Message) > 0 then
        raise Exception.Create(ana_bilgisayar + ' isimli ana bilgisayarda verilere ulaşılamıyor!');
    end;
  end;
Debug ederken bulduğum unitleri de tabiki uses kısmına eklemeliyimki türleri programımda kullanabileyim:

Kod: Tümünü seç

ZAbstractRODataset, ZDataset, ZAbstractDataset, ZDbcIntfs
Programın tamamı için http://code.google.com/p/dershaneotomasyonu/
neu84
Üye
Mesajlar: 307
Kayıt: 06 Oca 2011 11:27

Re: Exception Handle de EDBISAMEngineError ve EDatabaseError

Mesaj gönderen neu84 »

mkysoft yazdı:hangi veritabanını kullandığınızı yazmamışsınız gerçi çokta önemi yok. kullandığınız bağlantı kompanenti önemli kaynak kodları library path'e ekleyin. hata mesajını debug edin, veri tabanından gelen hata mesajları çok büyük ihtimal sizin kullandığınız türde gelmiyor. Aşağıda MySQL hataları için yaptığım kod var:

Kod: Tümünü seç

  try
    veriler.data_dershane.Connect;
  except
    on E:EZSQLThrowable do
    begin
      fr_giris.SendToBack;
      CikisIptal:=True;
      if pos('Access denied for user',E.Message) > 0 then
        raise Exception.Create('Kullanıcı adınız yada şifreniz yanlış!');
      if pos('Unknown MySQL server host',E.Message) > 0 then
        raise Exception.Create(ana_bilgisayar + ' isimli ana bilgisayara ulaşılamıyor!');
      if pos('Can''t connect to MySQL server on',E.Message) > 0 then
        raise Exception.Create(ana_bilgisayar + ' isimli ana bilgisayarda verilere ulaşılamıyor!');
    end;
  end;
Debug ederken bulduğum unitleri de tabiki uses kısmına eklemeliyimki türleri programımda kullanabileyim:

Kod: Tümünü seç

ZAbstractRODataset, ZDataset, ZAbstractDataset, ZDbcIntfs
Programın tamamı için http://code.google.com/p/dershaneotomasyonu/
tşk ederim cevap için. Ben SqlServer Kullanıyorum. Yani demek istediginiz bütün hataları mahsus çıkartıp mesaj olarak ne verdiklerini ögrenip aynılarının bi kısmını alıp Pos metodunda mı karşılaştırayım demek istiyorsunuz tam olarak anlayamadım. peki benim verdigim EDBISAMEngineError EDatabaseError ı girebilmesi için uses a ekleyebilecegim bişey yokmu acaba?
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Exception Handle de EDBISAMEngineError ve EDatabaseError

Mesaj gönderen mkysoft »

MSSQL kullanmıyorum, bilemeyeceğim. uses kısmına yazacaklarınızı nasıl bulacağınızı da anlattım.
neu84
Üye
Mesajlar: 307
Kayıt: 06 Oca 2011 11:27

Re: Exception Handle de EDBISAMEngineError ve EDatabaseError

Mesaj gönderen neu84 »

mkysoft yazdı:MSSQL kullanmıyorum, bilemeyeceğim. uses kısmına yazacaklarınızı nasıl bulacağınızı da anlattım.
debug ederken unitleri nerden buluyorsunuz anlayamadım orayı ben, nerede yazıyo ki.
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Exception Handle de EDBISAMEngineError ve EDatabaseError

Mesaj gönderen mkysoft »

kullandığınız companentin kaynak kodlarını librarypathe eklerseniz, bir hata oluştuğunda break seçeneğini seçerseniz delphi direk ilgili hatanın geldiği yere gidecektir. orayı inceleyek ilgili doysayı, eğer bir fonksiyondan dönüyorsa o fonksiyonun geldiği dosyayı bularak aşama aşama ilerleyeceksiniz.
neu84
Üye
Mesajlar: 307
Kayıt: 06 Oca 2011 11:27

Re: Exception Handle de EDBISAMEngineError ve EDatabaseError

Mesaj gönderen neu84 »

mkysoft yazdı:kullandığınız companentin kaynak kodlarını librarypathe eklerseniz, bir hata oluştuğunda break seçeneğini seçerseniz delphi direk ilgili hatanın geldiği yere gidecektir. orayı inceleyek ilgili doysayı, eğer bir fonksiyondan dönüyorsa o fonksiyonun geldiği dosyayı bularak aşama aşama ilerleyeceksiniz.
hmm tşk ederim ancak ben pek anlayamadım, library path e ekleyecegim şeyi de anlamadım. bu söylediklerinizi anlamam için sanırım delphi bilgim yeterli düzeyde degil :( hiç bu söylediginiz tarzda bişey yapmamıştım. kısaca anlatan bi yer biliyomusnuz bu söylediginiz şeyi, bi yerde yapılışını görürsem biraz anlarım diye düşünyorum.
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Exception Handle de EDBISAMEngineError ve EDatabaseError

Mesaj gönderen orhancc »

Kullandığın componenti forma ekle compile et kendisi lazım olan usesleri ekler, sen de oradan alabilirsin :)
neu84
Üye
Mesajlar: 307
Kayıt: 06 Oca 2011 11:27

Re: Exception Handle de EDBISAMEngineError ve EDatabaseError

Mesaj gönderen neu84 »

orhancc yazdı:Kullandığın componenti forma ekle compile et kendisi lazım olan usesleri ekler, sen de oradan alabilirsin :)
anlıyorum :) da ben Tdatabase, Tquery, Tdatasource kullanıyorum, e onlarda var formda zaten, başka bişi kullanmıyorum ki, ama çıkmıyıda unitte öle şeyler? siz misal olarak hangi componentten bahsediyorsunuz?
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Exception Handle de EDBISAMEngineError ve EDatabaseError

Mesaj gönderen orhancc »

Sen veritabanına neyle bağlanmaya çalışıyorsun ?
neu84
Üye
Mesajlar: 307
Kayıt: 06 Oca 2011 11:27

Re: Exception Handle de EDBISAMEngineError ve EDatabaseError

Mesaj gönderen neu84 »

orhancc yazdı:Sen veritabanına neyle bağlanmaya çalışıyorsun ?
Tdatabase nesnesi kullanıyorum, tquery ile de sorgu yolluyorum.
Cevapla