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