主题:在将树型控件和数据库显示连接时发生异常
显示如下:
Access violation at address 004D2FAB in module 'Project1.exe'.Read of address 00000008.
好像是这个语句有问题:
[color=FF0000] num:=pos('-',MainNode.Text)-1;[/color]
大家帮忙看下,谢谢
源代码如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, Grids, DBGrids, ADODB, ComCtrls, TabNotBk, ExtCtrls, DBCtrls,
StdCtrls, Mask;
type
TForm1 = class(TForm)
TabbedNotebook1: TTabbedNotebook;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
Panel1: TPanel;
Panel2: TPanel;
GroupBox1: TGroupBox;
TreeView1: TTreeView;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
DBEdit6: TDBEdit;
StatusBar1: TStatusBar;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
ADOTable2: TADOTable;
DataSource2: TDataSource;
Panel3: TPanel;
Panel4: TPanel;
DBNavigator2: TDBNavigator;
DBGrid2: TDBGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Panel5: TPanel;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
Button4: TButton;
procedure FormShow(Sender: TObject);
procedure TreeView1Click(Sender: TObject);
private
{ Private declarations }
procedure loadtree; //目录树的初始化
function getlevel(levelformat,nowcode: String): integer;
//获取节点层次
public
{ Public declarations }
MainNode: TTreeNode; //当前节点
NodeID: String; //树节点ID
end;
const
codeformat='12222'; //编码格式:x xx xx xx xx
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
{ TForm1 }
function TForm1.getlevel(levelformat, nowcode: String): integer;
var
level,ilen,i: integer;
begin
level:=-1;
ilen:=0;
if (levelformat<>'') and (nowcode<>'') then
for i:=1 to length(levelformat) do
//找出当前代码层次
begin
ilen:=ilen+StrtoInt(levelformat[i]);
if ilen=length(nowcode) then
begin
level:=i;
break;
end;
end;
Result:=level;
end;
procedure TForm1.loadtree;
var
level: integer;
id,name,nodetxt: String;
Mynode: array[0..6] of TTreeNode;
begin
TreeView1.Items.Clear;
level:=0;
Mynode[level]:=TreeView1.Items.Add(TreeView1.TopItem,'按工艺流程查询');
if (not dm.Table1.Active) then
dm.Table1.Active:=True;
dm.Table1.First;
while not dm.Table1.Eof do
begin
id:=trim(DM.Table1.fieldbyname('编号').AsString);
name:=trim(DM.Table1.fieldbyname('名称').AsString);
nodetxt:=id+'-'+name;
level:=getlevel(codeformat,id); //返回代码层次数
if level>0 then
Mynode[level]:=TreeView1.Items.AddChild(Mynode[level-1],nodetxt);
DM.Table1.Next;
end;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
loadtree;
end;
procedure TForm1.TreeView1Click(Sender: TObject);
var
id,name,nodetxt: String;
num: Integer;
level: integer;
begin
MainNode:=self.TreeView1.Selected;
[color=FF0000] num:=pos('-',MainNode.Text)-1;[/color]
id:=Copy(MainNode.Text,1,num);
if MainNode.Text<>'按工艺流程查询' then
begin
if id<>'' then
begin
Dm.Table1.Open;
DM.Table1.FindNearest([id]);
end;
level:=getlevel(codeformat,id);
end
else
level:=0;
GroupBox1.Caption:='当前节点是第'+inttostr(level)+'层';
end;
end.
Access violation at address 004D2FAB in module 'Project1.exe'.Read of address 00000008.
好像是这个语句有问题:
[color=FF0000] num:=pos('-',MainNode.Text)-1;[/color]
大家帮忙看下,谢谢
源代码如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, Grids, DBGrids, ADODB, ComCtrls, TabNotBk, ExtCtrls, DBCtrls,
StdCtrls, Mask;
type
TForm1 = class(TForm)
TabbedNotebook1: TTabbedNotebook;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
Panel1: TPanel;
Panel2: TPanel;
GroupBox1: TGroupBox;
TreeView1: TTreeView;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
DBEdit6: TDBEdit;
StatusBar1: TStatusBar;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
ADOTable2: TADOTable;
DataSource2: TDataSource;
Panel3: TPanel;
Panel4: TPanel;
DBNavigator2: TDBNavigator;
DBGrid2: TDBGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Panel5: TPanel;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
Button4: TButton;
procedure FormShow(Sender: TObject);
procedure TreeView1Click(Sender: TObject);
private
{ Private declarations }
procedure loadtree; //目录树的初始化
function getlevel(levelformat,nowcode: String): integer;
//获取节点层次
public
{ Public declarations }
MainNode: TTreeNode; //当前节点
NodeID: String; //树节点ID
end;
const
codeformat='12222'; //编码格式:x xx xx xx xx
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
{ TForm1 }
function TForm1.getlevel(levelformat, nowcode: String): integer;
var
level,ilen,i: integer;
begin
level:=-1;
ilen:=0;
if (levelformat<>'') and (nowcode<>'') then
for i:=1 to length(levelformat) do
//找出当前代码层次
begin
ilen:=ilen+StrtoInt(levelformat[i]);
if ilen=length(nowcode) then
begin
level:=i;
break;
end;
end;
Result:=level;
end;
procedure TForm1.loadtree;
var
level: integer;
id,name,nodetxt: String;
Mynode: array[0..6] of TTreeNode;
begin
TreeView1.Items.Clear;
level:=0;
Mynode[level]:=TreeView1.Items.Add(TreeView1.TopItem,'按工艺流程查询');
if (not dm.Table1.Active) then
dm.Table1.Active:=True;
dm.Table1.First;
while not dm.Table1.Eof do
begin
id:=trim(DM.Table1.fieldbyname('编号').AsString);
name:=trim(DM.Table1.fieldbyname('名称').AsString);
nodetxt:=id+'-'+name;
level:=getlevel(codeformat,id); //返回代码层次数
if level>0 then
Mynode[level]:=TreeView1.Items.AddChild(Mynode[level-1],nodetxt);
DM.Table1.Next;
end;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
loadtree;
end;
procedure TForm1.TreeView1Click(Sender: TObject);
var
id,name,nodetxt: String;
num: Integer;
level: integer;
begin
MainNode:=self.TreeView1.Selected;
[color=FF0000] num:=pos('-',MainNode.Text)-1;[/color]
id:=Copy(MainNode.Text,1,num);
if MainNode.Text<>'按工艺流程查询' then
begin
if id<>'' then
begin
Dm.Table1.Open;
DM.Table1.FindNearest([id]);
end;
level:=getlevel(codeformat,id);
end
else
level:=0;
GroupBox1.Caption:='当前节点是第'+inttostr(level)+'层';
end;
end.