O que eu faria. ( WALL OF TEXT )
Criaria um arquivo que listasse as tabelas que fossem passiveis de consulta.

<tables>
   <table name="Fornecedores" />
   <table name="Produtos" />
    ...
</tables>

Assim não poderia consultar todas as tabelas.

Cria uma tela com um ComboBox que carregaria esse XML.

No meu servidor, eu teria um método que eu passaria o nome da tabela e
ele retornaria a estrutura dela da seguinte forma.
Campo, Tipo, Quantidade Máxima de Caracteres, ToolTip e por ai vai.
Guardaria todas as informações dentro de um ValueObject e passaria
para o lado Client.

Exemplo:

public class FieldInformationVO {
   public var name:String;
   public var type:String;
   public var toolTip:String;
   // Outros campos uteis
}

Chamaria o método criado que retornaria uma coleção de
FieldInformationVO e com base nisso teria um segundo ComboBox com os
campos da tabela que escolhi no primeiro ComboBox.

Se eu escolher no segundo ComboBox o campo "código" ele adicionaria
dinamicamente um TextInput ao lado direito do segundo ComboBox. Onde
seria digitado o Valor para a query. E ao canto direito do TextInput (
ou qualquer outro campo dinamico ) adicionaria um botão de "mais" que
poderia adicionar uma nova condição.

Para fazer a query eu criaria uma classe para transportar os valores
do filtro ( poderia adicionar mais de uma condição, e não apenas uma
como você sugeriu ).

O filtro eu faria da seguinte maneira, varreria os campos visuais do
tipo pré-definido. Pegaria o nome do campo e qual o valor que ele
recebeu e adicionaria novamente em uma coleção e enviaria para o
servidor.

No servidor eu daria iteraria sobre essa coleção e concatenaria o
campo com o valor.

var conditions:String = "";

for each ( var item:Object in filters){
   if (conditions != "")
     conditions += " AND ";
   else if (conditions == ""){
     conditions = " WHERE ";
   }

  conditions += item.fieldName + " = " item.fieldValue;
}

Talvez fosse necessário fazer alguma coisa para evitar SQL Injection,
mas nem se preocupe com isso agora.

Depois diria

var fullSQL:String = "SELECT * FROM ";

fullSQL += filter.tableName;

fullSQL += conditions;



Fiz em ActionScript mas pode converter a ideia para sua linguagem backend.



