这个现象是不是Delphi XE7 DataSnap 的BUG

Oraclers 2016-11-27 05:16:54
如下程序片段:
//服务器端:取得数据封包
function TPATDMServerMethods.GetDBData(Value: string): OleVariant;
var
adsQuery: TADODataSet;
dspProvider: TDataSetProvider;
begin
dspProvider := TDataSetProvider.Create(self);
adsQuery := TADODataSet.Create(self);
try
adsQuery.Connection := connDB01TFMS;
adsQuery.CommandText := Value;
dspProvider.DataSet := adsQuery;
adsQuery.Open;
Result := dspProvider.Data;
finally
adsQuery.Close;
FreeAndNil(adsQuery);
FreeAndNil(dspProvider);
end;
end;
//改变SQL以得不同表的数据
function TPATDMServerMethods.ChangeQuerySQL(Value: string): integer;
begin
Result := 0;
with adsDBQuery do
begin
Close;
if Value<>'' then
CommandText := Value;
Open;
Result := RecordCount;
end;
end;
//客户端 ,用服务器端第一个方法取得数据。
function GetData(const AcmdText: string; var ADataSet: TClientDataSet):boolean;
var
AData: OleVariant;
AProxy: TPATDMServerMethodsClient;
begin
Result := False;
if not PATDMDM.connPATDM.Connected then
PATDMDM.connPATDM.Connected := True;
AProxy :=TPATDMServerMethodsClient.Create(PATDMDM.connPATDM.DBXConnection);
try
try
AData := AProxy.GetDBData(AcmdText);
if not (VarIsNull(AData) or VarIsEmpty(AData)) then
begin
ADataSet.Close;
ADataSet.Data := AData;
ADataSet.Open;
Result := True;
end
else
begin
Result := False;
raise Exception.Create('获取数据失败,请重试!');
end;
except
on E: Exception do
begin
Result := False;
raise Exception.Create('连接远程服务器获取数据出错,错误:' + E.Message);
end;
end;
finally
FreeAndNil(AProxy);
end;
end;

//调用上面客户端函数
GetData('select * from dbo.TF_Users order by UserID',cdsUsers)

问题:当用户数据表TF_Users有一个类型为varbinary(256)字段(用于存放加密后的密码,数据库MS SQL 2005)时,当服务端程序第一次启动,客户端第一次连接后,调用上面的函数获取数据时都会出错,错误内容是:存取到无效地址在xxxxx,然后程序就死了,服务端服务也很难停止。
为了这个问题真是伤透脑筋。后经反复测试发现,只要表中不包含这个varbinary(256)类型字段,就不会出现上述错误。但我不明白为什么会这样?是不是Delphi XE7 的BUG?请高手说说。谢了!


...全文
747 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Oraclers 2016-11-28
  • 打赏
  • 举报
回复
没有回复,顶下。
Oraclers 2016-11-27
  • 打赏
  • 举报
回复
在客户端用服务端改变SQL命令的那个函数也一样的错误。还有就是当客户端第一次出错后,再运行第2次就不会出错了。
内容概要:本文围绕“计及蓄意攻击的电网多阶段级联故障诱发机制与MILP优化模型”展开,提出了一种基于混合整数线性规划(MILP)的双层优化模型,用于模拟和分析在蓄意攻击下电力系统多阶段级联故障的传播机理与脆弱性特征。通过构建攻击者与系统运行之间的博弈框架,上层模型刻画攻击者以最小代价最大化系统损失的最优攻击策略,下层模型模拟电网在故障后的交流潮流重分布、负荷切除及系统恢复行为,从而实现对关键脆弱元件和攻击路径的精准识别。研究依托Matlab平台实现完整算法流程,并结合IEEE 39节点、33节点等标准系统进行仿真验证,有效评估了电网在恶意攻击场景下的安全性与韧性水平,为电力系统的防御加固、关键资产保护及应急预案制定提供了理论依据与技术支撑。; 适合人群:具备电力系统分析、运筹学优化理论基础及Matlab编程能力的研究生、高校科研人员以及从事电网安全评估、电力系统规划与防御策略研究的工程技术人员。; 使用场景及目标:①用于电力系统关键节点与线路的脆弱性评估,识别潜在攻击目标;②支撑电网主动防御体系设计,优化防护资源布局;③作为高水平学术研究参考资料,复现并拓展顶级EI期刊论文中的建模方法与仿真流程,进一步研究N-k故障、虚假数据注入攻击等延伸问题。; 阅读建议:建议结合提供的Matlab代码与网盘资料,逐步调试运行仿真案例,深入理解MILP建模技巧、双层优化求解机制及YALMIP工具包的应用,同时可尝试引入不确定性因素或动态恢复策略以提升模型的实用性与前沿性。

2,508

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