Curso de dbExpress e DataSnap

Parte VI – Recuperando MetaDados

 

Nesta parte do curso, veremos como utilizar o dbExpress para recuperar informações sobre objetos do banco de dados, como nome de tabelas, campos, índices (o que chamamos de metadados).

dbExpress e MetaDados

No dbExpress, a interface responsável pela obtenção de metadados é a ISQLMetaData, declarada na unit  DBXpress.pas da seguinte forma:

 

ISQLMetaData = interface

   function SetOption(eDOption: TSQLMetaDataOption;

                     PropValue: LongInt): SQLResult; stdcall;

   function GetOption(eDOption: TSQLMetaDataOption; PropValue: Pointer;

                     MaxLength: SmallInt; out Length: SmallInt): SQLResult; stdcall;

   function getObjectList(eObjType: TSQLObjectType; out Cursor: ISQLCursor):

                     SQLResult; stdcall;

   function getTables(TableName: PChar; TableType: LongWord;

                     out Cursor: ISQLCursor): SQLResult; stdcall;

   function getProcedures(ProcedureName: PChar; ProcType: LongWord;

                     out Cursor: ISQLCursor): SQLResult; stdcall;

   function getColumns(TableName: PChar; ColumnName: PChar;

                     ColType: LongWord; Out Cursor: ISQLCursor): SQLResult; stdcall;

   function getProcedureParams(ProcName: PChar; ParamName: PChar;

                     out Cursor: ISQLCursor): SQLResult; stdcall;

   function getIndices(TableName: PChar; IndexType: LongWord;

                     out Cursor: ISQLCursor): SQLResult; stdcall;

   function getErrorMessage(Error: PChar): SQLResult; overload; stdcall;

   function getErrorMessageLen(out ErrorLen: SmallInt): SQLResult; stdcall;

end;

 

Como você pode notar pelos métodos, podemos recuperar praticamente qualquer informação do catálogo do BD, como nomes de tabelas, tipos e nomes de campos, informações sobre Stored Procedures e mais. Para usar essa interface, devemos usar o método SetSchemaInfo de um DataSet do dbExpress.

Aplicação usando MetaDados

Inicie uma nova aplicação VCL no Delphi.

Archive06_1.gif 

Figura 1.

Coloque SQLConnection no e configure uma conexão para o banco Employee do Interbase ou do Firebird (já discutimos conexões anteriormente, de forma que não vou entrar em detalhes aqui).

Archive06_2.gif 

Figura 2.

Coloque mais alguns componentes dbExpress e da paleta Data Access, conforme mostrado a seguir:

Archive06_3.gif 

Figura 3.

Configure o relacionamento entre os componentes da seguinte forma:

 

object DBGrid1: TDBGrid

  DataSource = DataSource1

end

object DBGrid2: TDBGrid

  DataSource = DataSource2

end

object SQLQuery1: TSQLQuery

  SQLConnection = SQLConnection1

end

object DataSetProvider1: TDataSetProvider

  DataSet = SQLQuery1

end

object ClientDataSet1: TClientDataSet

  ProviderName = 'DataSetProvider1'

end

object DataSource1: TDataSource

  DataSet = ClientDataSet1

end

object SQLQuery2: TSQLQuery

  SQLConnection = SQLConnection1

end

object DataSetProvider2: TDataSetProvider

  DataSet = SQLQuery2

end

object ClientDataSet2: TClientDataSet

  ProviderName = 'DataSetProvider2'

end

object DataSource2: TDataSource

  DataSet = ClientDataSet2

end

No evento OnCreate do formulário digite o seguinte:

 

procedure TForm1.FormCreate(Sender: TObject);

begin

  SQLQuery1.SetSchemaInfo(stTables,'','');

  ClientDataSet1.Open;

end;

 

E no evento OnDateChange do DataSource1 digite o seguinte:

 

procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);

var

  tb: string;

begin

  ClientDataSet2.Close;

  tb := ClientDataSet1.FieldByName('TABLE_NAME').AsString;

  SQLQuery2.SetSchemaInfo(stColumns,tb,'');

  ClientDataSet2.Open;

end;

 

Com isso, exibimos no primeiro DBGrid as tabelas do banco de dados. Quando uma tabela for selecionada, exibimos informações sobre suas colunas no segundo DBGrid.

Execute a aplicação:

Archive06_4.gif 

Figura 4.

 

Download

 

dbExpress, DataSnap e ClientDataSet: Técnicas Avançadas

Para mais informações sobre acesso a dados no Delphi e técnicas avançadas, sugiro a leitura do meu livro, “Delphi: Programação para Banco de Dados e Web”, como apoio para o aprendizado das tecnologias. Na obra mostro várias técnicas introdutórios e avançadas de desenvolvimento com ClientDataSet, dbExpress e DataSnap (multicamadas, incluindo SOAP e COM+). Para mais informações, consulte o link https://ssl.dominal.com/clubedelphi/loja/descricao.asp?codigo=114&cod_pai=6

Leia todos artigos da série