这是我的代码:
library temp;uses
SysUtils, ADODB;{$R *.res}var
AVConn : TADOConnection;
AVDataSet : TADODataSet;
function nouse: Integer;
begin
result:= 1;
end;exports
nouse;begin
AVConn := TADOConnection.Create(nil);
AVConn.ConnectionString := 'Provider=SQLOLEDB.1;UID=temp;PWD=temp;database=temp;'
AVDataSet := TADODataSet.Create(nil);
AVDataSet.Connection := AVConn;
AVDataSet.CommandText := 'select * from temptable';
AVConn.Connected := True;
AVDataSet.Open;
end;可是总是在AVConn Create的那句报错。而用program改成exe文件就不会出错。这是怎么回事?
library temp;uses
SysUtils, ADODB;{$R *.res}var
AVConn : TADOConnection;
AVDataSet : TADODataSet;
function nouse: Integer;
begin
result:= 1;
end;exports
nouse;begin
AVConn := TADOConnection.Create(nil);
AVConn.ConnectionString := 'Provider=SQLOLEDB.1;UID=temp;PWD=temp;database=temp;'
AVDataSet := TADODataSet.Create(nil);
AVDataSet.Connection := AVConn;
AVDataSet.CommandText := 'select * from temptable';
AVConn.Connected := True;
AVDataSet.Open;
end;可是总是在AVConn Create的那句报错。而用program改成exe文件就不会出错。这是怎么回事?
这些代码不能直接放到DLL的begin end;之中,为什么不把它放到nouse方法中去?或者另外用一个方法来实现,然后在LoadLibrary之后调用该方法初始化?AVConn := TADOConnection.Create(nil);
AVConn.ConnectionString := 'Provider=SQLOLEDB.1;UID=temp;PWD=temp;database=temp;'
AVDataSet := TADODataSet.Create(nil);
AVDataSet.Connection := AVConn;
AVDataSet.CommandText := 'select * from temptable';
AVConn.Connected := True;
AVDataSet.Open;
CoInitialize(nil);
结束代码
CoUnInitialize;方法二:不要直接在dll的begin end部分使用ADO,
可以把它封装成一个函数确保在Application.Initialize后执行。建议使用方法二。
TADODataSet.Create(nil);
怎么可以这样写呢?我认为应该这样:
TADOConnection.Create(self);
TADODataSet.Create(self);
我想应该OK了。
AVConn.Connected := True;
换成
AVConn.Open;
你说的两种方法能不能说详细些啊!