Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Delphi Ide hatası
#1
Herkese kolaylıklar ve hayırlı kazançlar diliyorum.

Bir süredir karşılaştığım bir sorunun cevabı var mı en azından mevcut sürüm ile yapılabilecek bir çözümü  var  mı merak ediyorum. Delphi 10.2 Tokyo Sürümü kullanıyorum. (Lisansım dan dolayı o yüzden güncelleme şansım şu an için yok) 

Sorunum şu özelikle thread ile ilgili kod yazdığımda bazen ide kaynaklı hatalardan dolayı kod çalışıyor olmasına rağmen herhangi bir yerde enter a bastığımda sanki parantez veya begin end hataları varmış, eksikmiş gibi ekleme yapıyor. Ama kodu derleyip kullanabiliyorum sorun yok sadece kod yazmamı çok zorlaştırıyor ve yazdığım kısımda çok basit ve küçük bir yer daha önce de olmuştu kodu değiştirerek bazı kısımları iptal ederek düzenlemiştim. Ama özelikle thread işlemlerinde try ..except ve try ... finally kullandığım durumlarda çok sık bu hatayı alıyorum.


procedure TmainMenu.SendDataToOtherDevice(IP: string; Port: Integer; Data: string);
begin
 TTask.Run(procedure
   var
     Client: TIdTCPClient;
   begin
     // IP ve Port kontrolü
     if (IP = '') or (Port <= 0) or (Port > 65535) then
     begin
       TThread.Synchronize(nil, procedure
         begin
           ShowMessage('Geçersiz IP veya Port! IP: ' + IP + ', Port: ' + IntToStr(Port));
         end);
       Exit; // İşlemi sonlandır
     end;

     Client := TIdTCPClient.Create(nil);
     try
       Client.Host := IP;
       Client.Port := Port;

       // Bağlantıyı dene
       try
         Client.Connect;
       except
         on E: Exception do
         begin
           TThread.Synchronize(nil, procedure
             begin
               ShowMessage('Bağlantı hatası: ' + E.Message + ' | IP: ' + IP + ', Port: ' + IntToStr(Port));
             end);
           Exit; // Hata durumunda işlemi sonlandır
         end;
       end;

       // Veriyi gönder
       Client.IOHandler.WriteLn(Data);

       TThread.Synchronize(nil, procedure
         begin
           Memo1.Lines.Add('Sending: ' + Data + ' to ' + IP + ':' + IntToStr(Port));
         end);

       Client.Disconnect;
     finally
       Client.Free;
     end;
   end);
end;


procedure TmainMenu.ServerExecute(AContext: TIdContext);
begin
 TTask.Run(procedure
   var
     ReceivedData,
     TableNo,
     ReceiptNo,
     ClientIp,
     HostIp: string;
     PaymentType: smallint;
     DataArray: TArray<string>;
     AdoQuery: TADOQuery;
     PosData: string;
   begin
     // COM kütüphanelerini başlat
     CoInitialize(nil);
     try
       try
         ReceivedData := AContext.Connection.IOHandler.ReadLn;  // Gelen veriyi al
         SplitStringData(ReceivedData, DataArray); // Veriyi parçala

         if Length(DataArray) > 0 then
           TableNo := DataArray[0];
         if Length(DataArray) > 1 then
           ReceiptNo := DataArray[1];
         if Length(DataArray) > 2 then
           ClientIp := DataArray[2];
         if Length(DataArray) > 3 then
           PaymentType := StrToInt(DataArray[3]);

         // UI güncellemeleri ana thread'e iletilir
         TThread.Synchronize(nil, procedure
           begin
             memo1.Lines.Add('Receive data: ' + ReceivedData);
             memo1.Lines.Add('Table: ' + TableNo + ' | Client IP: ' + ClientIp + ' | Receipt: ' + ReceiptNo + ' | Payment Type: ' + IntToStr(PaymentType));
             memo1.Lines.Add('Connection String : ' + DbDataPath);
           end);

         // SQL sorgusu için TADOQuery oluştur
         AdoQuery := TADOQuery.Create(self);
         try
           AdoQuery.ConnectionString := dbDataPath ; // ADO bağlantınızı burada ayarlayın
           AdoQuery.SQL.Text := ' SELECT * FROM restoran_tmp_satis WHERE fisno = ' + receiptNo ;
           AdoQuery.Open;

           if not AdoQuery.IsEmpty then
           begin
             // SQL'den gelen verileri kontrol edilip fiş kesilecek
             
             TThread.Synchronize(nil, procedure
               begin
                 memo1.Lines.Add('Variler okundu kontrol ediliyor : ' + PosData);
               end);
           end
           else
           begin
             TThread.Synchronize(nil, procedure
               begin
                 //ShowMessage('Fiş bulunamadı: ' + ReceiptNo);
                 SendDataToOtherDevice(ClientIp, 12376, 'Err!');
               end);
             Exit; // Fiş bulunamazsa işlemi sonlandır
           end;
         finally
           AdoQuery.Free;
         end;

         // Diğer cihaza veri gönder
         SendDataToOtherDevice(ClientIp, 12376, 'Ok');

         TThread.Synchronize(nil, procedure
           begin
             memo1.Lines.Add('Send data: işlemler tamamlandı | Ok');
           end);

         exit;

       except
         on E: Exception do
         begin
           if adoQuery<>nil then
              FreeAndNil(adoQuery) ;

           TThread.Synchronize(nil, procedure
             begin
               ShowMessage('Hata: ' + E.Message);
             end);
         end;
       end;
     finally
       // COM kütüphanelerini serbest bırak
       CoUninitialize;
     end;
   end);