2012/4/10 Re JMD <rjmdf...@gmail.com>:
> Fredy, minha idéia seria fazer algo mais simples.
> Tenho esse sql:
>
> select * from desvio where cd_departamento = [TextImput.text]
>
> E com essa informação aramazenada que o primeiro campo desse sql seria esse
> textimput quando chamar o relatório ele deveria exibir esse pcampo para ser
> digitado.
>
> Ou nesse caso:
>
> select * from vendas where cd_departamento =
> [ComboboxDepartamento.selectedItem]
> A minha dúvida é essa como armazenar a informação e depois como montar uma
> tela com os componentes do select?
>
> Em 9 de abril de 2012 20:23, Fredy Gadotti <fredy.gado...@gmail.com>
> escreveu:
>
>> Eu expliquei o que eu fiz no primeiro post, tenta dar uma relida para
>> ver se fica alguma dúvida.
>> Se não entender só explicar o que não entendeu que tenho melhorar essa
>> parte :)
>>
>> 2012/4/9 Re JMD <rjmdf...@gmail.com>:
>> > Entao fredy, para eu salvar o xml no banco preciso de saber como
>> > adcionar os
>> > componentes pela interface da aplicacao, se houvesse alguma forma do
>> > usuario
>> > conseguir montar a tela filtro do relatorio eu salvaria esse xml
>> > relacionado
>> > com o relatoririo, como ja tenho o resultado sendo trazido por um xml
>> > dinamico no qual posso montar o relatorio pelo stimulsoft so esta
>> > faltando
>> > criar um tela para geracao de filtro dinamico.
>> >
>> > Em 9 de abril de 2012 20:02, Fredy Gadotti <fredy.gado...@gmail.com>
>> > escreveu:
>> >
>> >> Pior que não. A gente tinha montado do zero a solução.
>> >> Por que não cria um campo do tipo XML no banco e salva ele do jeito
>> >> que você montou e depois só lê ele para fazer o filtro?
>> >>
>> >> 2012/4/9 RE JMD <rjmdf...@gmail.com>:
>> >> > Fredy,
>> >> >
>> >> > Você conhece algum exemplo que tenha essa solução por você
>> >> > apresentada?  Já conseguir montar o XML dinâmicamente e o que está
>> >> > faltando é entender como armazenar e apresentar os componentes filtro
>> >> > de cada relatório!
>> >> >
>> >> > On 29 mar, 13:18, Fredy Gadotti <fredy.gado...@gmail.com> wrote:
>> >> >> Precisei fazer isso em um projeto. O backend era Java, não tenho
>> >> >> acesso aos fontes mas era algo mais ou menos assim, tinha um método
>> >> >> que retornava a estrutura da tabela que queria fazer o relatório.
>> >> >> Com
>> >> >> a estrutura em mãos, populava um ComboBox com os campos que tem a
>> >> >> tabela. Sabendo os tipos, era possível adicionar dinamicamente um
>> >> >> editor equivalente ao tipo do dado da tabela, se fosse Data um
>> >> >> DateField, se fosse String um TextInput se fosse Integer um
>> >> >> TextInput
>> >> >> com restrict e por ai vai;
>> >> >> E mais um que indicava qual o tipo de filtro queria fazer, maior,
>> >> >> menor, igualdade ou diferença.
>> >> >>
>> >> >> Exemplo do Filtro:
>> >> >>
>> >> >> Campo: [ ComboBox de Campos] | [ ComboBox de Condições ] | [ Campo
>> >> >> dinâmico conforme tipo de dado ] [ Botão para adicionar nova
>> >> >> condição
>> >> >> ]
>> >> >>
>> >> >> Ao clicar no botão, adicionava uma nova linha onde podia escolher
>> >> >> outras restrições.
>> >> >>
>> >> >> Ao clicar no botão aplicar, varria o filtro e criava uma coleção
>> >> >> para
>> >> >> enviar ao server para criar dinamicamente o SQL que iria fazer a
>> >> >> filtragem.
>> >> >>
>> >> >> Espero ter dado o caminho das pedras.
>> >> >>
>> >> >> Abraço,
>> >> >>
>> >> >> Fredy.
>> >> >>
>> >> >> 2012/3/29 Re JMD <rjmdf...@gmail.com>:
>> >> >>
>> >> >>
>> >> >>
>> >> >> > Pessoal,
>> >> >>
>> >> >> > Estou querendo desenvolver uma opção na minha aplicação para o
>> >> >> > usuário
>> >> >> > conseguir criar relatórios dinamicamente.
>> >> >> > O design do relatório vou fazer via stimulsoft  passando os
>> >> >> > parâmetros(filtro) da aplicação para o relatório via URL.
>> >> >>
>> >> >> > - No cadastro do relatório o usuário informa quais campos(filtros)
>> >> >> > o
>> >> >> > relatório vai ter e isso ficará armazenado no banco.
>> >> >>
>> >> >> > - Quando o usuário chamar o relatório o flex vai montar o pop-up
>> >> >> > com
>> >> >> > os
>> >> >> > filtros de acordo com o cadastro do relatório.
>> >> >>
>> >> >> > Tem como fazer isso? Existe algum exemplo?
>> >> >>
>> >> >> > --
>> >> >> > Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>> >> >> > Para enviar uma mensagem, envie um e-mail para
>> >> >> > flexdev@googlegroups.com
>> >> >> > Para sair da lista, envie um email em branco para
>> >> >> > flexdev-unsubscr...@googlegroups.com
>> >> >> > Mais opções estão disponíveis
>> >> >> > emhttp://groups.google.com/group/flexdev- Ocultar texto das
>> >> >> > mensagens
>> >> >> > anteriores -
>> >> >>
>> >> >> - Mostrar texto das mensagens anteriores -
>> >> >
>> >> > --
>> >> > Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>> >> > Para enviar uma mensagem, envie um e-mail para
>> >> > flexdev@googlegroups.com
>> >> > Para sair da lista, envie um email em branco para
>> >> > flexdev-unsubscr...@googlegroups.com
>> >> > Mais opções estão disponíveis em
>> >> > http://groups.google.com/group/flexdev
>> >>
>> >> --
>> >> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>> >> Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
>> >> Para sair da lista, envie um email em branco para
>> >> flexdev-unsubscr...@googlegroups.com
>> >> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
>> >
>> >
>> > --
>> > Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>> > Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
>> > Para sair da lista, envie um email em branco para
>> > flexdev-unsubscr...@googlegroups.com
>> > Mais opções estão disponíveis em http://groups.google.com/group/flexdev
>>
>> --
>> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>> Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
>> Para sair da lista, envie um email em branco para
>> flexdev-unsubscr...@googlegroups.com
>> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
>
>
> --
> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
> Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
> Para sair da lista, envie um email em branco para
> flexdev-unsubscr...@googlegroups.com
> Mais opções estão disponíveis em http://groups.google.com/group/flexdev

-- 
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para 
flexdev-unsubscr...@googlegroups.com
Mais opções estão disponíveis em http://groups.google.com/group/flexdev

Responder a