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.
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).
Figura 2.
Coloque mais alguns componentes dbExpress e da paleta Data Access, conforme mostrado a seguir:
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:
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
- Curso de dbExpress e DataSnap
- Curso de dbExpress e DataSnap - Parte II
- Curso de dbExpress e DataSnap - Parte III
- Curso de dbExpress e DataSnap - Parte IV
- Curso de dbExpress e DataSnap - Parte V
- Curso de dbExpress e DataSnap - Parte VI
- Curso de dbExpress e DataSnap - Parte VII
- Curso de dbExpress e DataSnap - Parte VIII
- Curso de dbExpress e DataSnap - Parte IX
- Curso de dbExpress e DataSnap - Parte X
- Curso de dbExpress e DataSnap - Parte XI
- Curso de dbExpress e DataSnap - Parte XII
- Curso de dbExpress e DataSnap - Parte XIII
- Curso de dbExpress e DataSnap - Parte XIV
- Curso de dbExpress e DataSnap - Parte XV
- Curso de dbExpress e DataSnap - Parte XVI
- Curso de dbExpress e DataSnap - Parte XVII
- Curso de dbExpress e DataSnap - Parte XVIII
- Curso de dbExpress e DataSnap - Parte XIX
- Curso de dbExpress e DataSnap - Parte XX
- Curso de dbExpress e DataSnap - Parte XXI
- Curso de dbExpress e DataSnap - Parte XXII
- Curso de dbExpress e DataSnap - Parte XXIII
- Curso de dbExpress e DataSnap - Parte XXIV
- Curso de dbExpress e DataSnap - Parte XXV
- Curso de dbExpress e DataSnap - Parte XXVI
- Curso de dbExpress e DataSnap - Parte XXVII
- Curso de dbExpress e DataSnap - Parte XXVIII
- Curso de dbExpress e DataSnap - Parte XXIX
- Curso de dbExpress e DataSnap - Parte XXX