end;

Daha önce bu tarz bir   hata ile karşılaşan veya çözümü konusunda bilgisi olan bir arkadaş var ise yardım rica ediyorum.

Şimdiden Herkese teşekkürlerimi sunuyorum.
Cevapla
#2
Thread kullandığın unitlerde, delphinin ilkinden son sürümüne kadar hata var. Ide tamamen sapıtıyor bir Allahın kulu da, yav biz bunun tanesine 130 bin türk lirası paraya satıyoruz şu hataları bari düzeltelim demiyor. bir proje geliştirirken günde 10 defa ideyi komple kapatıp açıyorum kod tamamlama çalışmıyor. hata olmamasına rağmen alakasız bir propertyinin altını kırmızı çiziyor.
WWW
Cevapla
#3
cevap için teşekkür ederim bu konuda yalnız olmadığımı bilmek içimi az da olsa rahatlattı , ama ben kapatıp açsam da farketmiyor sürümden dolayı olabilir emin değilim ama dediğiniz gibi çok doğru çalışmıyor şimdi farketttim , try.. except bloku hata vermiyor doğru ama çalıştığı zaman doğru olarak çalışmıyor , tam olarak ne yapacağımdan da emin değilim.
Cevapla
#4
Bu durum, Generics 'lerden kaynaklanıyor. Hakikaten de sinir bozucu bir durum. Ben geçici bir çözüm olarak, değişiklik yapacağım kod bloğunu remarklı hale getirip değişikliklerimi yapıyorum, sonra da remarkları kaldırıyorum. Yoksa her bir enter'a basışta begin ya da end atması gerçekten sıkıntılı. Belki yeni update'ler ile düzeltmişlerdir.

Kod tamamlama olayına gelince; bazen hakikaten çalışamayabiliyor. Bu durumda; Tools menüsünden Configure Tools seçeneğini seçin. Ardından, Add düğmesine basın. Title kısmına &Kill LSP , Program kısmına taskkill ve Parameters kısmına ise /IM DelphiLSP.exe /F değerlerini girip onaylayın. Artık ne zaman kod tamamlama çalışmaz duruma gelirse, IDE'yi kapatıp açmadan Tools menüsüne eklenen Kill LSP menü item'ına tıklayıp sorunu bertaraf edebilirsiniz Wink
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#5
(03-02-2025, Saat: 16:10)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Bu durum, Generics 'lerden kaynaklanıyor. Hakikaten de sinir bozucu bir durum. Ben geçici bir çözüm olarak, değişiklik yapacağım kod bloğunu remarklı hale getirip değişikliklerimi yapıyorum, sonra da remarkları kaldırıyorum. Yoksa her bir enter'a basışta begin ya da end atması gerçekten sıkıntılı. Belki yeni update'ler ile düzeltmişlerdir.

