ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Para quem utiliza FIREBIRD
Ir à página Anterior  1, 2
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
labambamogi
Aprendiz
Aprendiz


Registrado: Sexta-Feira, 4 de Novembro de 2011
Mensagens: 120

MensagemEnviada: Sáb Dez 12, 2015 8:00 pm    Assunto: Retornar os comentários (descriptions) dos campos Responder com Citação

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
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
danieldgm3
Novato
Novato


Registrado: Terça-Feira, 24 de Julho de 2018
Mensagens: 4

MensagemEnviada: Ter Jul 24, 2018 12:40 pm    Assunto: Firebird Responder com Citação

Valeu!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Ir à página Anterior  1, 2
Página 2 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB