Fórum List index out of bounds(2). Por que está dando isso??? #289657
27/07/2005
0
Estou com o seguinte problema.
Tenho um relatório onde eu uso um DBLookupComboBox só pra lista uns dados que eu preciso para filtrar no relatório.
Neste DBLookupComboBox estão aparecendo apenas dois dados.
Tenho o seguinte código quando eu clico em Gerar:
cdsAteRea.Close;
cdsAteRea.CommandText := ´select SERVICO, DESCR_RESULTADO, ´ +
´count(DESCR_RESULTADO) as TOTAL ´ +
´from ORDEM_SERVICO ´ +
´where DATA between :P_DATAINI and :P_DATAFIN ´ +
´and COD_CASA = :P_CODCASA ´ +
´group by SERVICO, DESCR_RESULTADO ´ +
´order by SERVICO, DESCR_RESULTADO´;
cdsAteRea.Params[0].AsDateTime := StrToDate(medtDataIni.Text);
cdsAteRea.Params[1].AsDateTime := StrToDate(medtDataFin.Text);
cdsAteRea.Params[2].AsInteger := StrToInt(dbedtCodCasa.Text);
cdsAteRea.Open;
Quando eu gero uma vez, selecinando o primeiro dado do DBLookupComboBox, o relatório é gerado perfeitamento.
Quando eu vou gerar escolhendo o segundo dado do DBLookupComboBox, me retorna o seguinte erro: List index out of bounds(2). Não descobri porque esta me dando esse erro.
cdsAteRea.Close;
cdsAteRea.CommandText := ´select SERVICO, DESCR_RESULTADO, ´ +
´count(DESCR_RESULTADO) as TOTAL ´ +
´from ORDEM_SERVICO ´ +
´where DATA between :P_DATAINI and :P_DATAFIN ´ +
´and COD_CASA = :P_CODCASA ´ +
´group by SERVICO, DESCR_RESULTADO ´ +
´order by SERVICO, DESCR_RESULTADO´;
cdsAteRea.Params[0].AsDateTime := StrToDate(medtDataIni.Text);
cdsAteRea.Params[1].AsDateTime := StrToDate(medtDataFin.Text);
[color=red:3aaeb4500e]cdsAteRea.Params[2].AsInteger := StrToInt(dbedtCodCasa.Text);[/color:3aaeb4500e] //Aqui que gera o ERRO!!!
cdsAteRea.Open;
Alguém pode me ajudar???
Desde já agradeço-lhes...
Cristiano Mário
Cristianojedi
Curtir tópico
+ 0Posts
27/07/2005
Cristianojedi
Massuda, Kotho, Rjun, Gandhalf, etc, etc, etc...
Cristiano
Gostei + 0
27/07/2005
Cristianojedi
Estou precisando muito dessa ajuda...
Ninguém nunca passou por isso???
Ajude-me quem puder....
Cristiano Mário
Gostei + 0
27/07/2005
Rjun
cdsAteRea.CommandText := ´select SERVICO, DESCR_RESULTADO, ´ + ´count(DESCR_RESULTADO) as TOTAL ´ + ´from ORDEM_SERVICO ´ + ´where DATA between :P_DATAINI and :P_DATAFIN ´ + ´and COD_CASA = :P_CODCASA ´ + ´group by SERVICO, DESCR_RESULTADO ´ + ´order by SERVICO, DESCR_RESULTADO´; cdsAteRea.ParamByName(´P_DATAINI´).AsDateTime := StrToDate(medtDataIni.Text); cdsAteRea.ParamByName(´P_DATAFIN´).AsDateTime := StrToDate(medtDataFin.Text); cdsAteRea.ParamByName(´P_CODCASA´).AsInteger := StrToInt(dbedtCodCasa.Text); cdsAteRea.Open; try // seu código finally cdsAteRea.Close; end;
Gostei + 0
27/07/2005
Cristianojedi
cdsAteRea: Paramenter ´P_CODCASA´ not found.
Por que que quando eu selecino o primeiro dado do DBLoockupComboBox funciona perfeitamente e quando eu seleciono o segundo dado do DBLoockupComboBox e peço pra gerar de novo da esse erro???
Cristiano
Gostei + 0
27/07/2005
Rjun
Gostei + 0
27/07/2005
Cristianojedi
begin
cdsAteRea.Close;
cdsAteRea.CommandText := ´select SERVICO, DESCR_RESULTADO, ´ +
´count(DESCR_RESULTADO) as TOTAL ´ +
´from ORDEM_SERVICO ´ +
´where DATA between :P_DATAINI and :P_DATAFIN ´ +
´and COD_CASA = :P_CODCASA ´ +
´group by SERVICO, DESCR_RESULTADO ´ +
´order by SERVICO, DESCR_RESULTADO´;
cdsAteRea.Params.ParamByName(´P_DATAINI´).AsDateTime := StrToDate(medtDataIni.Text);
cdsAteRea.Params.ParamByName(´P_DATAFIN´).AsDateTime := StrToDate(medtDataFin.Text);
cdsAteRea.Params.ParamByName(´P_CODCASA´).AsInteger :=
StrToInt(dbedtCodCasa.Text);
cdsAteRea.Open;
if cdsAteRea.IsEmpty then
begin
Application.MessageBox(´Não existem dados para estas especificações.´,
´Informação...´, MB_OK + MB_ICONINFORMATION);
Abort;
end;
rvpAteRea.SetParam(´RECEPCAO´, ´COM TRIAGEM´);
rvpAteRea.SetParam(´CASA´, dblcbCasa.Text);
rvpAteRea.SetParam(´DATAINI´, medtDataIni.Text);
rvpAteRea.SetParam(´DATAFIN´, medtDataFin.Text);
rvpAteRea.ExecuteReport(´rptAteRea´);
finally
cdsAteRea.Close;
end;
end;
end;
Gostei + 0
27/07/2005
Rjun
var ComandoSQL: string; begin ComandoSQL = ´select SERVICO, DESCR_RESULTADO, ´ + ´count(DESCR_RESULTADO) as TOTAL ´ + ´from ORDEM_SERVICO ´ + ´where DATA between ¬s and ¬s ´ + ´and COD_CASA = ¬d ´ + ´group by SERVICO, DESCR_RESULTADO ´ + ´order by SERVICO, DESCR_RESULTADO´; cdsAteRea.CommandText = Format(ComandoSQL, [medtDataIni.Text, medtDataIni.Text, StrToInt(dbedtCodCasa.Text)]); cdsAteRea.Open; try if cdsAteRea.IsEmpty then begin Application.MessageBox(´Não existem dados para estas especificações.´, ´Informação...´, MB_OK + MB_ICONINFORMATION); Abort; end; rvpAteRea.SetParam(´RECEPCAO´, ´COM TRIAGEM´); rvpAteRea.SetParam(´CASA´, dblcbCasa.Text); rvpAteRea.SetParam(´DATAINI´, medtDataIni.Text); rvpAteRea.SetParam(´DATAFIN´, medtDataFin.Text); rvpAteRea.ExecuteReport(´rptAteRea´); finally cdsAteRea.Close; end; end;
Gostei + 0
27/07/2005
Cristianojedi
Consegui tirar o erro.
Como eu passava um parâmetro na Query que estava ligada ao ClientDataSet, eu tirei o parâmetro lá de dentro e coloquei na mão mesmo, no código.
Aí eu dei umas testadas aqui e aparentemente deu certo. Posso selecionar qualquer dado dentro do DBLoockupComboBox que está gerando o relatório.
Muito obrigado pelas dicas...
Abraço!!!
Cristiano Mário
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)