搜索了之前的贴子,未找到有用的信息.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,问题依旧!!!
百思不得其解,到底为什么???
我在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,问题依旧!!!
百思不得其解,到底为什么???
没用.不用CoInitialize(nil)这句,编译都通不过.
或打开其它一个软件或文件, 也导致其出那个错误, 而且错误都发声在访问ADO对象时!!!!
难解之谜啊
try
执行ado要读取数据的代码
finally
ado.free;
and;
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对象换成全局的吗?
我试过N次了, 加不加这个东西,都一样会有时报错