| labambamogi Aprendiz
 
  
 
 Registrado: Sexta-Feira, 4 de Novembro de 2011
 Mensagens: 120
 
 
 | 
			
				|  Enviada: Sáb Dez 12, 2015 8:00 pm    Assunto: Retornar os comentários (descriptions) dos campos |   |  
				| 
 |  
				| Essa rotina retorna os comentários (descriptions) dos campos das tabelas ou procedures do Firebird Amigos usuários, desculpem-me quanto o alinhamento do código, a explicação está logo em seguida.
 
 Moderadores: tive que desativar BBCode nesta mensagem porque ele está alterando o código, façam testes e vejam que linhas como
 while (cTabProc <> '') do
 são alteradas p/
 while (cTabProc <do> 0) then
 Corrijam o site por favor, abraço.
 
 create or alter procedure TITULO_CAMPO (
 CTABPROC varchar(250),
 CTIPO char(1) = 'T')
 returns (
 CAMPO varchar(50),
 DESCRICAO varchar(1000))
 as
 declare variable CTABPROC2 varchar(50);
 declare variable I integer;
 declare variable PREFIXO varchar(10);
 begin
 cTabProc = upper(cTabProc);
 cTipo = upper(cTipo);
 
 --Como posso ter mandado mais de um objeto (a.ORC, b.CONTATO)...
 while (cTabProc <do> 0) then
 begin
 cTabProc2 = trim(substring(cTabProc from 1 for i-1));
 cTabProc = trim(substring(cTabProc from i+1 for char_length(cTabProc)));
 end
 else
 begin
 cTabProc2 = trim(cTabProc);
 cTabProc = '';
 end
 
 i = position('.' in cTabProc2);
 if (i > 0) then
 begin
 prefixo = substring(cTabProc2 from 1 for i-1) || '.';
 cTabProc2 = substring(cTabProc2 from i+1 for char_length(cTabProc2));
 end
 else
 prefixo = '';
 
 --O uso da trim aqui é imprescindível p/ evitar espaços em branco no nome do campo gerando erros em comandos
 --no Delphi como Locate
 if (cTipo = 'T') then    --T = Tabelas, P = Procedures
 begin
 for SELECT :prefixo || trim(upper(rdb$field_name)),
 case
 when position(ascii_char(13),rdb$description) > 0 then
 substring(rdb$description from 1 for position(ascii_char(13),rdb$description)-1)
 else rdb$description
 end descricao
 FROM rdb$relation_fields
 WHERE rdb$relation_name = :cTabProc2 and rdb$description is not null
 into :CAMPO, :DESCRICAO
 do
 suspend;
 end
 else
 begin
 --No caso das procedures, não considerei que as descrições dos campos requeressem mais que 1 linha
 for select :prefixo || trim(upper(RDB$PARAMETER_NAME)), RDB$DESCRIPTION
 from RDB$PROCEDURE_PARAMETERS
 where RDB$PROCEDURE_NAME = :cTabProc2 and RDB$DESCRIPTION is not null
 into :CAMPO, :DESCRICAO
 do
 suspend;
 end
 end
 end
 |  |