Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.11.2008, 16:16
evgenmil evgenmil вне форума
Прохожий
 
Регистрация: 29.11.2008
Сообщения: 5
Репутация: 10
Вопрос Access+TreeView+ListView

Пишу программу, используя БД Access, ADOConnection, ADOTable, DataSource. Как мне вывести в TreeView имена всех таблиц из БД Access, и по нажатию на эти имена в ListView выводить все записи в режиме VsReport. Сижу над этой задачей уже около 3-х недель, я только начинающий, и хочется узнать все и сразу, но не получается)))
Надеюсь на вашу помощь.
Заранее благодарю!!!
Изображения
Тип файла: jpg form.jpg (47.1 Кбайт, 30 просмотров)
Ответить с цитированием
  #2  
Старый 01.12.2008, 13:36
k@Z@k k@Z@k вне форума
Новичок
 
Регистрация: 31.07.2007
Сообщения: 55
Репутация: 12
По умолчанию

Код:
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)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:08.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter