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;
这么写有什么不对?
谢谢

解决方案 »

  1.   

    就是将数据库里的表内容显示在listview里
    谢谢二位的回复!
      

  2.   

    用ADDOBJECTSUB吧 我做过的
    可以实现的
      

  3.   

    楼主写是有问题的,
    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初学者,控件用法很不熟悉,以后会好起来的,上述程序没有经过测试。还有个建议:结贴要及时哦^_^
      

  4.   

    感谢RaulWhite(好多可爱的女生啊^_^) 认真的回复,谢谢!
    结帖是肯定的再问一句
    照你写的编译时在with form2.table1 do出错
    这是为什么?
      

  5.   

    错误可能是单元引用问题,找个附近的同事、同学问一下,我看你是刚刚学习DELPHI的吧,共勉
      

  6.   

    unit Unit1;interfaceuses
      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