SQL - Where .....
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
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
Curtidas 0
Respostas
Neto
09/09/2003
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:GOSTEI 0
Derecksp
09/09/2003
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
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
GOSTEI 0