delphi xe2 的datasnap socket服务端定义了如下方法 function CreateFunc(AParamDataSet: TDataSet): string;客户端自动生成了如下方法调用function TServerMethodsClient.CreateFunc(AParamDataSet: TDataSet): string;
begin
if FCreateProcedureProviderCommand = nil then
begin
FCreateProcedureProviderCommand := FDBXConnection.CreateCommand;
FCreateProcedureProviderCommand.CommandType := TDBXCommandTypes.DSServerMethod;
FCreateProcedureProviderCommand.Text := 'TServerMethods.CreateFunc';
FCreateProcedureProviderCommand.Prepare;
end;
FCreateProcedureProviderCommand.Parameters[0].Value.SetDBXReader(TDBXDataSetReader.Create(AParamDataSet, FInstanceOwner), True);
FCreateProcedureProviderCommand.ExecuteUpdate;
Result := FCreateProcedureProviderCommand.Parameters[1].Value.GetWideString;
end;使用的过程中发现,客户端这个方法第一次执行就正常,第二次执行就报内存错误---------------------------
Debugger Exception Notification
---------------------------
Project PlanEdit.exe raised exception class $C0000005 with message 'access violation at 0x00591fbe: read of address 0x0000000c'.
---------------------------
Break Continue Help
---------------------------各位大虾遇到过这种情况不?
begin
if FCreateProcedureProviderCommand = nil then
begin
FCreateProcedureProviderCommand := FDBXConnection.CreateCommand;
FCreateProcedureProviderCommand.CommandType := TDBXCommandTypes.DSServerMethod;
FCreateProcedureProviderCommand.Text := 'TServerMethods.CreateFunc';
FCreateProcedureProviderCommand.Prepare;
end;
FCreateProcedureProviderCommand.Parameters[0].Value.SetDBXReader(TDBXDataSetReader.Create(AParamDataSet, FInstanceOwner), True);
FCreateProcedureProviderCommand.ExecuteUpdate;
Result := FCreateProcedureProviderCommand.Parameters[1].Value.GetWideString;
end;使用的过程中发现,客户端这个方法第一次执行就正常,第二次执行就报内存错误---------------------------
Debugger Exception Notification
---------------------------
Project PlanEdit.exe raised exception class $C0000005 with message 'access violation at 0x00591fbe: read of address 0x0000000c'.
---------------------------
Break Continue Help
---------------------------各位大虾遇到过这种情况不?
解决方案 »
- delphi 查找进程出错
- 400帮忙调试一个小问题,愿意的加qq13402043,另外的分数另外开帖送
- 有关DHtmlEdit控件的使用
- 请问斑竹,为什么这几天我的可用分一直不变?
- 想交几个Delphi的朋友,希望共同进步!
- ACCESS数据库如何设置密码?
- 使用idhttp 控件,利用百度网盘API开发,上传文件问题
- NextGrid里面的数据通过fastreport4.0如何 打印
- 哪位大虾能帮我写段告警信息屏蔽的代码 我是菜鸟~ 谢谢拉
- 请问用ImageArray=TImage.Create(Self)怎样在GroupBox控件动态创建控件?
- richviewedit控件 怎么动态的设置行间距啊
- delphi7.0中怎么没有了WIN32组件模板?
所以if FCreateProcedureProviderCommand = nil then并不成立,而直接执行后面的代码了用FreeAndNil试试
FCreateProcedureProviderCommand.Parameters[0].Value.SetDBXReader(TDBXDataSetReader.Create(AParamDataSet, FInstanceOwner), True);
这个最后一个参数是True的意思,是释放TServerMethodsClient对象的时候DataSet也被释放了,这肯定不是你希望的.一般来说,DataSet在DataModule上面。反复要用的。
把那个True,变成False,就行了。就是不要让TServerMethodsClient拥有OwnerInstance。这样
它就不会自动释放DataSet了。或者用另外的带有选择OwnerInstance参数的创建方法,设置OwnerInstance为False