2
아래에 표시된 줄에서 다음 오류가 발생합니다. 그리고 나는 왜 우리가이 오류를 겪고 있는지 알 수 없다.DataSnap 프록시 문제
Project ChirpSR.exe raised exception class $C0000005 with message 'access violation at 0x00e8d088: read of address 0x00000000'.
아래의 코드는 DataSnap 서버에 대한 자동 생성 된 프록시 클래스에서입니다.
interface
uses Data.DBXCommon, Data.DBXClient, Data.DBXDataSnap, Data.DBXJSON, Datasnap.DSProxy, System.Classes, System.SysUtils, Data.DB, Data.SqlExpr, Data.DBXDBReaders, Data.DBXCDSReaders, Data.DBXJSONReflect;
....
type
TServerMethods1Client = class(TDSAdminClient)
private
FEchoStringCommand: TDBXCommand;
FReverseStringCommand: TDBXCommand;
FGetValleysCommand: TDBXCommand;
FUpdateUserCommand: TDBXCommand;
public
constructor Create(ADBXConnection: TDBXConnection); overload;
constructor Create(ADBXConnection: TDBXConnection; AInstanceOwner: Boolean); overload;
destructor Destroy; override;
function EchoString(Value: string): string;
function ReverseString(Value: string): string;
function GetValleys: TJSONValue;
function UpdateUser(jsonobj: TJSONObject): Integer;
end;
....
// This function runs fine
function TServerMethods1Client.GetValleys: TJSONValue;
begin
if FGetValleysCommand = nil then
begin
FGetValleysCommand := FDBXConnection.CreateCommand;
FGetValleysCommand.CommandType := TDBXCommandTypes.DSServerMethod;
FGetValleysCommand.Text := 'TServerMethods1.GetValleys';
FGetValleysCommand.Prepare;
end;
FGetValleysCommand.ExecuteUpdate;
Result := TJSONValue(FGetValleysCommand.Parameters[0].Value.GetJSONValue(FInstanceOwner));
end;
// This function errors at the highlighted line
function TServerMethods1Client.UpdateUser(jsonobj: TJSONObject): Integer;
begin
if FUpdateUserCommand = nil then
begin
FUpdateUserCommand := FDBXConnection.CreateCommand; <============= Error Here
FUpdateUserCommand.CommandType := TDBXCommandTypes.DSServerMethod;
FUpdateUserCommand.Text := 'TServerMethods1.UpdateUser';
FUpdateUserCommand.Prepare;
end;
FUpdateUserCommand.Parameters[0].Value.SetJSONValue(jsonobj, FInstanceOwner);
FUpdateUserCommand.ExecuteUpdate;
Result := FUpdateUserCommand.Parameters[1].Value.GetInt32;
end;
....
서버가 실행되고 있지 않으면 첫 번째 기능이 오류가 발생합니다.
내가 곤혹 스럽다.
나는 또한 DataSnap을 처음 사용합니다.
오류 메시지에 'FDBXConnection = nil'이 무엇을 제안합니다. –
@FreeConsulting하지만 FDBXConnection은 프록시를 만드는 과정에서 생성됩니까 ?? 오, 내가 놓친 것을 본다. 연결은 작성시 매개 변수로 전달되어야합니다. 그들이 매개 변수없이 프록시 생성을 허용한다는 것이 이상하게 보입니까? 전 세계적으로 한 번 프록시를 만들거나 호출 할 때마다 로컬로 프록시를 만들어야합니까? 이 댓글을 답장하면 받아 들일 것입니다. – gwardell