我最近在用delphi写组件,具体是想在用组件对象生成数据集ADODataset,然后在客户程序中用datagrid显示,但是在创建组件对象并进行查询后将ADODataset赋值给datasource时却显示:Invalid Pointer operation
这是为什么?
组件中的部分代码:
function TDBLib.ExecuteSqlWithQuery(strSql:String):TADODataSet;stdcall;
//执行一个查询语句
var
ds:TADODataSet;
begin
ds:=TADODataset.Create(Owner);//从application传过来的
ds.Connection:=ADOConn;
ds.CommandText:=strSql;
ds.Open;
Result:=ds;
end;function TDBLib.GetColsByName(TableName:String;Condition:String;const ColsName:array of String):TADODataSet;stdcall;
//通过列名获取表中某一列
var
ds:TADODataSet;
strSql:String;
i:integer;
Begin
strSql:='select ';
for i:=Low(ColsName) to High(ColsName)-1 do
begin
strSql:=strSql+ColsName[i]+',';
end;
strSql:=strSql+ColsName[i]+' from '+TableName+' where '+Condition;
ds:=ExecuteSqlWithQuery(strSql);
Result:=ds;
end;
程序中的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
ColsName:array [1..3] of String;
pChr:pChar;
str:String;
begin
if ComInterface=nil then
begin
ComInterface := CreateComObject(Class_DBLib) as IDBInterface;//接口
ComInterface.InitLib(ADOConnection1,Form1);
ShowMessage('Dblib Created');
end;
ColsName[1]:='ID';
ColsName[2]:='Name';
ColsName[3]:='TNO';
ds:=ComInterface.GetColsByName('TeacherBasicInfo','ID>1',ColsName);//ADOdataset
DataSource1.DataSet:=ds;
end;
这是为什么?
组件中的部分代码:
function TDBLib.ExecuteSqlWithQuery(strSql:String):TADODataSet;stdcall;
//执行一个查询语句
var
ds:TADODataSet;
begin
ds:=TADODataset.Create(Owner);//从application传过来的
ds.Connection:=ADOConn;
ds.CommandText:=strSql;
ds.Open;
Result:=ds;
end;function TDBLib.GetColsByName(TableName:String;Condition:String;const ColsName:array of String):TADODataSet;stdcall;
//通过列名获取表中某一列
var
ds:TADODataSet;
strSql:String;
i:integer;
Begin
strSql:='select ';
for i:=Low(ColsName) to High(ColsName)-1 do
begin
strSql:=strSql+ColsName[i]+',';
end;
strSql:=strSql+ColsName[i]+' from '+TableName+' where '+Condition;
ds:=ExecuteSqlWithQuery(strSql);
Result:=ds;
end;
程序中的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
ColsName:array [1..3] of String;
pChr:pChar;
str:String;
begin
if ComInterface=nil then
begin
ComInterface := CreateComObject(Class_DBLib) as IDBInterface;//接口
ComInterface.InitLib(ADOConnection1,Form1);
ShowMessage('Dblib Created');
end;
ColsName[1]:='ID';
ColsName[2]:='Name';
ColsName[3]:='TNO';
ds:=ComInterface.GetColsByName('TeacherBasicInfo','ID>1',ColsName);//ADOdataset
DataSource1.DataSet:=ds;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货