Insert işleminde parametre kullanarak veritabanına kayıt attığımda profiler ile incelediğimde SET FMTONLY sorgusu çalışıyor.
Fakat düz bir insertte bu sorgu çalışmıyor. SCOPE_IDENTITY() ile referansı almam gerektiğinden parametre ile kayıt atıyorum.
SET FMTONLY sorgusunun çalışmasını istemiyorum. Bunu nasıl engelleyebilirim. Acaba insert ederken hatalımı kullanıyorum kodlarımı veya bu sorgunun çalışıp çalışmaması parametrik bir şey midir? Kod bloğum aşağıdadır. Yardımcı olursanız çok sevinirim.
Kod: Tümünü seç
var
QUnit: TMSQuery;
UnitRef: Integer;
begin
if edtCode.Text <> '' then
begin
QUnit := TMSQuery.Create(nil);
QUnit.Connection := fmMain.db;
with QUnit do
begin
SQL.Clear;
SQL.Add('SELECT CODE');
SQL.Add('FROM "' + Database + '".."UNIT" WITH(NOLOCK)');
Open;
First;
end;
try
if not QUnit.Locate('CODE', Variant(edtCode.Text), [loCaseInsensitive]) then
begin
QUnit.Close;
QUnit.Connection.StartTransaction;
try
with QUnit do
begin
SQL.Clear;
SQL.Add('SET NOCOUNT OFF; INSERT INTO "' + Database + '".."UNIT" ');
SQL.Add('("CODE", "NAME", "CARDTYPE", "ACODE", "BCODE")');
SQL.Add('VALUES(:CODE, :NAME, :CARDTYPE, :ACODE, :BCODE); SELECT SCOPE_IDENTITY()');
Params.ParamByName('CODE').Value := edtCode.Text;
Params.ParamByName('NAME').Value := edtName.Text;
Params.ParamByName('CARDTYPE').Value := 5;
Params.ParamByName('ACODE').Value := edtACode.Text;
Params.ParamByName('BCODE').Value := edtBCode.Text;
ExecSQL;
UnitRef := Fields.Fields[0].Value;
end;
QUnit.Connection.Commit;
except
QUnit.Connection.Rollback;
TfmMessages.MessagesExecute(1, 4, MB_ICONHAND, #13#10 + #13#10 +
' Birim kaydedilirken bir hata oluştu!');
end;
end else
begin
TfmMessages.MessagesExecute(1, 3, MB_ICONWARNING, #13#10 + #13#10 +
' Aynı kodlu bir birim daha var!');
end;
finally
QUnit.Free;
end;
end;
end;