--- ibx/trunk/fbintf/client/2.5/FB25Statement.pas 2021/02/25 11:27:14 314 +++ ibx/trunk/fbintf/client/2.5/FB25Statement.pas 2021/02/25 11:56:36 315 @@ -128,6 +128,7 @@ type FOwnsSQLData: boolean; FBlobMetaData: IBlobMetaData; FArrayMetaData: IArrayMetaData; + FMetadataSize: short; {size of field from metadata} FXSQLVAR: PXSQLVAR; { Points to the PXSQLVAR in the owner object } protected function GetSQLType: cardinal; override; @@ -144,6 +145,7 @@ type function GetIsNullable: boolean; override; function GetSQLData: PByte; override; function GetDataLength: cardinal; override; + function GetSize: cardinal; override; procedure SetIsNull(Value: Boolean); override; procedure SetIsNullable(Value: Boolean); override; procedure SetSQLData(AValue: PByte; len: cardinal); override; @@ -383,6 +385,11 @@ begin Result := FXSQLVAR^.sqllen; end; +function TIBXSQLVAR.GetSize: cardinal; +begin + Result := FMetadataSize; +end; + function TIBXSQLVAR.GetArrayMetaData: IArrayMetaData; begin if GetSQLType <> SQL_ARRAY then @@ -456,6 +463,7 @@ begin FOwnsSQLData := true; with FFirebird25ClientAPI, FXSQLVar^ do begin + FMetadataSize := sqllen; case sqltype and (not 1) of SQL_TEXT, SQL_TYPE_DATE, SQL_TYPE_TIME, SQL_TIMESTAMP, SQL_BLOB, SQL_ARRAY, SQL_QUAD, SQL_SHORT, SQL_BOOLEAN, @@ -980,12 +988,8 @@ begin if (FHandle <> nil) then FreeHandle; if E is EIBInterBaseError then - raise EIBInterBaseError.Create(EIBInterBaseError(E).SQLCode, - EIBInterBaseError(E).IBErrorCode, - EIBInterBaseError(E).Message + - sSQLErrorSeparator + FSQL) - else - raise; + E.Message := E.Message + sSQLErrorSeparator + FSQL; + raise; end; end; FPrepared := true;