难道这又是个未解之谜?--- 关于DLL中使用ADODATASET出错的问题
http://www.delphi2007.net/DelphiAPI/html/delphi_20061128102336156.html
搜索了之前的贴子,未找到有用的信息.
MD,搞了一天,头都大了,仍然找不到原因:
我在DLL中声明了全局ado:TADODataSet;
DLL装载时也有
CoInitialize(nil);
ado:=TADODataSet.Create(nil);
但是在读取记录时,
ado.CommandText:='select text from Menus where id='+inttostr(MenuID);
ado.Open;
n:=ado.recordcount;
或 ado.recno:=1;
主程序调用此DLL时,走到最后两条这里有时就报内存地址错误, 但有时又没有. 有错误时,严重时会令主程序退出!!!
改用DataMoudle,问题依旧!!!
百思不得其解,到底为什么???
可以要用 ShareMem, 放在用到 dll 和 dll 的第一 use 顺序处
同意楼上,另外,如果不是多线程,没有必要加CoInitialize(nil);这句,也容易造成地址错误。
帮顶
早就过ShareMem.
没用.
不用CoInitialize(nil)这句,编译都通不过.
没有那么多的迷呀 LZ F1帮助 可解决LZ一切问题~~
而且这个异常出现的很奇怪, 有时甚至打开QQ对话框, 也会导致它出错!
或打开其它一个软件或文件, 也导致其出那个错误, 而且错误都发声在访问ADO对象时!!!!
难解之谜啊
LZ这么写 把 ado:=TADODataSet.Create(nil);创建的时候写到异常里面去捕捉
ado:=TADODataSet.Create(nil);
try
执行ado要读取数据的代码
finally
ado.free;
and;
晕...拜托你看看题目再答吧,兄弟!!
创建对象时根本无任何问题,何况有时也能正常工作?
可能是dll中的ado连接的ADOConnection的问题,如果ADOConnection是放在数据模块中,而数据模块也是放在dll中,则这样使用肯定出错,如果是这种情况,你必须在装载dll时显式创建数据模块。
给你作了一个完整的DEMO,连续测试了1000次,OK。
uses
SysUtils,
Activex,
ADODB,
Classes;
{$R *.res}
function DataExport: integer;
var
ADOConnection: TADOConnection;
ADODataSet : TADODataSet;
begin
CoInitialize(nil);
ADOConnection := TADOConnection.Create(nil);
ADOConnection.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=WANGS;Data Source=.';
ADOConnection.LoginPrompt := False;
ADODataSet:= TADODataSet.Create(nil);
ADODataSet.Connection := ADOConnection;
try
ADODataSet.Close;
ADODataSet.CommandText:= 'Select * From TWangs_UserInfo ';
ADODataSet.Open;
Result := ADODataSet.RecordCount;
finally
ADODataSet.Free;
ADOConnection.Free;
CoUnInitialize;
end;
end;
exports
DataExport;
begin
end.
老冯:
1.一定得用 ADODataSet.Connection吗? 这是不是那问题的症结所在?
2.可以将其它的ADO对象换成全局的吗?
1.一定得用 ADODataSet.Connection吗? 这是不是那问题的症结所在? (没有测试过)
2.可以将其它的ADO对象换成全局的吗? 可以(测试过)
1.一定得用 ADODataSet.Connection吗? 这是不是那问题的症结所在? 可以 (刚刚测试过)
问题症结应该在
CoUnInitialize;
不过我建议就按我上面的规格办。我所有的系统涉及这些元件我都是这样办的。久经沙场的。呵呵呵呵
CoUnInitialize;
我试过N次了, 加不加这个东西,都一样会有时报错
难道这又是个未解之谜?--- 关于DLL中使用ADODATASET出错的问题相关推荐
- 为什么人生下来就有意识 人脑五大未解之谜
2008年11月29日 15:24:17 来源:网易探索 [字号 大 中 小] [留言] [打印] [关闭] [Email推荐: ] 科学如此发达的今天,人脑的神秘依然困惑着我们 据科学新知 ...
- 深度丨AI界的七大未解之谜:OpenAI丢出一组AI研究课题
今天,OpenAI在官方博客上丢出了7个研究过程中发现的未解决问题. OpenAI希望这些问题能够成为新手入坑AI的一种有趣而有意义的方式,也帮助从业者提升技能. OpenAI版AI界七大未解之谜,现 ...
- AI界的七大未解之谜:OpenAI丢出一组AI研究课题
来源:三体智讯 今天,OpenAI在官方博客上丢出了7个研究过程中发现的未解决问题. OpenAI希望这些问题能够成为新手入坑AI的一种有趣而有意义的方式,也帮助从业者提升技能. OpenAI版AI界 ...
- where显示null行_Python 之 MySql“未解之谜”14-- 都是 NULL 惹的祸(下)
最近在网上看到 MySql 关于 NULL 的文章 有几个值得争议的观点,我们一起看看 ● 准备工作 MySql 版本 5.7,InnoDB 存储引擎, 表 test 数据量 10 w, 其中 a , ...
- 一个常见的物理现象,直今还是未解之谜!
全世界只有3.14 % 的人关注了 爆炸吧知识 在我们的日常生活中存在着很多有趣的物理现象, 科学家对这些现象进行深入研究后,可以通过这些现象延伸,从而在前沿科技发展上得到很大的帮助,甚至去解决宇宙中 ...
- hibernate 复合主键 根据主键删除_Python 之 MySql“未解之谜”11--主键 id 那些事
主键 id 用自增和 uuid 有什么区别? ● uuid 有 16 个字节,比 int(4 byte)和 bigint(8 byte)占用更多存储空间 有大量数据的时候 uuid 主键不会像自增主键 ...
- 山东科技大学c语言完全题库,“山东科技大学十大未解之谜”之完全解答
"山东科技大学十大未解之谜"之完全解答 (2012-04-24 13:53:36) 标签: 娱乐 当我还是一枚小正太刚刚进入山科大的时候,我就看到过这些未解之谜,现在每每看到童鞋们 ...
- 很多未解之谜终于有答案了——2018年JVM生态系统报告出炉
在Java开发者中,一直存在着很多鄙视链.如: IntelliJ → Eclipse → NetBeans Unix → Linux → Mac OS→ Windows → DOS Emacs → V ...
- ★大脑的9大未解之谜
大脑的9大未解之谜 1.大脑为什么有时间的意识 为什么人人都自带"生物闹钟",比如想要第二天早晨办的很紧急的事,清晨一起床就想起来了(当然,健忘者另当别论):等待的时间越长,你会感 ...
最新文章
- word在线解密_实用技能 | 5款免费在线转换PDF的网站
- 关于delphi中的register, pascal, cdecl, stdcall, safecall
- python xrange_Python学习中的知识点(range和xrange)
- string 与BigDecimal互转
- Protocol类型限制
- UGUI之Toggle使用
- 学习ASP.NET Core Razor 编程系列六——数据库初始化
- webpack + react
- 字符编码转换 iconv命令
- 计算机二级公共基础知识个人整理
- c++求余弦的泰勒展开式
- Admin5推荐软文推广采用“链接标准化”
- 做硬件,想当然,犯大错
- memcached 特点
- 射频信号源及射频信号测试接口案例-纳米软件
- go日志库log/zap/logrus
- 批量打印之smsx.cab打印
- BZOJ 1029: [JSOI2007]建筑抢修 堆+贪心
- 网易云的招股书,递交了几分情怀?
- 破局 | STO 会是P2P不良资产包化解难的救星吗?