When DA 9.1 upgrade to 9.2,Some definitions have been lost

Hi sir:
When DA was upgraded to 9.2, a previous server file(I maked) went wrong. I remember when I was in DA9.1, no problem. the error msg displayed:

[dcc32 Error] sxMisService_Impl.pas(17): E2291 Missing implementation of interface method IsxMisService.LoginOP

[dcc32 Error] sxMisService_Impl.pas(17): E2291 Missing implementation of interface method IsxMisService.myExecSQL

Why?

PS:
the impl:

type
{ TsxMisService }
TsxMisService = class(TDataAbstractService, IsxMisService) //**************error

DataStreamer: TDABin2DataStreamer;
Test3BP: TDABusinessProcessor;
test4BP: TDABusinessProcessor;
EMPBP: TDABusinessProcessor;
DeparBP: TDABusinessProcessor;
TZGLBP: TDABusinessProcessor;
DABusinessProcessor1: TDABusinessProcessor;
Schema: TDASchema;


procedure LogoutOP;
procedure LoginOP(const aUserID: Utf8String; const aPassword: Utf8String; out aUserInfo: UserInfo; out Loginok: Boolean);
procedure myExecSQL(const aCommand: TMyDataCommand; const aTableName: AnsiString;
            const aParams: DataParameterArray; const aOPSymbol:AnsiString; const aKeys:DataParameterArray);
function myExecFUNC(const myParam: DataParameterArray; const myFuncName: AnsiString): Boolean;
procedure DataAbstractServiceBeforeAcquireConnection(aSender: TObject;
  var aConnectionName: string);

private
function _GetConnection: IDAConnection;

protected
function SQLTblUpdata(const tblName: AnsiString; const Delta: Binary): Binary;

{ IsxMisService methods }

end;

implementation

{$R *.dfm}
uses
{Generated:} sxMisLibrary_Invk, fServerDataModule;

//////////////////////////////////////////////////////////////////////////

the intf:

const LibraryUID: String = ‘{687D191B-48C2-49BC-8540-2DAA649CB574}’;
const DefaultNamespace: String = ‘sxMisLibrary’;
const TargetNamespace: String = ‘sxMisLibrary’;
const IsxMisService_IID: TGUID = ‘{0133C17D-127B-4EBB-A5BC-6241FB7E3E92}’;
type
{ Forward declarations }
IsxMisService = interface;
IsxMisService_Async = interface;
IsxMisService_AsyncEx = interface;
CosxMisService = class;
CosxMisService_Async = class;
CosxMisService_AsyncEx = class;
TsxMisService_Proxy = class;
TsxMisService_AsyncProxy = class;
TsxMisService_AsyncProxyEx = class;

TMyDataCommand = (dcDelData, dcInsData, dcUpdData);

IsxMisService = interface(DataAbstract4_intf.IDataAbstractService)
[’{0133C17D-127B-4EBB-A5BC-6241FB7E3E92}’]
procedure LoginOP(const YGBH: string; const MIMA: string; out aUserInfo: DataAbstract4_intf.UserInfo; out Loginok: Boolean);
procedure LogoutOP;
procedure myExecSQL(const aCommand: TMyDataCommand; const aTableName: string; const aParams: DataAbstract4_intf.DataParameterArray; const aOPSymbol: string; const aKeys: DataAbstract4_intf.DataParameterArray);
function SQLTblUpdata(const TblName: string; const Delta: Binary): Binary;
function myExecFUNC(const myParam: DataAbstract4_intf.DataParameterArray; const myFuncName: string): Boolean;
end;

IsxMisService_Async = interface(DataAbstract4_intf.IDataAbstractService_Async)
[’{9E5F102B-1C80-41FC-A74B-765EDD4F7E36}’]
procedure Invoke_LoginOP(const YGBH: string; const MIMA: string);
procedure Invoke_LogoutOP;
procedure Invoke_myExecSQL(const aCommand: TMyDataCommand; const aTableName: string; const aParams: DataAbstract4_intf.DataParameterArray; const aOPSymbol: string; const aKeys: DataAbstract4_intf.DataParameterArray);
procedure Invoke_SQLTblUpdata(const TblName: string; const Delta: Binary);
procedure Invoke_myExecFUNC(const myParam: DataAbstract4_intf.DataParameterArray; const myFuncName: string);
procedure Retrieve_LoginOP(out aUserInfo: DataAbstract4_intf.UserInfo; out Loginok: Boolean);
function Retrieve_SQLTblUpdata: Binary;
function Retrieve_myExecFUNC: Boolean;
end;

IsxMisService_AsyncEx = interface(DataAbstract4_intf.IDataAbstractService_AsyncEx)
[’{24D8CA39-DFD7-4318-AEAD-9AA1F4A9727C}’]
function BeginLoginOP(const YGBH: string; const MIMA: string; const aCallback: TROAsyncCallback; const aUserData: Pointer = nil): IROAsyncRequest;
function BeginLogoutOP(const aCallback: TROAsyncCallback; const aUserData: Pointer = nil): IROAsyncRequest;
function BeginmyExecSQL(const aCommand: TMyDataCommand; const aTableName: string; const aParams: DataAbstract4_intf.DataParameterArray; const aOPSymbol: string; const aKeys: DataAbstract4_intf.DataParameterArray;
const aCallback: TROAsyncCallback; const aUserData: Pointer = nil): IROAsyncRequest;
function BeginSQLTblUpdata(const TblName: string; const Delta: Binary; const aCallback: TROAsyncCallback; const aUserData: Pointer = nil): IROAsyncRequest;
function BeginmyExecFUNC(const myParam: DataAbstract4_intf.DataParameterArray; const myFuncName: string; const aCallback: TROAsyncCallback; const aUserData: Pointer = nil): IROAsyncRequest;
procedure EndLoginOP(out aUserInfo: DataAbstract4_intf.UserInfo; out Loginok: Boolean; const aRequest: IROAsyncRequest);
procedure EndLogoutOP(const aRequest: IROAsyncRequest);
procedure EndmyExecSQL(const aRequest: IROAsyncRequest);
function EndSQLTblUpdata(const aRequest: IROAsyncRequest): Binary;
function EndmyExecFUNC(const aRequest: IROAsyncRequest): Boolean;
end;

Thanks.

in 9.2. we stopped using AnsiString and UTF8String string types in delphi in favor of linux support because linux compiler doesn’t support these types.
binary compatibility wasn’t changed so data is still serialized as before.

I can offer two workarounds:

  • update RemObjects.inc and uncomment {.$DEFINE CODEGEN4_LEGACYSTRINGS} definition and recompile all RO packages
  • update your _Impl and replace declaration of methods: AnsiString -> String and UTF8String -> String in the same way, as it was declared in _Intf. in this case you don’t need use UTF8 conversion because Unicodestring is already used

It is OK. Thanks