Jump to content
Fórum Script Brasil
  • 0

Dúvida Com Select


fajo
 Share

Question

Olá,

tenho uma tabela com os seguintes campos:

n_req cod_orc entrega

1 25/07 sim

2 32/07 sim

3 25/07 <null>

4 45/07 sim

5 32/07 sim

sempre que uma requisição tá pronta, é colocado um sim no campo entrega;

onde cada orcamento pode ter várias requisições, gostaria que um select, só me retornasse os registros cuja entrega seja "sim" mas por orcamento, ou seja,

se aplicada na tabela acima, o retorno tem que ser:

2 32/07 sim

4 45/07 sim

5 32/07 sim

o orcamento 25/07 não deve aparecer pois uma de suas requisições está <null>;

Obrigado

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0
tenta isso:

with query1 do
begin
close;
sql.add('select * from Tabela1 where entrega like "Sim");
open;
end;

Pirambu!, apenas completando sua sugestão:

- observar que o colega armazena o texto "sim" em minúsculo (ao menos no exemplo). Neste caso é conveniente lembrar a questão da diferenciação de letras maiúsculos ou minúsculas. Talvez seja necessário o uso de UPPER (se for Paradox)

- como o texto é procurado em seu formato completo. Dê sempre preferência por utilizar o sinal de "=" no lugar de "LIKE"

Abraços

Link to comment
Share on other sites

  • 0
Guest --felipe --
tenta isso:

with query1 do
begin
close;
sql.add('select * from Tabela1 where entrega like "Sim");
open;
end;
eu acho que deste jeito a linha "1 25/07 sim" será listada, e isso não deve acontecer eu faria assim para resolver esse problema: primeiro verificaria os "nulls" armazenaria em uma variavel do tipo vetor e depois usaria essa variavel como referencia no SQL
with query1 do
begin
  close;
  sql.clear;
  sql.add('select * from tabela where entrega="null");
  open;
  last;
  first;
end;
for i:=0 to (query1.recordcount-1) do begin
  Nulls[i]:=query1.fields[1].asstring; //Nulls - variavel vetor do tipo string
  query1.next;
end;
query1.close;
query1.sql.clear;
query1.sql.add('select * from tabela ');
if i<2 then query1.sql.add('where cod_orc<>"'+Nulls[0]+'"')
else begin
  query1.sql.add('where cod_orc<>"'+Nulls[0]+'" ');
  for i1:=1 to (i-1) do
     query1.sql.add('and cod_orc<>"'+Nulls[i1]+'" ');  
end;
query1.open;

acho que assim vai dar certo, mas não testei ...

Link to comment
Share on other sites

  • 0
tenta isso:

with query1 do
begin
close;
sql.add('select * from Tabela1 where entrega like "Sim");
open;
end;

eu acho que deste jeito a linha "1 25/07 sim" será listada, e isso não deve acontecer

procurar com entrega like "Sim" ou entrega = "sim", não tem como obter uma linha em que este campo (entrega) seja nulo - se é a isto que você se refere.

eu faria assim para resolver esse problema:

primeiro verificaria os "nulls" armazenaria em uma variavel do tipo vetor

e depois usaria essa variavel como referencia no SQL

na verdade, o ideal neste caso em que o campo tem a função de um flag/status, é que ele não seja nulo nunca. Se não é "sim", deveria conter "não" ou "não". É só inicializar o campo no evento OnNewRecord com o valor padrão.

Pode evitar muitas dores de cabeças.

Abraços

Link to comment
Share on other sites

  • 0
Guest --felipe --

eu faria assim para resolver esse problema:

primeiro verificaria os "nulls" armazenaria em uma variavel do tipo vetor

e depois usaria essa variavel como referencia no SQL

na verdade, o ideal neste caso em que o campo tem a função de um flag/status, é que ele não seja nulo nunca. Se não é "sim", deveria conter "não" ou "não". É só inicializar o campo no evento OnNewRecord com o valor padrão.

Pode evitar muitas dores de cabeças.

Abraços

é na verdade eu me expressei mal, eu quis me referir a "nulls" como uma string, e não como um campo vazio,

nesta linha:

sql.add('select * from tabela where entrega="null");

só pra exemplificar o que Micheus disse:

Se não é "sim", deveria conter "não" ou "não". É só inicializar o campo no evento OnNewRecord com o valor padrão.

Pode evitar muitas dores de cabeças.

é real, na sua query1, procure o evento OnNewRecord:

procedure Query1NewRecord(DataSet: TDataSet);
begin
  DataSet['entrega'] := 'não';
end;

abraço!!

Link to comment
Share on other sites

  • 0
Guest --felipe --

eu faria assim para resolver esse problema:

primeiro verificaria os "nulls" armazenaria em uma variavel do tipo vetor

e depois usaria essa variavel como referencia no SQL

na verdade, o ideal neste caso em que o campo tem a função de um flag/status, é que ele não seja nulo nunca. Se não é "sim", deveria conter "não" ou "não". É só inicializar o campo no evento OnNewRecord com o valor padrão.

Pode evitar muitas dores de cabeças.

Abraços

é na verdade eu me expressei mal, eu quis me referir a "nulls" como uma string, e não como um campo vazio,

nesta linha:

sql.add('select * from tabela where entrega="null");

só pra exemplificar o que Micheus disse:

Se não é "sim", deveria conter "não" ou "não". É só inicializar o campo no evento OnNewRecord com o valor padrão.

Pode evitar muitas dores de cabeças.

é real, na sua query1, procure o evento OnNewRecord:

procedure Query1NewRecord(DataSet: TDataSet);
begin
  DataSet['entrega'] := 'não';
end;

abraço!!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.2k
    • Total Posts
      647.4k
×
×
  • Create New...