11 de mar. de 2011

53º Dia

Boa Noite!
Hoje passei o dia em busca de soluções para fazer o SQL Dinâmico, pois não tenho nenhum idéia de como fazer o mesmo.. Depois de muita busca cheguei ao seguinte resultado (com ajuda de alguns amigos do DevBrasil):

1) Crie os controles:
  • Crie um DropDownList para as tabelas (AutoPostBack=true OnSelectedIndexChanged="xxx" DataValueField="xxx" DataTextField="xxx"). 
  • Crie um DropDownList para os campos (AutoPostBack=true OnSelectedIndexChanged="xxx" DataValueField="xxx" DataTextField="xxx")
  • Crie um DropDownList para os operadores (AutoPostBack=true OnSelectedIndexChanged="xxx" DataValueField="xxx" DataTextField="xxx")
  • Crie um TextBox para valor a ser digitado pelo usuário
  • Crie um CustomValidator para validar o valor digitado
  • Crie um CheckBoxList para os campos a serem exibidos no relatório
  • Crie um CustomValidator para validar se algum campo foi escolhido para ser exibido no relatório
  • Crie um botão para pesquisar
  • Crie um GridView para exibir os dados

2)  utilizar a consulta "SELECT Name as Tabela FROM SysObjects WHERE XType = 'U' AND Name <> 'dtproperties' AND Name <> 'sysdiagrams'" para preencher seu DropDown de tabelas

3) Ao selecionar a Tabela, utilizar a consulta abaixo para preencher o DropDownList e o CheckBoxList com os campos além de configurar os CustomValidatores de acordo com o tamanho e tipo de dados.
"SELECT C.Name AS Nome,        
CASE WHEN C.Status = 128 THEN 1 ELSE 0 END AS AutoNumeracao,        
C.IsNullable AS Obrigatorio,        
C.Length AS Tamanho,
TYPE_NAME(C.xtype) AS Tipo  
 FROM SysObjects O  
INNER JOIN SysColumns C ON O.id = C.id  
WHERE O.xtype = 'U'    
AND O.name = @NomeTabela  
ORDER BY C.AutoVal DESC, C.IsNullable ASC, O.Name ASC"

4) Ao selecionar o campo,preencher o DropDownList com uma coleção de objetos seu (Operadores)  de acordo com o tipo do campo.

5) ao digitar o valor e clicar no botão, criar uma consulta próxima da que eu colocarei abaixo, executa-la e preencher o grid:
"select + (foreach no CheckBoxList pegando os valores selecionados) +
" from " + ddlTabela.SelectedValue
"where " + ddlCampo.SelectedValue + " " + ddlOperado.SelectedValue + " " + txtValor.Text

E já comecei a por isso em prática...
Agora falta continuar a fazer isso. Hoje também peguei um Backup mais recente do banco, porém nele não tem as tabelas das quais eu estou utilizando (será que isso será um futuro problema? :S), e dei uma modificada na parte dos filtros, segue o print abaixo: