access做数据库
用adotable
左边是一个treeview
右边是一个listview希望点左边treeview"学生管理"时,右边listview显示数据库里的学生信息procedure TForm1.TreeView1Click(Sender: TObject);
var
mynode:ttreenode;
mystring:string;
mynode:=treeview1.Selected ;
mystring:=mynode.Text;if mystring='学生管理' then
begin
listview1.Clear;
with form2.table1 do
begin
Open;
for i:=0 to form2.table1.IndexFieldCount-1 do
begin
listview1.Items.Item[i].Caption:=FieldValues['num'];
listview1.Items.Item[i].SubItems.Strings[0]:=FieldValues['name'];
listview1.Items.Item[i].SubItems.Strings[1]:=FieldValues['age'];
listview1.Items.Item[i].SubItems.Strings[2]:=FieldValues['xibie'];
listview1.Items.Item[i].SubItems.Strings[3]:=FieldValues['zhuanye'];
listview1.Items.Item[i].SubItems.Strings[4]:=FieldValues['class'];
listview1.Items.Item[i].SubItems.Strings[5]:=FieldValues['room'];
listview1.Refresh;
close;
end ;
end;
这么写有什么不对?
谢谢
用adotable
左边是一个treeview
右边是一个listview希望点左边treeview"学生管理"时,右边listview显示数据库里的学生信息procedure TForm1.TreeView1Click(Sender: TObject);
var
mynode:ttreenode;
mystring:string;
mynode:=treeview1.Selected ;
mystring:=mynode.Text;if mystring='学生管理' then
begin
listview1.Clear;
with form2.table1 do
begin
Open;
for i:=0 to form2.table1.IndexFieldCount-1 do
begin
listview1.Items.Item[i].Caption:=FieldValues['num'];
listview1.Items.Item[i].SubItems.Strings[0]:=FieldValues['name'];
listview1.Items.Item[i].SubItems.Strings[1]:=FieldValues['age'];
listview1.Items.Item[i].SubItems.Strings[2]:=FieldValues['xibie'];
listview1.Items.Item[i].SubItems.Strings[3]:=FieldValues['zhuanye'];
listview1.Items.Item[i].SubItems.Strings[4]:=FieldValues['class'];
listview1.Items.Item[i].SubItems.Strings[5]:=FieldValues['room'];
listview1.Refresh;
close;
end ;
end;
这么写有什么不对?
谢谢
谢谢二位的回复!
可以实现的
1:
Click事件是当你鼠标单击树的区域内就被激发,但当时树可能还没有结点被选择的,可能会产生内存读取违规错误,
2.
with form2.table1 do 你这个写了以后,在Begin...end 内form2.table1.IndexfieldCount直接写成IndexfieldCount 就可以了。
3:
i:=0 to form2.table1.IndexFieldCount-1 这个IndexFieldCount 是Examine IndexFieldCount to determine the number of fields that comprise the current key. For indexes based on a single column, IndexFieldCount returns 1. For multi-column indexes, IndexFieldCount indicates the number of fields upon which the index is based
如果你没有手动设置IndexFieldNames时,返回值只能是0,他是指你设置索引字段的个数,想指望这个计数用循环把学生信息读出来是非常错误的。
所以我所以为正确的写法应该是
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
var
mystring:string;
I: Integer;
begin
if Node = nil then Exit;
myString := Node.Text;
if mystring = '学生管理' then
begin
listview1.Clear;
with form2.table1 do
begin
Open;
I := 0;
listView1.Items.BeginUpdate;
try
while not Eof do
ListView1.Items.Add;
listview1.Items.Item[i].Caption:=FieldValues['num'];
listview1.Items.Item[i].SubItems.Strings[0]:=FieldValues['name'];
listview1.Items.Item[i].SubItems.Strings[1]:=FieldValues['age'];
listview1.Items.Item[i].SubItems.Strings[2]:=FieldValues['xibie'];
listview1.Items.Item[i].SubItems.Strings[3]:=FieldValues['zhuanye'];
listview1.Items.Item[i].SubItems.Strings[4]:=FieldValues['class'];
listview1.Items.Item[i].SubItems.Strings[5]:=FieldValues['room'];
Next;
Inc(I);
end;
finally
listView1.Items.EndUpdate;
end;
end;
end;
end;可以看出楼主是个刚刚进入DELPHI初学者,控件用法很不熟悉,以后会好起来的,上述程序没有经过测试。还有个建议:结贴要及时哦^_^
结帖是肯定的再问一句
照你写的编译时在with form2.table1 do出错
这是为什么?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, Grids, DBGrids, DB, DBTables;type
TForm1 = class(TForm)
TreeView1: TTreeView;
DataSource1: TDataSource;
Table1: TTable;
ListView1: TListView;
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
var
mystring:string;
I: Integer;
Item: TListItem;
begin
if Node = nil then Exit;
listview1.Clear;
myString := Node.Text;
if mystring = '用户管理' then
begin
with table1 do
begin
Open;
I := 0;
listView1.Items.BeginUpdate;
try
First;
while not Eof do
begin
Item := ListView1.Items.Add;
Item.Caption := FieldValues['LAST_NAME'];
Item.SubItems.Add(FieldValues['FIRST_NAME']);
Next;
Inc(I);
end;
finally
listView1.Items.EndUpdate;
end;
end;
end;
end;
end.dfm
object Form1: TForm1
Left = 155
Top = 118
Width = 607
Height = 427
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object TreeView1: TTreeView
Left = 8
Top = 8
Width = 185
Height = 321
Indent = 19
TabOrder = 0
OnChange = TreeView1Change
Items.Data = {
02000000210000000000000000000000FFFFFFFFFFFFFFFF0000000000000000
08D1A7C9FAB9DCC0ED210000000000000000000000FFFFFFFFFFFFFFFF000000
000000000008D3C3BBA7B9DCC0ED}
end
object ListView1: TListView
Left = 200
Top = 8
Width = 377
Height = 233
Columns = <
item
Caption = 'LAST_NAME'
Width = 100
end
item
Caption = 'FIRST_NAME'
Width = 100
end
item
end
item
end>
GridLines = True
TabOrder = 1
ViewStyle = vsReport
end
object DataSource1: TDataSource
DataSet = Table1
Left = 248
Top = 40
end
object Table1: TTable
Active = True
DatabaseName = 'DBDEMOS'
TableName = 'clients.dbf'
Left = 208
Top = 40
end
end