Derleme sırasındaki Warning ve Hint

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
kahraman1285
Üye
Mesajlar: 352
Kayıt: 10 Nis 2006 08:07

Derleme sırasındaki Warning ve Hint

Mesaj gönderen kahraman1285 » 04 Oca 2019 06:34

Merhaba

1.Firebird e bağlanmak için TFDQuery nesnesine şu şekilde parametre gönderiyorum. Program derleme sırasında aşağıdaki aşağıdaki Hint i veriyor uses kısmına Firedac.Stan.Param ile bu hint kalkıyor. Merak ediyorum Firedac componentleri Parambyname komutunu desteklemiyor mu? yada kullanımı şekli yada komut mu değişti ? Bu şekild ekomut çalışıyor sadece niye uses e Firedac.Stan.Param ekletmek istediğini anlamadım.
Kullandığım Komut:

Kod: Tümünü seç

try
  with Datamodule1.qrHizmetH do
   begin
     close;
     ParamByName('MUSTERINUM').Value:=Datamodule1.qrHizmetMUSTERINU.Value;
     open;
   end;
except on E: Exception do
end;

Kod: Tümünü seç

uses Firedac.Stan.Param
[dcc32 Hint] UnitHizmet.pas(162): H2443 Inline function 'TFDParam.SetAsVariant' has not been expanded because unit 'FireDAC.Stan.Param' is not specified in USES list

2.Avaliable formu create etme şeklim şu şekilde bu kod çalışmasına rağmen derleme sırasında Warning alıyorum.

Kod: Tümünü seç

[dcc32 Warning] UnitHizmet.pas(147): W1036 Variable 'f' might not have been initialized
Kullanım şeklim: Burada bir hatam var mı?

Kod: Tümünü seç

var
f:TfrmYeniHizmet;
begin
try
  f:=TfrmYeniHizmet.Create(Application);
  f.Show;

except on E: Exception do
begin
  ShowMessage(E.Message);
  f.Free;
end;
3.CxGridDBTableview de bulunan kolonlardan birini Properties combobox yaptığımda o kolondaki değerlerin tamamı combo box içine gelmiyor.
Combo box ı cxgrid otomatik doldurmuyor mu? Kendim bir döngü yazarak mı doldurmalıyım.?
İyi Çalışmalar.

thelvaci
Kıdemli Üye
Mesajlar: 768
Kayıt: 11 Tem 2010 06:17
Konum: Istanbul
İletişim:

Re: Derleme sırasındaki Warning ve Hint

Mesaj gönderen thelvaci » 11 Oca 2019 08:06

Inline direktifi ile işaretlenmiş olan metodların; fonksiyon çağrımına tabi tutulmadan kullanılabilmesi gerçeğine binaen; inline metodun tanımlandığı unit'in uses'da olması zarureti var. İlgili unit uses'da yok ise sizinde bahsettiğiniz gibi derleyici uyarıda bulunuyor.

İkinci kısım ise bir çok programcının yaptığı ciddi bir hatalı kullanım uyarısı. Evet orada ciddi bir hatanız var. Şöyle izah etmeye çalışayım. Sizin de göreceğiniz gibi f isimli TfrmYeniHizmet tipli sınıfınızı try bloğunun içinde oluşturuyor ve except'de de boşaltıyorsunuz. Ancak; ya TfrmYeniHizmet sınıfının Create metodunda bir exception oluşur ise ne olur ?

Olacak olan şu; oluşan exception Create işleminin tamamlanmasına mani olur yani f değişkeni göstermesi gerektiği gibi geçerli bir hafıza bloğunu göstermiyor olur, buna karşın hata oluştuğundan kod except bloğuna atlar ve zaten oluşturulmamış bir nesne Free edilmeye çalışılır.

Bu tarz kodlar kesinlikle şu şekilde tanımlanmalıdır:

Kod: Tümünü seç

  f := TBirnesne.Create;
  
  try
    ...
    ...
  finally
    if Assigned(f) then
      FreeAndNil(f);
  end;
Bu sayede, try..finally bloğu içinde bir hata da oluşsa sizin finally bloğuna dallanılacak ve zaten oluşmuş olması garanti olan f değişkeni düzgünce boşaltılabilecektir.

Sözün özü, finally'de boşaltmayı düşündüğünüz sınıflarınızı try..finally DIŞINDA create edin.

Üçüncü sorunuzda iki seçeneğiniz var. Birincisi ve data başka bir tablodan geliyor ise daha mantıklısı; bir LookupComboBox kullanmanız. Ancak; data sabit ise (yani combobox içinde gösterilecek data'nın çeşidi ve sayısı belli ise) bu durumda gösterilmesini istediğiniz değerleri Items kolleksiyonuna eklemelisiniz.

kahraman1285
Üye
Mesajlar: 352
Kayıt: 10 Nis 2006 08:07

Re: Derleme sırasındaki Warning ve Hint

Mesaj gönderen kahraman1285 » 11 Oca 2019 06:12

İlginiz ve cevabınız için teşekkür ederim Tuğrul bey.

Kodu düzelttim. Create metodunu try dışına çıkarınca sorun çözüldü.

İyi Çalışmalar.

Cevapla