Erro em consulta sql

Delphi

31/08/2005

Estou tentando trazer os ultimos registros de um tabela com a seguinte instrucao

DM.CdsClientes.CommandText := ´select * from (select * from ftclientes order by codcli desc limit 10 offset 0) as teste order by codcli´;

Meu BD é o Postgresql

Porem me retorna o seguinte erro: List index out of bounds(-1)

O que esta errado?

Abs


Felipeiw

Felipeiw

Curtidas 0

Respostas

Martins

Martins

31/08/2005

Porem me retorna o seguinte erro: List index out of bounds(-1)

Seu BD tem quantos registros?

pois parece q vc está querendo trazer mais registros do q ha nele, tanto eh q apresentou este erro, informando q a lista de indice está fora do limite.


GOSTEI 0
Felipeiw

Felipeiw

31/08/2005

tem 42000 registros.


GOSTEI 0
Rjun

Rjun

31/08/2005

Esse erro não se refere ao seu código SQL. Em que momento ele dispara esse erro?


GOSTEI 0
Felipeiw

Felipeiw

31/08/2005

DM.CdsClientes.Close;
DM.CdsClientes.CommandText := ´select * from (select * from ftclientes order by codcli desc limit 10 offset 0) as teste order by codcli´;
DM.CdsClientes.Open;

Neste momento.


GOSTEI 0
Rômulo Barros

Rômulo Barros

31/08/2005

Todo TClienteDataSet está ligado a um TDataSetProvider q por sinal poderá estar ligado a um TSqlQuery(Seu caso) ou tSqlTable(não é seu caso).
O componente TSqlQuery possui a propriedade Sql q é do tipo TStrings, logo poderemos acessá-lo assim:

TSqlQuery.Sql.Add(´primeira linha da SQL´);
Entretanto, se nenhuma linha tiver sido criada e vc tentar acessar assim:
TSqlQuery.Sql[2] := ´Primeira linha da SQL´ irá ser levantado uma exceção q exibirá o erro ListIndexOutOfBonds...

Então.. quando vc faz: TClientDataSet.CommandText := ´Select blá.. blá.. blá... blá...´ .. ... ; automaticamente o TClientDataSet alimenta a propriedade Sql do componente TSqlQuery. ´ACREDITO EU Q SE NÃO POSSUIR NENHUMA LINHA ´ativa´ NO TSQLQUERY, VAÍ DÁ O ERRO Q ACONTECE COM VC.´

[b:b69ce5b692]Solução:[/b:b69ce5b692] ´SE REALMENTE FOR ISSO Q FALEI´, alimente a propriedade SQL do TSqlQuery, e não a propriedade CommandText do TClientDAtaSet. Depois, é só abrir o TClientDataSet.

Ate mais. !!! :wink:


GOSTEI 0
POSTAR