Witam Państwa, pisze z prośbą o wytłumaczenie pewnego zjawiska. Mam specjalnie spreparowane zapytanie które powinno generować błąd (wpisanie null'a do pola int not null):
begin transaction;
begin try
update tabela set pole=null where id=1;
end try
begin catch
select ERROR_NUMBER() AS ErrorNumber,ERROR_SEVERITY() AS ErrorSeverity,ERROR_STATE() AS ErrorState,ERROR_PROCEDURE() AS ErrorProcedure,ERROR_LINE() AS ErrorLine,ERROR_MESSAGE() AS ErrorMessage;
if @@TRANCOUNT>0 rollback transaction;
end catch;
if @@TRANCOUNT>0 commit transaction;
Kiedy wywołam to w ManagementStudio wszystko jest ok dostaje tabelkę z info o błędzie, natomiast jeśli wywołam to z poziomu Delphi (ADO) w następujący sposób:
var
rs:_recordset;
str: string;
begin
str := '...tu wpisuje to zapytanie...';
rs := dm.conRZO.Execute(str, cmdText, []);
showmessage(inttostr(rs.RecordCount));
Dostaje komunikat "Operacja nie jest dopuszczalna, gdy obiekt jest zamknięty" natomiast wykonanie najzwyklejszego selecta (select * from tabela) zwraca wypełnionego RecordSet'a.