|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Access+TreeView+ListView
Пишу программу, используя БД Access, ADOConnection, ADOTable, DataSource. Как мне вывести в TreeView имена всех таблиц из БД Access, и по нажатию на эти имена в ListView выводить все записи в режиме VsReport. Сижу над этой задачей уже около 3-х недель, я только начинающий, и хочется узнать все и сразу, но не получается)))
Надеюсь на вашу помощь. Заранее благодарю!!! |
#2
|
|||
|
|||
Код:
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, StdCtrls, ComCtrls, Grids, DBGrids, ExtCtrls, dbitypes, dbiprocs; type TForm1 = class(TForm) Button1: TButton; TreeView1: TTreeView; DataSource1: TDataSource; DBGrid1: TDBGrid; ADOTable2: TADOTable; ADOConnection1: TADOConnection; ADOTable1: TADOTable; GroupBox1: TGroupBox; Panel1: TPanel; procedure Button1Click(Sender: TObject); procedure TreeView1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); end; TTableType = (ttTable, ttView, ttSynonym, ttSystemTable, ttAccessTable); TTableTypes = set of TTableType; TTableItem = record ItemName: string; ItemType: string; end; TTableItems = array of TTableItem; var Form1: TForm1; output: ttableitems; implementation uses CommCtrl; {$R *.dfm} procedure SetNodeState(node: TTreeNode; Flags: Integer); var tvi: TTVItem; begin FillChar(tvi, Sizeof(tvi), 0); tvi.hItem := node.ItemID; tvi.mask := TVIF_STATE; tvi.stateMask := TVIS_BOLD or TVIS_CUT; tvi.state := Flags; TreeView_SetItem(node.Handle, tvi); end; function addFilter(string1, string2: string): string; begin if string1 <> '' then Result := string1 + ' or ' + string2 else Result := string2; end; function ADODbTables(ADOConnection: TADOConnection; types: TTableTypes): TTableItems; var ADODataSet: TADODataSet; i: integer; begin ADODataSet := TADODataSet.Create(nil); ADODataSet.Connection := ADOConnection; ADOConnection.OpenSchema(siTables, EmptyParam, EmptyParam, ADODataSet); if (ttTable in types) then ADODataSet.Filter := addFilter(ADODataSet.Filter, '(TABLE_TYPE = ''TABLE'')'); if (ttView in types) then ADODataSet.Filter := addFilter(ADODataSet.Filter, '(TABLE_TYPE = ''VIEW'')'); if (ttSynonym in types) then ADODataSet.Filter := addFilter(ADODataSet.Filter, '(TABLE_TYPE = ''SYNONYM'')'); if (ttSystemTable in types) then ADODataSet.Filter := addFilter(ADODataSet.Filter, '(TABLE_TYPE = ''SYSTEM TABLE'')'); if (ttAccessTable in types) then ADODataSet.Filter := addFilter(ADODataSet.Filter, '(TABLE_TYPE = ''ACCESS TABLE'')'); ADODataSet.Filtered := True; SetLength(Result, ADODataSet.RecordCount); i := 0; with ADODataSet do begin First; while not EOF do begin with Result[i] do begin ItemName := FieldByName('TABLE_NAME').AsString; ItemType := FieldByName('TABLE_TYPE').AsString; end; Inc(i); Next; end; end; ADODataSet.Free; end; procedure TForm1.Button1Click(Sender: TObject); var i, j: integer; Node: TTreeNode; begin output := ADODbTables(ADOConnection1, [ttTable, ttView, ttSynonym]); for i := Low(output) to High(output) do begin Node := TreeView1.Items.Add(TreeView1.Selected, output[i].ItemName); SetNodeState(Node, TVIS_BOLD or TVIS_CUT); ADOTable1.Connection := ADOConnection1; ADOTable1.TableName := output[i].ItemName; ADOTable1.Active := true; for j := 1 to ADOTable1.FieldCount do TreeView1.Items.AddChild(Node, ADOTable1.Fields.FieldByNumber(j).FieldName); ADOTable1.Active := false; end; end; procedure TForm1.TreeView1Click(Sender: TObject); var i: integer; begin for i := Low(output) to High(output) do if TreeView1.Selected.Text = output[i].ItemName then begin if ADOTable2.Active then ADOTable2.Active := false; ADOTable2.TableName := output[i].ItemName; ADOTable2.Active := true; end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin output := nil; ADOTable2.Active := false; end; end. procedure TForm1.Button1Click(Sender: TObject); -строится дерево procedure TForm1.TreeView1Click(Sender: TObject);- выводится вся таблица; (в твоем случае перепиши вывод в ListView) |