consulta sql
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:
e dessa forma com a sql mas nao da certo
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
Curtidas 0
Respostas
Afarias
03/10/2009
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+
// +#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+
GOSTEI 0
Tchucky
03/10/2009
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
com a sql ele nao da nada
estou usando o firebird como banco de dados
GOSTEI 0
Afarias
03/10/2009
|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:
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+
|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+
GOSTEI 0
Tchucky
03/10/2009
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...
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...
GOSTEI 0
Afarias
03/10/2009
|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+
|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+
GOSTEI 0
Tchucky
03/10/2009
ta tudo bem mesmo retirando a parte q destroi o componente continua do mesmo jeito ela nao funciona ainda... nao aparece nada no DBGrid...
GOSTEI 0
Afarias
03/10/2009
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+
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+
GOSTEI 0
Tchucky
03/10/2009
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
GOSTEI 0
Afarias
03/10/2009
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+
Talvez outra pessoa possa ajudar com seu problema *[b:8e36e3f475]acima[/b:8e36e3f475]*. Boa sorte.
T+
GOSTEI 0