Merhaba, sizin için aşağıdaki gibi bir test yaptım. Sonuçları paylaşıyorum;
SQL Server'da kullandığım procedure aşağıdaki gibidir:
Kod: Tümünü seç
CREATE PROCEDURE sp_Wait
AS
WAITFOR DELAY '00:00:40:00'
SELECT CONVERT(VARCHAR(200), NEWID()) AS RetVal
Gözlemleyeceğiniz gibi stored procedure 40 saniye bekleyip ardından bir SELECT sorgusu çalıştırıyor. Delphi tarafında ise TADOConnection sınıfının CommandTimeOut propertysine 50 saniye yazıp bir TADOStoredProcedure üzerinden ilgili stored procedure Open edildiğinde, timeout hatası ile karşılaşırsınız. Ancak, TADOConnection sınıfının Execute metodu ile aynı stored procedure'yi çalıştırırsanız bir hata almazsınız. Bu durumda; TADOConnection sınıfının CommandTimeOut property'sine yazılan değerlerin sadece TADOConnection içinde kullanılan Command'ler için kullanıldığı hükmüne varabilirsiniz.
Bunun yanında TADOStoredProc sınıfının CommandTimeOut property'sine 50 saniye yazarsanız; TADOStoredProc'un da herhangi bir TimeOut ile karşılaşmadığını gözlemleyebilirsiniz. Delphi'nin eski sürümlerinde TADOStoredProc'un CommandTimeOut property'sinin protected olarak tanımlandığını hatırlıyorum eğer yanlış hatırlamıyorsam. Eğer sizde bu eski sürümlerden birisini kullanıyorsanız, bir hack sınıfı ile erişim sağlayıp CommandTimeOut property'sini güncellemelisiniz.
Örneğin;
Kod: Tümünü seç
type
THackSP = class(TADOStoredProc);
..
begin
THackSP(ADOStoredProc1).CommandTimeOut := 50;
ADOStoredProc1.Open;
..
..
end;