Kod tamamlama olayına gelince; bazen hakikaten çalışamayabiliyor. Bu durumda; Tools menüsünden Configure Tools seçeneğini seçin. Ardından, Add düğmesine basın. Title kısmına &Kill LSP , Program kısmına taskkill ve Parameters kısmına ise /IM DelphiLSP.exe /F değerlerini girip onaylayın. Artık ne zaman kod tamamlama çalışmaz duruma gelirse, IDE'yi kapatıp açmadan Tools menüsüne eklenen Kill LSP menü item'ına tıklayıp sorunu bertaraf edebilirsiniz Wink

Abi 12.2 sürümünde bile aynı sorun var. Sene olmuş 2025
.net tarafında kodu copilot yazıyor burada tek tek biz uğraşıyoruz Smile
WWW
Cevapla
#6
Embarcadero LSP yapısını ilk entegre ettiğinde, bu tip sorunlar vardı. 
Son bir kaç sürümde (Release notlarına bakarsanız); özellikle LSP iyileştirmeleri yapıldı ve son sürümde bu tip sorunlarla (Her enter tuşunda sürekli end yazması veya bilinen metodların altını çizmesi vb.) karşılaşmadım.

@Bay_Y nin paylaştığı kodları, demo bir uygulamada test ettim.

Delphi sürümü: 12.2


Begin : = end / 2;
Cevapla
#7
(03-02-2025, Saat: 16:10)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Bu durum, Generics 'lerden kaynaklanıyor. Hakikaten de sinir bozucu bir durum. Ben geçici bir çözüm olarak, değişiklik yapacağım kod bloğunu remarklı hale getirip değişikliklerimi yapıyorum, sonra da remarkları kaldırıyorum. Yoksa her bir enter'a basışta begin ya da end atması gerçekten sıkıntılı. Belki yeni update'ler ile düzeltmişlerdir.

Kod tamamlama olayına gelince; bazen hakikaten çalışamayabiliyor. Bu durumda; Tools menüsünden Configure Tools seçeneğini seçin. Ardından, Add düğmesine basın. Title kısmına &Kill LSP , Program kısmına taskkill ve Parameters kısmına ise /IM DelphiLSP.exe /F değerlerini girip onaylayın. Artık ne zaman kod tamamlama çalışmaz duruma gelirse, IDE'yi kapatıp açmadan Tools menüsüne eklenen Kill LSP menü item'ına tıklayıp sorunu bertaraf edebilirsiniz Wink

Bilgilendirme için çok teşekkür ediyorum.

(03-02-2025, Saat: 18:02)RAD Coder Adlı Kullanıcıdan Alıntı: Embarcadero LSP yapısını ilk entegre ettiğinde, bu tip sorunlar vardı. 
Son bir kaç sürümde (Release notlarına bakarsanız); özellikle LSP iyileştirmeleri yapıldı ve son sürümde bu tip sorunlarla (Her enter tuşunda sürekli end yazması veya bilinen metodların altını çizmesi vb.) karşılaşmadım.

@Bay_Y nin paylaştığı kodları, demo bir uygulamada test ettim.

Delphi sürümü: 12.2


Çok teşekkür ederim  , şu an için lisans yenileme gibi bir şansım yok mevcut sürüm ile devam etmem gerekiyor. Bilgilendirme için hepinize çok teşekkür ediyorum.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  matematiksel karşılaştırma hatası nevzatc 7 441 14-04-2026, Saat: 06:36
Son Yorum: emailx45
  yapay zeka delphi kl007 9 624 26-02-2026, Saat: 09:12
Son Yorum: mrmarman
  Win 11 ve Delphi 7 Minimize sorunu. enigma 7 495 11-02-2026, Saat: 10:27
Son Yorum: RAD Coder
Question Delphi formunu nasıl otomatik tam ekran yapabilirim ? erdemklt0 2 321 23-01-2026, Saat: 10:02
Son Yorum: csunguray
  Delphi SLL kullanım sorunu Bay_Y 12 1.317 22-12-2025, Saat: 18:11
Son Yorum: Bay_Y



Konuyu Okuyanlar: 1 Ziyaretçi