GIMENES 0 Denunciar post Postado Junho 11, 2010 Boa noite... Estou com um problema, no meu codigo abaixo tenho uma pesquisa por codigo ou por nome... Presciso que ele ordene todos os dados por codigo quando ItemIndex=0 e quando o Edcons nao estiver nada divitado! O mesmo acontece quando o ItemIndex=1 que vai ser a pesquisa por nome: If LbTabela.Caption = 'Cliente' then begin With DM.QueryPesquisa do begin Close; SQL.Clear; SQL.Add('Select * from Cliente'); If (Edcons.text <> '') and (Edcons.text <> ' ')then begin If RGCons.ItemIndex = 0 then SQL.Add('Where COD_CLIENTE='+#39+EdCons.Text+#39) else SQL.Add('Where nome like '+#39+EdCons.Text+'%'+#39+'ORDER BY NOME'); end; Open; end; end; Se alguem puder me ajudar agradeco... T+! Compartilhar este post Link para o post Compartilhar em outros sites
EuToComProblema! 1 Denunciar post Postado Junho 16, 2010 qual exatamente é o problema? a unica coisa que percebi que esta meio estranho: If (trim(Edcons.text) <> '') then //trim() remove espaços em branco do final de uma string SQL.Add('Where nome like '+#39+EdCons.Text+'%'+#39+' ORDER BY NOME');//coloca um espaço antes do order by se nao o sql vai ficar junto e vai dar erro Compartilhar este post Link para o post Compartilhar em outros sites
Jhony ZaM 1 Denunciar post Postado Junho 22, 2010 Cara primeiro conselho de amigo comese a identa seus codigos ta horrivel de intende mais vamo la. pra trabalhar dessa forma adicionando wheres dentro do codigo é aconselhavel trabalhar com 2 sql. Um vai ser o padrao e ou outro o adicional. O padrao leva toda a parte sql ate a ultima coluna antes do where. nos adicional voce coloca os where. FAsendo isso crie suas condicoes vou postrar aki um exemplo. procedure Tfrm00301.FormCreate(Sender: TObject); begin WindowState:= wsMaximized; SQL.Padrao:= 'SELECT t.fio_nivel99 ||'+QuotedStr('.')+'|| '+ ' t.fio_grupo ||'+QuotedStr('.')+'|| '+ ' t.fio_subgrupo||'+QuotedStr('.')+'|| '+ ' t.fio_item cod_fio, '+ ' t.fio_nivel99 nivel, '+ ' t.fio_grupo grupo, '+ ' t.fio_subgrupo subgrupo, '+ ' t.fio_item item, '+ ' rvb_cadpro_001(t.fio_nivel99, t.fio_grupo, t.fio_subgrupo, t.fio_item) des_fio, '+ ' SUM(t.qtde_total_fio) pes_total '; Este eu criei como padrao ´no form create. SQL.Adicional := ' FROM pcpt_015 t '+ ' WHERE rvb_tec_001(t.ordem_tecelagem) IN ('+result+') '+ ' GROUP BY t.fio_nivel99, '+ ' t.fio_grupo, '+ ' t.fio_subgrupo, '+ ' t.fio_item '+ ' ORDER BY t.fio_nivel99, '+ ' t.fio_grupo, '+ ' t.fio_subgrupo, '+ ' t.fio_item '; cdsPrincipal.Close; qryPrincipal.SQL.Text := SQL.Padrao + SQL.Adicional; cdsPrincipal.Open; Note que no fim do adiconal eu fis q qryPrinciapl receber Padrao + Adicional, e sempre que quiser condicoes diferentes eh soh limpar a sql adicional. Assim eh soh voce faser suas condicoes kalker coisa posta que te ajudo mais. Compartilhar este post Link para o post Compartilhar em outros sites
Ilano 0 Denunciar post Postado Junho 22, 2010 Olá Gimenes, você tb pode fazer o seguinte: Criar uma unit onde você possa ter todas as funções de suas consultas, claro q seria uma unit para cada tabela, mas em cada unit você poderia colocar funções de SELECT, INSERT, UPDATE, DELETE, e outras que precisar. Isso até facilitaria para q depois você utilizasse essa mesma consulta em outros formulários, e utilizando seus where e order by para várias situações. Por exemplo: Function ConsultaMarca(pParametro : String; pOrdem : String):String; begin Try With DMDados.MARCAS Do Begin Close; SQL.Clear; SQL.Add('SELECT Mar_Codigo, Mar_Nome'); SQL.Add('FROM tb_marcas'); If pParametro <> '' Then SQL.Add('WHERE ' + pParametro); If pOrdem <> '' Then SQL.Add('ORDER BY ' + pOrdem) Else SQL.Add('ORDER BY Mar_Nome'); SQL.SaveToFile('CONSULTA/CONSULTA_MARCAS.SQL'); Open; End; Except On E: Exception Do Begin ShowMessage('OCORREU UM ERRO AO TENTAR CONSULTAR SO SEUS DADOS:' + #13 + #13 + E.Message); End; End; Depois disso você só chamaria essa função: ConsultaMarca('', ''); //Sem condições e com o ordenação (Order By) padrão ConsultaMarca('', 'Mar_Codigo'); //Sem condição e com ordenação (Order By) pelo código ConsultaMarca('Mar_Codigo BETWEEN 1 AND 25', 'Mar_Nome DESC'); //Filtrar pelo código entre 1 e 25 e fazendo ordenação (Order By) decrescente pelo nome Espero ter ajudado. Compartilhar este post Link para o post Compartilhar em outros sites
Jhony ZaM 1 Denunciar post Postado Junho 22, 2010 Soh uma coisinha esqueci de diser as sql padrao e adicional sao variaveis do tipo RECORD; PAra usalas chame-as logo apos a palavra type no comeso do codigo da seguinte forma: type Texemplo = record Padrao1: string; Adicional1:String; end; Ah e cuidado em criar unit diferente nao da de conversa entre elas sem uma unit Principal onde ficara as variaveis globais da mais trabalho mais escolha o mlehor pra você vlw. Compartilhar este post Link para o post Compartilhar em outros sites
GIMENES 0 Denunciar post Postado Julho 3, 2010 Ok Problema resolvido... Adicionei meu SQL em 2 estagios: begin Close; SQL.Clear; SQL.Add('Select * from Cidade'); If (Edcons.text <> '') and (Edcons.text <> ' ')then begin If RGCons.ItemIndex = 0 then SQL.Add('Where COD_CIDADE='+#39+EdCons.Text+#39) else SQL.Add('Where nome like '+#39+EdCons.Text+'%'+#39); end; If RGCons.ItemIndex = 0 then SQL.Add('order by cod_cidade') else SQL.Add('order by nome'); Open; end; Compartilhar este post Link para o post Compartilhar em outros sites