Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

GIMENES

problema com SQL num form

Recommended Posts

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.