DBExpress 및 Delphi XE를 사용하여 쿼리 벨로 우를 실행할 때 문제가 있습니다. 실행 된 쿼리에서 마지막 ID를 가져와야합니다.커서가 반환되지 않음 반환 값이있는 SQL 문 실행시 쿼리
function TServerDBUtils.ExecuteQueryWithIdentity(ASQLConn: TSQLConnection): Integer;
var
newSQLQuery: TSQLQuery;
begin
Result := -1;
newSQLQuery := TSQLQuery.Create(nil);
try
with newSQLQuery do
begin
SQLConnection := ASQLConn;
SQL.Clear;
SQL.Add('Insert into SampleTable(uomname) values(' + Quotedstr('bag') +')';
SQL.Add('Select Scope_Identity()');
Open;
Result:= Fields[0].AsInteger;
end;
finally
FreeAndNil(newSQLQuery);
end;
end;
"커서가 반환되지 않은 쿼리"오류가 발생합니다. FireDac & Delphi XE5를 사용하여 이전에 같은 방법을 사용했지만 오류가 없습니다. DBExpress에서 "open"이 그런 일을 할 수 없는지 궁금합니다. 어떤 방법을 사용해야합니까?
function TServerDBUtils.ExecuteQueryWithIdentity(ASQLConn: TSQLConnection): Integer;
var
newSQLQuery: TSQLQuery;
begin
Result := -1;
newSQLQuery := TSQLQuery.Create(nil);
try
with newSQLQuery do
begin
SQLConnection := ASQLConn;
SQL.Clear;
SQL.Add('Insert into SampleTable(uomname) values(' + Quotedstr('bag') +')';
ExecSQL;
SQL.Clear;
SQL.Add('Select Scope_Identity()');
Open;
Result:= Fields[0].AsInteger;
end;
finally
FreeAndNil(newSQLQuery);
end;
end;
을 그리고 항상 null 값을 가지고, 어쩌면 다른 세션 때문에 (우리는 우리의 프로젝트에 대한 dbExpress를 사용해야합니다) 나는 이것을 시도했습니다. 나쁜 영어로 죄송합니다. 미리 도움을 청하십시오.
업데이트 : 우리가 @@ ID를 사용하는 경우 작동 :
SQL.Add('Insert into SampleTable(uomname) values(' + Quotedstr('bag') +')';
ExecSQL;
SQL.Clear;
SQL.Add('Select @@Identity');
Open;
Result:= Fields[0].AsInteger;
을하지만, SQLServer에이 있다면 그 테이블에 트리거 (삽입에) 발사 있다는 이야기로 문제가있다는, 반환 값은 삽입 된 테이블의 마지막 ID. SQL 서버의 사용에
저장 프로 시저를 사용하면 더 쉽게 사용할 수 있습니다. – whosrdaddy