Order By some com os registros quando ...
Quando o cbxData está checkado os registros deixam de aparecer na grid, acredito que seja alguma imcompatibildade entre o ORDER BY e o
´DATA >= :DtInicio AND DATA <= :DtFim´
Alguem pode me ajudar?
Código em Delphi que monta a Query:
procedure TfmConsultaLavagens.btnExecutarClick(Sender: TObject);
Var
QTD : Byte;
begin
inherited;
quResultado.Close;
quTotal.Close;
quResultado.SelectSQL.Clear;
quTotal.SelectSQL.Clear;
quResultado.SelectSQL.Add(´SELECT * FROM LAVAGENS´);
quTotal.SelectSQL.Add(´SELECT COUNT(CODLAVAGEM), SUM(Valor) FROM LAVAGENS´);
QTD:=0;
If (cbxUnidade.Checked) or (cbxTipo.Checked) or (cbxData.Checked) Then
Begin
quResultado.SelectSQL.Add(´WHERE´);
quTotal.SelectSQL.Add(´WHERE´);
End;
If cbxUnidade.Checked Then
Begin
If QTD > 0 Then
Begin
quResultado.SelectSQL.Add(´AND´);
quTotal.SelectSQL.Add(´AND´);
End;
quResultado.SelectSQL.Add(´CODUNIDADE=´+quUnidadesCODUNIDADE.AsString);
quTotal.SelectSQL.Add(´CODUNIDADE=´+quUnidadesCODUNIDADE.AsString);
QTD:=QTD+1;
End;
If cbxData.Checked Then
Begin
If QTD > 0 Then
Begin
quResultado.SelectSQL.Add(´AND´);
quTotal.SelectSQL.Add(´AND´);
End;
quResultado.SelectSQL.Add(´DATA >= :DtInicio AND DATA <= :DtFim´);
quResultado.Params[0].AsDate:=DtInicio.Date;
quResultado.Params[1].AsDate:=DtFim.Date;
quTotal.SelectSQL.Add(´DATA >= :DtInicio AND DATA <= :DtFim´);
quTotal.Params[0].AsDate:=DtInicio.Date;
quTotal.Params[1].AsDate:=DtFim.Date;
End;
If cbxTipo.Checked Then
Begin
If QTD > 0 Then
Begin
quResultado.SelectSQL.Add(´AND´);
quTotal.SelectSQL.Add(´AND´);
End;
quResultado.SelectSQL.Add(´CODTIPO=´+quTipoLavagensCODTIPO.AsString);
quTotal.SelectSQL.Add(´CODTIPO=´+quTipoLavagensCODTIPO.AsString);
QTD:=QTD+1;
End;
ShowMessage(quResultado.SelectSQL.Text);
ShowMessage(quTotal.SelectSQL.Text);
quResultado.SelectSQL.Add(´ORDER BY DATA´);
quResultado.Open;
quTotal.Open;
end;
´DATA >= :DtInicio AND DATA <= :DtFim´
Alguem pode me ajudar?
Código em Delphi que monta a Query:
procedure TfmConsultaLavagens.btnExecutarClick(Sender: TObject);
Var
QTD : Byte;
begin
inherited;
quResultado.Close;
quTotal.Close;
quResultado.SelectSQL.Clear;
quTotal.SelectSQL.Clear;
quResultado.SelectSQL.Add(´SELECT * FROM LAVAGENS´);
quTotal.SelectSQL.Add(´SELECT COUNT(CODLAVAGEM), SUM(Valor) FROM LAVAGENS´);
QTD:=0;
If (cbxUnidade.Checked) or (cbxTipo.Checked) or (cbxData.Checked) Then
Begin
quResultado.SelectSQL.Add(´WHERE´);
quTotal.SelectSQL.Add(´WHERE´);
End;
If cbxUnidade.Checked Then
Begin
If QTD > 0 Then
Begin
quResultado.SelectSQL.Add(´AND´);
quTotal.SelectSQL.Add(´AND´);
End;
quResultado.SelectSQL.Add(´CODUNIDADE=´+quUnidadesCODUNIDADE.AsString);
quTotal.SelectSQL.Add(´CODUNIDADE=´+quUnidadesCODUNIDADE.AsString);
QTD:=QTD+1;
End;
If cbxData.Checked Then
Begin
If QTD > 0 Then
Begin
quResultado.SelectSQL.Add(´AND´);
quTotal.SelectSQL.Add(´AND´);
End;
quResultado.SelectSQL.Add(´DATA >= :DtInicio AND DATA <= :DtFim´);
quResultado.Params[0].AsDate:=DtInicio.Date;
quResultado.Params[1].AsDate:=DtFim.Date;
quTotal.SelectSQL.Add(´DATA >= :DtInicio AND DATA <= :DtFim´);
quTotal.Params[0].AsDate:=DtInicio.Date;
quTotal.Params[1].AsDate:=DtFim.Date;
End;
If cbxTipo.Checked Then
Begin
If QTD > 0 Then
Begin
quResultado.SelectSQL.Add(´AND´);
quTotal.SelectSQL.Add(´AND´);
End;
quResultado.SelectSQL.Add(´CODTIPO=´+quTipoLavagensCODTIPO.AsString);
quTotal.SelectSQL.Add(´CODTIPO=´+quTipoLavagensCODTIPO.AsString);
QTD:=QTD+1;
End;
ShowMessage(quResultado.SelectSQL.Text);
ShowMessage(quTotal.SelectSQL.Text);
quResultado.SelectSQL.Add(´ORDER BY DATA´);
quResultado.Open;
quTotal.Open;
end;
Drakkar
Curtidas 0
Respostas
Afarias
31/01/2004
|acredito que seja alguma imcompatibildade entre o ORDER BY e o
|´DATA >= :DtInicio AND DATA <= :DtFim´
Não
o q está havendo?? vc recebe uma mensagem de erro?? se SIM, qual??
se não, apenas não aparece registros?? os registros no banco conferem com as opções de consulta?? já testou no IBConsole?? se sim, qual o comando q usou no IBConsole??
T+
|´DATA >= :DtInicio AND DATA <= :DtFim´
Não
o q está havendo?? vc recebe uma mensagem de erro?? se SIM, qual??
se não, apenas não aparece registros?? os registros no banco conferem com as opções de consulta?? já testou no IBConsole?? se sim, qual o comando q usou no IBConsole??
T+
GOSTEI 0
Drakkar
31/01/2004
Sem mensagens de erro, simplesmente nao aparece nada, mas eu sei que tem registros lá porque a quTotal é uma copia da quResultado com a diferença do ORDER BY no final da quResultado e o COUNT E SUM da quTotal estão vindo certos.
Botei a SELECT na mão no IBExpert usando ORDER BY é retornou certo, acho que é problema com o IBX...
Select no IBExpert:
Select * FROM Lavagens Where Data >= ´01.01.2004´ AND Data <= ´30.01.2004´ ORDER BY CODLAVAGEM
Botei a SELECT na mão no IBExpert usando ORDER BY é retornou certo, acho que é problema com o IBX...
Select no IBExpert:
Select * FROM Lavagens Where Data >= ´01.01.2004´ AND Data <= ´30.01.2004´ ORDER BY CODLAVAGEM
GOSTEI 0
Drakkar
31/01/2004
Consegui.. troquei o componente de IBDataSet para IBQuery.. agora fica uma pergunta... qual a diferença entre esses dois?
Vlw pela atenção.
Vlw pela atenção.
GOSTEI 0
Afarias
31/01/2004
|Consegui.. troquei o componente de IBDataSet para IBQuery.. agora
|fica uma pergunta... qual a diferença entre esses dois?
NENHUMA! -- O IBDataSet é uma espécie de IBQuery com IBUpdateSQL junto!
Provavelmente a questão ai é outra...
Qualquer coisa, posta mais informações, blz!
T+
|fica uma pergunta... qual a diferença entre esses dois?
NENHUMA! -- O IBDataSet é uma espécie de IBQuery com IBUpdateSQL junto!
Provavelmente a questão ai é outra...
Qualquer coisa, posta mais informações, blz!
T+
GOSTEI 0
Drakkar
31/01/2004
Pois é... acho que deve ter algum bug no IBDataSet ... o importante é que ta funcionando agora e eu nao prescisei mudar nada no código fonte.. so a propriedade que no IBDataSet era SelectSQL e no IBQuery é só SQL.
GOSTEI 0
Luppy
31/01/2004
Acho que pode ser bug do IbDataSet nessa versão do IBX, tbém tive o mesmo problema, resolveu quando passei o valor dos Params depois do Order By, tente fazer isso e diz qual o resultado.
Pra quem não tem esse problema, qual a versão do IBX que estão usando?
Até
Pra quem não tem esse problema, qual a versão do IBX que estão usando?
Até
GOSTEI 0
Fabio.hc
31/01/2004
A palavra DATA. Será que o IBDataSet não usa esta palavra internamente e quando vc sua a mesma interfere no resultado do IBDataSet no caso o order by.
Eu tive um problema com a palavra NATURAL (de naturalidade), troquei o nome e acabou o problema.
Eu tive um problema com a palavra NATURAL (de naturalidade), troquei o nome e acabou o problema.
GOSTEI 0
Drakkar
31/01/2004
Eu tentei trocar mas não funcionou.. e se tivesse funcionado.. porque no IBQuery não prescisaria trocar?
GOSTEI 0
Fabio.hc
31/01/2004
Fui só uma suposição, eu abri o .pas do IBquery e IBDataSet e pesquisei a palavra DATA. No IBDataSet achei uma variavel DATA e no IBQuery eu não achei. Achei que talvez pudesse interferir no resultado. Mas já que funcionou no IBQuery, beleza, eu só uso IBQuery.
GOSTEI 0
Drakkar
31/01/2004
Blz. Mas acredito que o é problema é com a passagem de parametros antes do do order by, o certo seria passar os parametros antes de abrir a query, é claro que isso no meu caso irá necessitar de um if pra ver se o cbxdata ta checkado, mas como to tentando deixar as coisas o mais rápido possíveis entao to enconomizando até ifs.
hehe
hehe
GOSTEI 0
Afarias
31/01/2004
|Acho que pode ser bug do IbDataSet nessa versão do IBX, tbém tive o
|mesmo problema, resolveu quando passei o valor dos Params depois do
|Order By, tente fazer isso e diz qual o resultado.
é BUG sim... mas não do IBDataSet -- Só se pode(deve) preencher qualquer parâmetro do SQL (SelectSQL) depois de todo SQL ter sido definido!
Não se pode(deve) asinalar os parâmetros e depois concluir o código SQL -- este procedimento está errado.
No mais, sugiro q todos certifíquem-se de atualizar seu IBX para a versão mais recente.
T+
|mesmo problema, resolveu quando passei o valor dos Params depois do
|Order By, tente fazer isso e diz qual o resultado.
é BUG sim... mas não do IBDataSet -- Só se pode(deve) preencher qualquer parâmetro do SQL (SelectSQL) depois de todo SQL ter sido definido!
Não se pode(deve) asinalar os parâmetros e depois concluir o código SQL -- este procedimento está errado.
No mais, sugiro q todos certifíquem-se de atualizar seu IBX para a versão mais recente.
T+
GOSTEI 0