23-08-2018, Saat: 17:27
(Son Düzenleme: 23-08-2018, Saat: 23:47, Düzenleyen: TescilsizUzman.)
Öncelikle Herkesin bayramını en içten dileklerimle kutluyor sağlık mutluluk getirmesini diliyorum.
3-4 gündür uğraştığım bir anlam veremediğim bir sorunumu sizinle paylaşmak istiyorum.
SQl Server üzeirndeki store Procedure SQl managment üzerinden çalıştığında sorunsuz oalrak çalışıyor ekran çıktısı aşağıda hatta çalışıp çalışmadığını anlamak için aralara PRINT ile bazı kodlar yazdım.
ama aynı store procedure ü delphi içinden çağırdığımda geriye hata dönmüyor ama değer de dönmüyor daha önemlisi hiçbir yere kayıt yapmamış veya kayıt silmemiş kısaca hiç işlem yapmamış görünüyor.
Buda Store Procedure
Delphi içinden Debug yaparken şöyle birşey gördüm . . Yukarıda kodun içine yazdım böyle bir hata { "İşlem bağlamı başka bir oturum tarafından kullanılıyor" } bunula ilgili bir araştırma yaptım öncelikle
Service hizmetinden Dağıtılmış İşlem Düzenliyicisinin çalışması gerekiyor diye yazmış bende çalışmıyordu ama yinede SQl server üzerinden sorunsuz olarak kayıt yapıyordu , yinede çalıştırdım onu çalıştırdıktan sonra bu hatayı vermeye başladı o stop durumda iken SQl server içinden yine sorun yok fakat store procedure ile delphi den çalıştırdığımda "msdtc on server is unavailable" hatası veriyordu .
3-4 gündür uğraştığım bir anlam veremediğim bir sorunumu sizinle paylaşmak istiyorum.
SQl Server üzeirndeki store Procedure SQl managment üzerinden çalıştığında sorunsuz oalrak çalışıyor ekran çıktısı aşağıda hatta çalışıp çalışmadığını anlamak için aralara PRINT ile bazı kodlar yazdım.
ama aynı store procedure ü delphi içinden çağırdığımda geriye hata dönmüyor ama değer de dönmüyor daha önemlisi hiçbir yere kayıt yapmamış veya kayıt silmemiş kısaca hiç işlem yapmamış görünüyor.
Function StoreProcRun_HU(prossName : String ; subekodu , kod : integer ; subeadi : String ) : smallint ; Begin With FrmSifreGiris do begin With AdoProc1 do begin try Connection := StrConnection ; ACtive := False; ProcedureName := prossName ; Parameters.Refresh; Parameters.ParamByName('@kullanici').Value := user_kullanici ; Parameters.ParamByName('@subekodu').Value := subekodu ; Parameters.ParamByName('@subeadi').Value := subeadi ; Parameters.ParamByName('@stokkodu').Value := kod ; Parameters.ParamByName('@sonuc').Value; Parameters.ParamByName('@sonuc').Direction := pdOutput; Parameters.ParamByName('@hata').Value; Parameters.ParamByName('@hata').Direction := pdOutput; ExecProc; if AdoProc1.Parameters.ParamByName('@sonuc').Value <> 0 then begin Application.MessageBox(Pchar('Lütfen Dikkat' + #13 + #13 + 'Üzgünüz! Ürün kartınız kaydedilemedi.' + #13 + #13 + 'Hata :' + AdoProc1.Parameters.ParamByName('@hata').Value ), Pchar('İşlem Tamamlanamadı.'), 0 + MB_ICONWARNING); result := AdoProc1.Parameters.ParamByName('@sonuc').Value ; end else begin result := AdoProc1.Parameters.ParamByName('@sonuc').Value ; end; except on e:exception do begin ShowMessage('SQL :' + e.Message); end; end; end; end; End;
Buda Store Procedure
ALTER PROCEDURE [dbo].[H_SubeyeUrunAktarimi] ( @subekodu as int , @subeadi as nvarchar(50) , @stokkodu as int , @kullanici as nvarchar(30), @sonuc as int output , @hata as nvarchar(MAX) output ) AS BEGIN DECLARE @sSQL NVarchar(max) DECLARE @Sure as int DECLARE @linkserver nvarchar(50) , @catalog nvarchar(50) DECLARE @linkedmerkez nvarchar(30) , @linkedsube nvarchar(30), @katalog as nvarchar(50) SET @linkedmerkez = '[MERKEZ]' Set @sonuc=0 BEGIN TRY SET @sSQL = ' Select @linkserver = linkserver , @katalog = katalog From SubeTanimlari Where subekodu= ' + CAST (@subekodu as nvarchar) EXEC sp_ExecuteSQL @sSQL , N'@linkserver nvarchar(50) OutPUT , @katalog nvarchar(50) OUTPUT ' , @linkserver OUTPUT , @katalog OUTPUT SET @Hata=@Hata + ' Linkserver : ' + @linkserver + ' / katalog : ' + @katalog SET @linkedsube = '['+@linkserver+'].[' + @katalog + ']' PRINT 'linkedsube : ' + @linkedsube { Burası çalıştığında işlem bağlamı başka bir oturum tarafındna kullanılıyor diye hata veriyor. ne oluyor bilmiyorum ama hata geri dönmüyor.} SET @sSQL = ' DELETE FROM ' + @linkedsube + '.dbo.UrunKartlari Where stokkodu = ' + Cast(@stokkodu as nvarchar) EXEC sp_executesql @sSQL } PRINT 'DELET SQL : ' + @sSql PRINT 'Sonuc : ' + CAST(@@ROWCOUNT as nvarchar) IF @@ERROR = 0 BEGIN SET @sSQL = ' INSERT INTO ' + @linkedsube + '.dbo.Urunkartlari (stokturu_i, aktif, bagli, sor, ureticikodu, ureticigurubu, stokkodu, stokadi, urungurubu, kdv, birimi, birimi_t, sirano, sube, ozelyetki, fiyatdegismez, isimdegismez, urungurubudegismez, urungorselidegismez, satisgorunmesin, gorsel, kayittarihi, songuncelleme, recete, listedeciksin) ' SET @sSQl = @sSQL + ' SELECT stokturu_i, aktif, bagli, sor, ureticikodu, ureticigurubu, stokkodu, stokadi, urungurubu, kdv, birimi, birimi_t, sirano, sube, ozelyetki, fiyatdegismez, isimdegismez, urungurubudegismez, urungorselidegismez, satisgorunmesin, gorsel, kayittarihi, songuncelleme, recete, listedeciksin FROM ' + @linkedmerkez + '.dbo.Urunkartlari ' SET @sSQl = @sSQL + ' Where stokkodu = ' + Cast(@stokkodu as nvarchar) EXEC sp_executesql @sSQL PRINT ' INSERT Sonuc : ' + CAST(@@ROWCOUNT as nvarchar) END PRINT 'Hata : ' + @HATA SET @Sonuc=@@ERROR IF @@ERROR=0 INSERT INTO LGDegisiklik ( islemturu, stokkodu, kullanici, subekodu, subeadi, sure, sonuc) Values ('HU', @stokkodu , @kullanici , @subekodu , @subeadi , @sure , @@ERROR) ELSE INSERT INTO LGDegisiklik ( islemturu, stokkodu, kullanici, subekodu, subeadi, sure, sonuc) Values ('HU', @stokkodu , @kullanici , @subekodu , @subeadi , @sure , 1 ) PRINT ' INSERT LOG ' + CAST(@@ROWCOUNT as nvarchar) END TRY BEGIN CATCH SET @hata=@hata + ' [ ' + ERROR_MESSAGE() + ' ] ' RAISERROR ('Hata Oluştu : ' ,16,1) END CATCH END
Delphi içinden Debug yaparken şöyle birşey gördüm . . Yukarıda kodun içine yazdım böyle bir hata { "İşlem bağlamı başka bir oturum tarafından kullanılıyor" } bunula ilgili bir araştırma yaptım öncelikle
Service hizmetinden Dağıtılmış İşlem Düzenliyicisinin çalışması gerekiyor diye yazmış bende çalışmıyordu ama yinede SQl server üzerinden sorunsuz olarak kayıt yapıyordu , yinede çalıştırdım onu çalıştırdıktan sonra bu hatayı vermeye başladı o stop durumda iken SQl server içinden yine sorun yok fakat store procedure ile delphi den çalıştırdığımda "msdtc on server is unavailable" hatası veriyordu .