Fórum consulta sql #375570

03/10/2009

0

Olé eu fazendo uma consulta para me mostrar os clientes q nao m pagaram ainda quando eu uso o filter ele funciona mas quando eu uso ela em SQL nao funcionaa tabela fica fechada

estou fazendo dessa forma com filtered:

 dm_cliente_atrasado.cds_titulo.open;
 dm_cliente_atrasado.cds_titulo.indexfieldnames := ´DT_VENCIMENTO´;
 dm_cliente_atrasado.cds_titulo.filtered := false;
 dm_cliente_atrasado.cds_titulo.filter := ´DT_VENCIMENTO < ´+ Quotedstr(datetostr(Date))+ ´and PAGAR_RECEBER =´+(´1´) + ´and DT_PAGAMENTO IS NULL´;
 dm_cliente_atrasado.cds_titulo.filtered := true;


e dessa forma com a sql mas nao da certo

 Var
   Q: TSQLQuery;
begin
  Q := TSQLQuery.Create(nil);
  Q.SQLConnection := dm_cliente_atrasado.sq_titulo.SQLConnection;
    try
 /// Q.Close;
  Q.SQL.Text :=    ´ SELECT           ´
              +#13+´ T.DT_VENCIMENTO, ´
              +13+´ T.PAGAR_RECEBER, ´
              +13+´ T.DT_PAGAMENTO   ´
              +13+´ FROM TITULO T    ´
              +13+´WHERE (´
              +13+´ (T.DT_VENCIMENTO < ´+Quotedstr (datetostr (Date))+´) ´
              +13+´ AND´
              +13+´ PAGAR_RECEBER =´+(´1´) + ´and DT_PAGAMENTO IS NULL´
              +13+´)´;
  Q.Open;
  finally
   FreeAndNil(Q);
  end;



Tchucky

Tchucky

Responder

Posts

03/10/2009

Afarias

Uma observação apenas, sobre a linha de código a seguir:


// +#13+´ (T.DT_VENCIMENTO < ´+Quotedstr (datetostr (Date))+´) ´

Vc não pode -- ou não deve nunca -- simplesmente usar DateToStr() para formatar uma data enviada para um servidor de banco de dados.

DateToStr() vai usar a formatação da máquina cliente que pode variar -- ou a definida na sua aplicação (fixa) -- mas vc deve garantir que o formato enviado ao banco seja um dos formatos reconhecidos pelo mesmo.

Ex: Se estiver usando FIREBIRD vc não pode informar uma data no formato padrão brasileiro (dd/mm/yyyy) -- o FB não vai entender.

Ao formatar datas para um SQL use sempre FormatDateTime() assim vc define o formato correto para o banco que estiver usando.

Esse seu código por exemplo, se fosse para FB, deveria ficar algo como:


+13+´ (T.DT_VENCIMENTO < ´+QuotedStr (FormatDateTime(´dd.mm.yyyy´, Date))+´) ´



T+


Responder

Gostei + 0

03/10/2009

Tchucky

ja mudei como vc informou la em cima mas ainda esta fechada minha tabela ela nao abre so abre se eu usar o filtered...

com a sql ele nao da nada

estou usando o firebird como banco de dados


Responder

Gostei + 0

03/10/2009

Afarias

|ja mudei como vc informou la em cima mas ainda esta fechada minha
|tabela ela nao abre so abre se eu usar o filtered...

vc pode explicar o q quer dizer com ´não abre´ ??

Outra coisa, observa o seu código:


  Q.Open; 
  finally 
    FreeAndNil(Q); 
  end;



vc abre a consulta e logo em seguida destrói o componente query... vc não faz nada com o resultado, nem pode pq vc destrói o componente logo depois de abrir... está correto isso?



T+


Responder

Gostei + 0

03/10/2009

Tchucky

quando eu m refiro nao aber é pq ele nao m mostra nada no grid fica como se estivece com a tabela fechada

todas as minhas consultas q eu crio em tempo de execução é dessa forma q estou usando ai so essa q esta addno esse problema...


Responder

Gostei + 0

03/10/2009

Afarias

|todas as minhas consultas q eu crio em tempo de execução é dessa forma q
|estou usando ai so essa q esta addno esse problema...

Para mim é impossível acreditar que esse seu código funcione de qualquer forma. Depois q vc destrói o objeto não tem como um Grid mostrar os valores de um objeto inexistente.

No mínimo uma tabela de memória (como CDS) deveria estar carregando o resultado da consulta antes da Query ser destruída. Mas isto não é o q é mostrado no código apresentado.

Ou o código mostrado está incompleto ou vc está enganado sobre o q está fazendo.


T+


Responder

Gostei + 0

03/10/2009

Tchucky

ta tudo bem mesmo retirando a parte q destroi o componente continua do mesmo jeito ela nao funciona ainda... nao aparece nada no DBGrid...


Responder

Gostei + 0

04/10/2009

Afarias

Isto é pq seu Grid não está associado ao TSQLQuery. E se está não vai funcionar mesmo pois o TSQLQuery -- até onde sei -- é um DataSet unidirecional e Grids não funcionam com DataSets unidirecionais.

Vc deveria ter um ClientDataSet/DataSetProvider associado a este TSQLQuery (q não deveria ser criado dinamicamente a não ser q vc queira carregar o ClientDataSet manualmente).

Ao definir o SQL do TSQLQuery vc iria fechar/abrir o ClientDataSet para q ele executasse a Query e fosse carregado com seus dados. O Grid deveria estar associado então ao ClientDataSet.


T+


Responder

Gostei + 0

04/10/2009

Tchucky

amigo ta tudo certinho todos ligado se ele mostra os dados usando um filter significa q ele esta ligado e funcionando... a questao é a consulta q esta assima q nao mostra nada no dbGrid


Responder

Gostei + 0

04/10/2009

Afarias

Bom... se está tudo certo, ok. Eu realmente não sei mais o q dizer.

Talvez outra pessoa possa ajudar com seu problema *[b:8e36e3f475]acima[/b:8e36e3f475]*. Boa sorte.



T+


Responder

Gostei + 0

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

Aceitar