Selamlar böyle bir fonksiyonum var.
ama Connection nesnem free olmuyor neyi atlıyorum ben ?
function Tyhackup.getName(phones: string): GetInfo;
begin
with getNewQuery(ArMyConnect()) do
try
///
///
finally
Free;
Connection.Free;
end;
end;
getNewQuery fonksiyonum da bu şekilde,
function Tyhackup.getNewQuery(pConnection: TMyConnection): TMyquery;
begin
result := TMyQuery.Create(nil);
result.Connection := pConnection;
end;
Connection nesnemde bu şekilde
function ARMyConnect(): TMyConnection;
begin
try
Result := TMyConnection.Create(nil);
Result.Server := 'xxxx';
Result.Port := 3306;
Result.Database := 'xx';
Result.Username := 'xx';
Result.Password := 'xx';
Result.Options.Charset := 'latin5';
Result.LoginPrompt := False;
Result.Options.UseUnicode := True;
except
on E: Exception do
end;
end;
Öncelikle ARMyConnect() sonucu dönen TMyConnection nesnesi Free edilmiyor.
getNewQuery'yi Free ettikten sonra onun connection'ı üzerinde nasıl işlem yapabiliyorsun...
function Tyhackup.getName(phones: string): GetInfo;
begin
conn = ArMyConnect()
try
with getNewQuery(conn) do
try
//
finally
Free;
end;
finally
conn.Free;
end;
end;
(08-05-2017, Saat: 10:27)SimaWB Adlı Kullanıcıdan Alıntı: [ -> ]Öncelikle ARMyConnect() sonucu dönen TMyConnection nesnesi Free edilmiyor.
getNewQuery'yi Free ettikten sonra onun connection'ı üzerinde nasıl işlem yapabiliyorsun...
function Tyhackup.getName(phones: string): GetInfo;
begin
conn = ArMyConnect()
try
with getNewQuery(conn) do
try
//
finally
Free;
end;
finally
conn.Free;
end;
end;
finally de, Connection.Free; demem, getnewquery'nin bağlı olduğu Connection nesnesini free etmez mi ?
önce Connection free etsem getnewquery de hata oluşturmaz mı ?
Edit:
Sorunu anladım çözdüm teşekkürler.
(08-05-2017, Saat: 10:43)yhackup Adlı Kullanıcıdan Alıntı: [ -> ] (08-05-2017, Saat: 10:27)SimaWB Adlı Kullanıcıdan Alıntı: [ -> ]Öncelikle ARMyConnect() sonucu dönen TMyConnection nesnesi Free edilmiyor.
getNewQuery'yi Free ettikten sonra onun connection'ı üzerinde nasıl işlem yapabiliyorsun...
function Tyhackup.getName(phones: string): GetInfo;
begin
conn = ArMyConnect()
try
with getNewQuery(conn) do
try
//
finally
Free;
end;
finally
conn.Free;
end;
end;
finally de, Connection.Free; demem, getnewquery'nin bağlı olduğu Connection nesnesini free etmez mi ?
önce Connection free etsem getnewquery de hata oluşturmaz mı ?
Edit:
Sorunu anladım çözdüm teşekkürler.
Merhaba,
Bu sorunu daha erken farkedememenizin sebebi 2-3 hece daha az yazacağım ya da değişken tanımlamayacağım diye "with" kullanmış olmanız. Size tavsiyem bir an önce with'i kullanmaktan vazgeçin. Hem debug etmeyi, hem de kodu okumayı çok zorlaştırıyor. Keşke Delphi with özelliğini dilden yavaş yavaş çıkarsa (tamam, çıkarırsa çok sorun çıkar ama en azından warning verse o bile yeter. Yeni programcılar kullanmaktan çekinirler).
İyi çalışmalar
Bence de mümkün olduğunca with'ten uzak durmakta fayda var
(08-05-2017, Saat: 10:56)Bahadir.Alkac Adlı Kullanıcıdan Alıntı: [ -> ] (08-05-2017, Saat: 10:43)yhackup Adlı Kullanıcıdan Alıntı: [ -> ]finally de, Connection.Free; demem, getnewquery'nin bağlı olduğu Connection nesnesini free etmez mi ?
önce Connection free etsem getnewquery de hata oluşturmaz mı ?
Edit:
Sorunu anladım çözdüm teşekkürler.
Merhaba,
Bu sorunu daha erken farkedememenizin sebebi 2-3 hece daha az yazacağım ya da değişken tanımlamayacağım diye "with" kullanmış olmanız. Size tavsiyem bir an önce with'i kullanmaktan vazgeçin. Hem debug etmeyi, hem de kodu okumayı çok zorlaştırıyor. Keşke Delphi with özelliğini dilden yavaş yavaş çıkarsa (tamam, çıkarırsa çok sorun çıkar ama en azından warning verse o bile yeter. Yeni programcılar kullanmaktan çekinirler).
İyi çalışmalar
Ne yazık ki warning'leri okuyan bile yok. Uygulamayı bi derliyorsun yüzlerce warning, hint var. Hatta o kadar çok warning varki milletin uygulamasında adam deprecated yazan metod'ların bile farkında değil, anca tamamen kaldırılıp patladığında görüyor ne yazık ki
Doğru söylüyorsunuz, daha az yazalım diye kullanıyorum ara ara ama bırakacağım dediğiniz gibi.
With ile alakalı internette gördüğüm bir örneği paylaşmak istiyorum:
with TFoo.Create
try
Bar := Baz;
DoSomething();
finally
Free;
end;
TFoo'nun Bar özelliğine Baz değerini atıyorsunuz (Buradaki Baz lokal/global bir değişken vs. olabilir). Aradan zaman geçtikten sonra siz yada başka bir yazılımcı TFoo sınıfına Baz özelliği eklerse sizin hiiiiiiç haberiniz olmadan programınız hatalı sonuç üretecek.
(08-05-2017, Saat: 12:41)SimaWB Adlı Kullanıcıdan Alıntı: [ -> ]With ile alakalı internette gördüğüm bir örneği paylaşmak istiyorum:
with TFoo.Create
try
Bar := Baz;
DoSomething();
finally
Free;
end;
TFoo'nun Bar özelliğine Baz değerini atıyorsunuz (Buradaki Baz lokal/global bir değişken vs. olabilir). Aradan zaman geçtikten sonra siz yada başka bir yazılımcı TFoo sınıfına Baz özelliği eklerse sizin hiiiiiiç haberiniz olmadan programınız hatalı sonuç üretecek.
Güzel kullanım aslında her seferinde adını yazmaktansa
Yıllardır "with" kullanırım hiç problem yaşamadım. Doğru notasyon ile global/local problemi yaşamazsınız.
Ek olarak
Documentation Insight gibi bir dökümantasyon aracı kullanarak kodların daha anlaşılır olması sağlanabilir.