这段连接数据库的代码为什么运行时出错,说什么访问被挂起,被隔离(编译能通过,运行时出错)
(1)DataModule
unit dbconn;interfaceuses
SysUtils, Classes, DB, ADODB;type
TdataModDBConn = class(TDataModule)
connMain: TADOConnection;
procedure DataModuleCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
dataModDBConn: TdataModDBConn;implementation{$R *.dfm}procedure TdataModDBConn.DataModuleCreate(Sender: TObject);
var connString:String;
begin
connString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\abc.mdb;Persist Security Info=False';
connMain.ConnectionString:=connString;
connMain.Connected:=true;
end;end.
(2)主窗体
unit main;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, jpeg, ComCtrls, DB, ADODB, dbconn;type
TfrmMain = class(TForm)
pnlTop: TPanel;
pnlLeft: TPanel;
splMain: TSplitter;
pnlRight: TPanel;
imgBanner: TImage;
scrboxLeftMenu: TScrollBox;
treeVLeftMenu: TTreeView;
dataSetLeftMenu: TADODataSet;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
frmMain: TfrmMain;implementation{$R *.dfm}procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
frmMain.Free;
frmMain:=nil;
Application.Terminate;
end;procedure TfrmMain.FormCreate(Sender: TObject);
var leftMenuRootNode:TTreeNode;
var name:String;
begin
dataSetLeftMenu.Connection:=dataModDBConn.connMain;//好像执行到这一句出错
dataSetLeftMenu.CommandText:='select * from menu';
dataSetLeftMenu.Active:=true; leftMenuRootNode:=treeVLeftMenu.Items.Add(nil,'菜单');
while not dataSetLeftMenu.Eof do
begin
name:=dataSetLeftMenu.FieldValues['name'];
treeVLeftMenu.Items.AddChild(leftMenuRootNode,name);
dataSetLeftMenu.Next;
end;end;end.
(1)DataModule
unit dbconn;interfaceuses
SysUtils, Classes, DB, ADODB;type
TdataModDBConn = class(TDataModule)
connMain: TADOConnection;
procedure DataModuleCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
dataModDBConn: TdataModDBConn;implementation{$R *.dfm}procedure TdataModDBConn.DataModuleCreate(Sender: TObject);
var connString:String;
begin
connString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\abc.mdb;Persist Security Info=False';
connMain.ConnectionString:=connString;
connMain.Connected:=true;
end;end.
(2)主窗体
unit main;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, jpeg, ComCtrls, DB, ADODB, dbconn;type
TfrmMain = class(TForm)
pnlTop: TPanel;
pnlLeft: TPanel;
splMain: TSplitter;
pnlRight: TPanel;
imgBanner: TImage;
scrboxLeftMenu: TScrollBox;
treeVLeftMenu: TTreeView;
dataSetLeftMenu: TADODataSet;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
frmMain: TfrmMain;implementation{$R *.dfm}procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
frmMain.Free;
frmMain:=nil;
Application.Terminate;
end;procedure TfrmMain.FormCreate(Sender: TObject);
var leftMenuRootNode:TTreeNode;
var name:String;
begin
dataSetLeftMenu.Connection:=dataModDBConn.connMain;//好像执行到这一句出错
dataSetLeftMenu.CommandText:='select * from menu';
dataSetLeftMenu.Active:=true; leftMenuRootNode:=treeVLeftMenu.Items.Add(nil,'菜单');
while not dataSetLeftMenu.Eof do
begin
name:=dataSetLeftMenu.FieldValues['name'];
treeVLeftMenu.Items.AddChild(leftMenuRootNode,name);
dataSetLeftMenu.Next;
end;end;end.
在前面添加一句创建窗体的代码就好了.
datamodule1 := tdatamodule1.Create(self);