诡异的问题:TClientDataSet.CreateDataSet出错

hpygzhx520 2016-10-24 01:17:16
写一个程序,用到内存数据集,于是写了个函数返回TDataSet。如下:

function CreateDataSet: TDataSet;
var cdsTemp: TClientDataSet;
begin
try
AppendLog('log.txt','TClientDataSet.Create(application)');
cdsTemp := TClientDataSet.Create(application);
AppendLog('log.txt','cdsTemp.FieldDefs.Add');
cdsTemp.FieldDefs.Add('MATERIALID',ftString,20);
cdsTemp.FieldDefs.Add('CLASS',ftString,60);
cdsTemp.FieldDefs.Add('MATERIALNAME',ftString,256);
cdsTemp.FieldDefs.Add('DESCRIBE',ftString,12);
cdsTemp.FieldDefs.Add('PUTNUM',ftInteger);
AppendLog('log.txt','cdsTemp.CreateDataSet');//这行日志成功输出
cdsTemp.CreateDataSet;
AppendLog('log.txt','cdsTemp as TDataSet');
result := (cdsTemp as TDataSet);
except
on E: Exception do
AppendLog('log.txt','CreateDataSet出错:'+ E.Message); //报错access violation at address... read of address 00000000
end;
end;

这个代码在我的电脑上WIN10 X64专业版上,从没出过错。用delphi 2010和XE10编译这个代码都没问题。但是在用户电脑上,WIN7 X86 旗舰版,用delphi 2010编译之后,有一定的报错概率(当然这个情况下没写日志,只是从用户反馈推测),而用XE10编译后,运行到cdsTemp.CreateDataSet;百分百报错。

百思不得其解,因此来这里请教。谢谢。
...全文
1586 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzmiot 2017-11-15
  • 打赏
  • 举报
回复

interface

uses
    MidasLib { 加上这个即可;
hpygzhx520 2016-10-26
  • 打赏
  • 举报
回复
一直以为delphi编译后所需要的支持文件极少的(简单认为delphi的编译和打包差不多),受教了。
sazhufa 2016-10-26
  • 打赏
  • 举报
回复
TClientDataSet是跟midas.dll绑定的吧? 不同版本的Delphi, 在运行时需要对应不同版本的midas.dll。 在运行时系统上,执行regsvr32 \path\to\midas.dll -- 这个文件的版本要跟开发环境的一样。
hpygzhx520 2016-10-25
  • 打赏
  • 举报
回复
我就是这么写的啊result := (cdsTemp as TDataSet);
lyhoo163 2016-10-24
  • 打赏
  • 举报
回复
应该返回DataSet result := (cdsTemp as TDataSet);
hpygzhx520 2016-10-24
  • 打赏
  • 举报
回复
result := (cdsTemp as TDataSet); 返回了的,不是为空
lyhoo163 2016-10-24
  • 打赏
  • 举报
回复
另外 函数function CreateDataSet: TDataSet; 返回的TDataSet是空,还不如直接用: 过程procedure CreateMyDataSet;
lyhoo163 2016-10-24
  • 打赏
  • 举报
回复
检查语句基本无问题。建议下一句写完整: cdsTemp.FieldDefs.Add('PUTNUM',ftInteger,0); 再编译试试。

2,497

社区成员

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

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