* Implemented TIBConnection.RowsAffected

git-svn-id: trunk@8877 -
This commit is contained in:
joost 2007-10-21 11:24:26 +00:00
parent 8d215c8ada
commit f4d65dc92c

View File

@ -89,6 +89,7 @@ type
procedure UpdateIndexDefs(var IndexDefs : TIndexDefs;TableName : string); override;
function GetSchemaInfoSQL(SchemaType : TSchemaType; SchemaObjectName, SchemaPattern : string) : string; override;
procedure LoadBlobIntoBuffer(FieldDef: TFieldDef;ABlobBuf: PBufBlobField; cursor: TSQLCursor; ATransaction : TSQLTransaction); override;
function RowsAffected(cursor: TSQLCursor): TRowsCount; override;
public
constructor Create(AOwner : TComponent); override;
procedure CreateDB; override;
@ -1132,6 +1133,52 @@ begin
CheckError('TIBConnection.CreateBlobStream isc_get_segment', FStatus);
end;
function TIBConnection.RowsAffected(cursor: TSQLCursor): TRowsCount;
var info_request : string;
resbuf : array[0..63] of byte;
i : integer;
BlockSize,
subBlockSize : integer;
SelectedRows,
InsertedRows : integer;
begin
SelectedRows:=0;
InsertedRows:=0;
with cursor as TIBCursor do
begin
info_request := chr(isc_info_sql_records);
if isc_dsql_sql_info(@Status[0],@Statement,Length(info_request), @info_request[1],sizeof(resbuf),@resbuf) <> 0 then
CheckError('RowsAffected', Status);
i := 0;
while not (byte(resbuf[i]) in [isc_info_end,isc_info_truncated]) do
begin
BlockSize:=isc_vax_integer(@resbuf[i+1],2);
if resbuf[i]=isc_info_sql_records then
begin
inc(i,3);
BlockSize:=BlockSize+i;
while (resbuf[i] <> isc_info_end) and (i < BlockSize) do
begin
subBlockSize:=isc_vax_integer(@resbuf[i+1],2);
if resbuf[i] = isc_info_req_select_count then
SelectedRows := isc_vax_integer(@resbuf[i+3],subBlockSize)
else if resbuf[i] = isc_info_req_insert_count then
InsertedRows := isc_vax_integer(@resbuf[i+3],subBlockSize);
inc(i,subBlockSize+3);
end;
end
else
inc(i,BlockSize+3);
end;
end;
if SelectedRows>0 then result:=SelectedRows
else Result:=InsertedRows;
end;
{ TIBConnectionDef }
class function TIBConnectionDef.TypeName: String;