Debug

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Debug

Mesaj gönderen m_ekici »

Merhaba
Delphi XE2 de programı debug ile satır satır çalıştırırken değişken üzerine geldiğimde değişkende Metin olması gerekirken aşağıdaki şekilde görünüyor. (Bazen de inaccesible .... gibi mesaj veriyor) Bunun sebebi nedir?

Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Debug

Mesaj gönderen mrmarman »

FLT_FieldValues['FLTADI'] içeriğinin buna eşit olduğunu anlıyorum..

- Basit bir kurgu ile bunu anlayabilirsiniz. Direkt bunu aynı try / except bloğunda olmak kaydıyla mesela değer eşitlediğiniz satırın hemen üzerinde olacak şekilde showmessage ile ( ShowMessage(FLT_FieldValues['FLTADI']); ) yayınlayın bakalım gerçekten neymiş, değil mi ?

- Bu başlığı okuyanlar ve merak edenler için yazıyorum, normal şartlarda zaten aşağıdaki gibi çalışır.

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  i : Integer;
  strA : String;
begin
  for i := 1 to 10 do
    strA := IntToStr(i);
end;
strA := olan satıra bir breakpoint koyup (ilgili kod satırının en başında mavi nokta vardır ona tıklayın kırmızı olur. Bu proje çalışdığında oraya gelince durdurulacaktır anlamına gelir) projeyi çalıştırın, orada duracaktır. F7 ile bir kaç adım yürüyüp mouse ile strA üzerine gelin bekleyin normal olarak atanmış değeri gösterdiğini görebilirsiniz.

Bu bağlamda yukarıdaki kurgunuzda hata aramalısınız.
Resim
Resim ....Resim
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Re: Debug

Mesaj gönderen m_ekici »

Merhaba
showmesaj ile yazdırdığımda normal Metin ('URUNKODU') yazıyor.

senin kodu yazdığımda, değişken (strA) üzerinde 'Inaccessible value' yazıyor.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Debug

Mesaj gönderen SimaWB »

Tavsiye:
FieldValues variant tipte değer döndürdüğü için eğer okunmak istenen alan boş ise hata oluşur(Gerçi siz zaten try-except bloğu kullanmışsınız ama buna gerek kalmayabilir).
Bunun yerine FieldByName kullanıp dönen değeri istediğimiz tipe dönüşüme zorlayabiliriz:

Kod: Tümünü seç

FltAdi := FLT_.FieldByName('FLTADI').AsString;
There's no place like 127.0.0.1
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Debug

Mesaj gönderen mrmarman »

İşte sorunu kendin anlaman için böyle yaptım. AsString ile almamanın sonucu bu.

Zaten TRY EXCEPT ihtiyacın olduğundan gördüm bunu da sorunun kaynağını kendin görebilesin diye yapım.
Şöyle dene ve arkana yaslanıp izle neden asString lazım geliyor...

Kod: Tümünü seç

var
  vFLTADI: Variant;
  strFltAdi : String;
  ...
begin
  vFLTADI := FLT_.FieldValues['FLTADI']);;
  if VarIsNull(vFLTADI) 
  then strFltAdi := ''
  else strFltAdi := vFLTADI;
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Debug

Mesaj gönderen mrmarman »

(aynı anda) Aklın yolu bir değil mi :D

Özetle NULL değer varsa hafızadan bir bölgenin değerini geçici olarak görürsün. Tanımsızlık buradan kaynaklı.
Resim
Resim ....Resim
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Re: Debug

Mesaj gönderen m_ekici »

Yeni bir proje açıp denediğimde mrmarman ın kodu doğru sonuç veriyor. Benim proje içerisinde debug ı etkileyen bir şey var diye düşünüyorum. (Query den NULL değeri olanlar gelimyor)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Debug

Mesaj gönderen mrmarman »

FLTAdi isimli string değişken local mi yoksa global mı? Bir de bir önceki değer null olur breakpoint value onu görür, sonraki proje testinde tam dolu kayda odaklanıyor olursun başka sonuç görürsün, bu farklılık olağandır.
Resim
Resim ....Resim
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Re: Debug

Mesaj gönderen m_ekici »

fltAdi o procedurde tanımlı string alanı.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Debug

Mesaj gönderen thelvaci »

Inaccessible gibi bir hata mesajı gözlemliyorsanız; projenizin Release değil Debug modda olduğunu teyid etmeli ve her ihtimale karşı çalıştırmadan önce Build etmelisiniz.
Cevapla