Listar tabelas e campos do banco no Treeview

Delphi

27/08/2009

Olá,

Sou iniciante no Delphi e gostaria de ajuda para listar no treeview as tabelas e campos do Banco de Dados.

Uso o SQL Server e a conexão que fiz foi pelo componente ADO.

Alguém pode me ajudar, por favor?

Aguardo

Obrigada


Jaqque

Jaqque

Curtidas 0

Respostas

Djfabioninja

Djfabioninja

27/08/2009

Olá Jaqque! boa noite!

ADO é legal! O Componente ADO Connection tem uma propriedade chamada GetTableNames! Não costumo usar TreeView, mas para listar as tabelas em um ListBox por exemplo, é simples! Basta colocar:

connection1.GetTableNames(listbox1.Items,false); - onde ´listbox1.items´ é a lista e o ´false´ em seguida define se serão trazidas também as tabelas internas de sistema ou não!

Espero ter ajudado... qualquer coisa, msn: djfabioninja@hotmail.com


GOSTEI 0
Elip2008

Elip2008

27/08/2009

Poderia entaum colocar fazer assim, meu TAdoConnection eh o cnn:

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  s: TStringList;
begin
  try
    s := TStringList.Create;
    cnn.GetTableNames(s);
    for i := 0 to Pred(s.Count) do
      TreeView1.Items.Add(nil, s.Strings[i]);
  finally
    FreeAndNil(s);
  end;
end;



GOSTEI 0
Elip2008

Elip2008

27/08/2009

sobe
naum tinha visto que vc precisava dos campos tbm.
montei outro aqui, axo q vai funcionar blz..

var
  i, x: Integer;
  s, f: TStringList;
  t : TTreeNode;
begin
  try
    s := TStringList.Create;
    cnn.GetTableNames(s);
    for i := 0 to Pred(s.Count) do
    begin
      t := TreeView1.Items.Add(nil, s.Strings[i]);
      try
        f := TStringList.Create;
        cnn.GetFieldNames(s.Strings[i], f);
        for x := 0 to Pred(f.Count) do
        begin
          TreeView1.Items.AddChild(t, f.Strings[x]);
        end;
      finally
        FreeAndNil(f);
      end;
    end;
  finally
    FreeAndNil(s);
  end;
end;


kualker coisa eh soh postar ai


GOSTEI 0
Jaqque

Jaqque

27/08/2009

Olá elip2008!

Muito obrigada mesmo!
Funcionou!

Só mais uma dúdida...como eu faço para aparecer somente as tabelas do meu banco, descartando as views e funções?
Porque listou tudo...

Obrigada.


GOSTEI 0
Jaqque

Jaqque

27/08/2009

Olá elip2008!

Muito obrigada mesmo!
Funcionou!

Só mais uma dúdida...como eu faço para aparecer somente as tabelas do meu banco, descartando as views e funções?
Porque listou tudo...

Obrigada.


GOSTEI 0
Elip2008

Elip2008

27/08/2009

Oi, primeiramente precisa declarar no use a classe ADOInt.
Crie duas procedures no escopo Private:
  private
    { Private declarations }
    procedure habilitado(con: TADOConnection);
    procedure pegarTabela(conexao: TADOConnection; Lista:TStrings);


Aqui vai a implementacao das procedures:

procedure TForm1.habilitado(con: TADOConnection);
begin
  if con.Connected then Exit;
  con.Open;
  if Assigned(con.ConnectionObject) then
    while (con.ConnectionObject.State = adStateConnecting) do
      DBApplication.ProcessMessages;
end;

procedure TForm1.pegarTabela(conexao: TADOConnection; Lista: TStrings);
var
  TypeField,
  NameField: TField;
  TableType: string;
  DataSet: TADODataSet;
begin
  habilitado(conexao);
  DataSet := TADODataSet.Create(nil);
  try
    conexao.OpenSchema(siTables, EmptyParam, EmptyParam, DataSet);
    TypeField := DataSet.FieldByName(´TABLE_TYPE´);
    NameField := DataSet.FieldByName(´TABLE_NAME´);
    Lista.BeginUpdate;
    try
      Lista.Clear;
      while not DataSet.Eof do
      begin
        TableType := TypeField.AsString;
        if (TableType = ´TABLE´) then
          Lista.Add(NameField.AsString);
        DataSet.Next;
      end;
    finally
      Lista.EndUpdate;
    end;
  finally
    DataSet.Free;
  end;
end;


Com a criacao das procedures o codigo antes passado, deve ficar assim:
var 
  i, x: Integer;
  s, f: TStringList;
  t : TTreeNode;
begin
  try
    s := TStringList.Create;
    pegarTabela(cnn, s);
    for i := 0 to Pred(s.Count) do
    begin 
      t := TreeView1.Items.Add(nil, s.Strings[i]);
      try
        f := TStringList.Create; 
        cnn.GetFieldNames(s.Strings[i], f);
        for x := 0 to Pred(f.Count) do 
        begin
          TreeView1.Items.AddChild(t, f.Strings[x]);
        end;
      finally
        FreeAndNil(f);
      end;
    end;
  finally
    FreeAndNil(s);
  end;
end;


Teh+++, kualker coisa eh soh postar...


GOSTEI 0
POSTAR