在delphi.net中,vcl.net有两点蛮遗憾的:
1.不能使用ado(dbgo),不过据李维说本月的delphi8.1将会有这个组件。
2.不能使用ado.net和bdp,这将是我这片文章的主题。
在borland的delphi交流区内,曾经看到danny说过,"在delphi.net中vcl.net可以调用winform组件,同样winform也可以调用vcl.net组件"。
为了验证第一句话,我试了下,在vcl.net中是可以使用 .net的组件的,如可以直接uses system.data.sqlclient,并直接使用 sqlconnection类。也就是说,虽然vcl.net的组件面板中无法看到.net组件,但是所有的.net组件的类,vcl.net都可以使用! 但是,ado.net的dataset并不和vcl.net的dataset组件兼容,所以无法直接调用数据感知组件。不过,看了李维的inside vcl知道原来有一个adonetconnector组件,用了这个组件,可以使ado.net支持使用数据感知组件了。
首先,vcl.net组件的dll在bds\2.0\bin 下有一个borland.vcl.design.adonet.dll,单击install .net component菜单,然后在窗体的.net vcl components页中把这个dll add一下,就可以看见adonetconnector组件。然后加一个dbgrid,db....,datasoure....,只要datasource.dataset:=adonetconnector1。其它的和原来的delphi一样,就可以了。我的具体代码如下,
unit unit1;
interface
uses
windows, messages, sysutils, variants, classes, graphics, controls, forms,
dialogs,
system.data.sqlclient,
system.data, system.componentmodel, borland.vcl.stdctrls,
borland.vcl.extctrls, borland.vcl.dbctrls, borland.vcl.grids,
borland.vcl.dbgrids, borland.vcl.db, borland.vcl.adonetdb;
type
tform1 = class(tform)
button1: tbutton;
adonetconnector1: tadonetconnector;
datasource1: tdatasource;
dbgrid1: tdbgrid;
dbnavigator1: tdbnavigator;
procedure button1click(sender: tobject);
private
{ private declarations }
connection:sqlconnection;
prodataset : dataset;
adapter : sqldataadapter;
public
{ public declarations }
end;
var
form1: tform1;
implementation
{$r *.nfm}
procedure tform1.button1click(sender: tobject);
begin
connection := sqlconnection.create(
'data source= 192.168.76.170;'+
'initial catalog=sfiecerp;'+
'password=qwert;'+
'persist security info=true;'+
'user id=sa;'+
'packet size=4096;'+
'connection lifetime=0;'+
'connection reset=false;'+
'pooling=false;'+
'max pool size=100;min pool size=0');
connection.open;
prodataset := dataset.create;
adapter := sqldataadapter.create('select * from tproduct', connection);
adapter.fill(prodataset, 'product');
adonetconnector1.datatable:=prodataset.tables[0];
end;
end.