Fórum SQL - Where ..... #180877

09/09/2003

0

Como posso compor a expressão de validação para ela considerar por exemplo o valor de um DBEdit na SQL, ou algo do tipo...
Exemplo:
M_Codigo:= DtmDados.Exames.FieldValues[´Exe_Cod´];
Query1.SQL.Add(´Select Max(A.Item) As MaxItem From DetExe A,CadExe B ´);
Query1.SQL.Add(´Where M_Codigo = A.Exe_Cod´);
M_Itens := query1.fields[0].AsInteger

** Dessa forma não fiuncionou.....
Também... Porque a variavel MaxItem não recebe valor???
Obrigado


Neto

Neto

Responder

Posts

09/09/2003

Neto

Como posso compor a expressão de validação para ela considerar por exemplo o valor de um DBEdit na SQL, ou algo do tipo... Exemplo: M_Codigo:= DtmDados.Exames.FieldValues[´Exe_Cod´]; Query1.SQL.Add(´Select Max(A.Item) As MaxItem From DetExe A,CadExe B ´); Query1.SQL.Add(´Where M_Codigo = A.Exe_Cod´); M_Itens := query1.fields[0].AsInteger ** Dessa forma não fiuncionou..... Também... Porque a variavel MaxItem não recebe valor??? Obrigado
:idea:


Responder

Gostei + 0

09/09/2003

Derecksp

Ola Amigo

Seu select tem diversos problemas.

O Primeiro deles é o problema com o relacionamento entre duas tabelas, no From da Select vc colocou duas tabelas. Nesrte caso o SQL trabalharia como um plano cartesiano, se vc tiver 10 registro na primeira tabela e 10 na segunda tabela, o consulta te retornaria 100 registros, pois repetiriam 10 vezes cada um.
Outro problemas esta na clausula Where vc inverteu a ordem da coluna e da variavel. E a variavel deveria estar fora das aspas (´), para vc acesasr o conteudo da variavel e não o nome dela.

Tente fazer desta maneira.

With Query1 do
Begin
Close;
SQL.Clear;
SQL.Add(´Select Max(A.Item) As MaxItem´);
SQL.Add(´From DetExe A´);
SQL.Add(´Inner Join CadExe B on (A.Codigo = B.Codigo_Det) ´);
SQL.Add(´Where A.Exe_Cod + :p_codigo´);
ParamByName(´p_codigo´).asInteger := IntToStr(dbEdit1.Text);
Open;
M_Itens := FieldByName(´MaxItem´).asInteger;
Close;
End;


Explicação: Assumi que a tabela CadExe tem um campo (Codigo_Det) que relaciona com a tabela DetExe, para funcionar como uma chave estrangeira. Fiz isto apenas na ilustrar um relacionameto, pois neste exemplo ele quase que inutil, vc esta pegando o valor máximo da tabela DetExe e filtrando por outro campo da mesma tabela. O relacionamento só serveria para calcular registros de DetExe que existem na tabela CadExe, pois utilizei um relacionamento do tipo (Inner Join).
na clausula Where coloquei um parametro (:p_codigo), pois isto facilita a codificação de consultas quando existem um numero grande de paramentros. Depois abria a query e peguei o valor da consulta e guardei em uma variável e fechei a consulta.

Dica: Caso não existam registro que satisfaça a consulta o campo MaxItem pode te retornar um valor nulo, existem duas maneiras de tratar este problema um é dentro da propria consulta, utilizando funções como a IsNull (do SQL) ou outra similiar do seu gerenciador de banco de dados ou tratar o retorno do campo no próprio Delphi.

Espero te ajudado.

Se houver dúvidas pode me perguntar.

Derecksp@bol.com.br


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar