PDA

Ver la Versión Completa : range check error


thelibmx
16-10-2007, 20:51:34
hola amigos, me he encontrado con este problemita, busque en los foros un poco y creo que no encontre mucho al respecto, este codigo que utilizo lo saque de aqui del foro y funciona bien, pero me he encontrado con una sorpresa ahora, estoy llenando un combobox en tiempo de ejecucion, en otras pantallas que tengo en el mismo programa si funciona pero en una que tengo no, me manda un mensaje de range check error, lo que yo quiero hacer es sacar diferentes años que se encuentran almacenados en una tabla, y que me los muestre en un combobox, para posteriormente hacer un filtro por esos años encontrados, aqui esta el codigo que utilizo


procedure TFormquincena.Button3Click(Sender: TObject);
var
Count1,pos: Cardinal;
text: string;
begin

Pos := ComBoxselectoranio.SelStart;
ComBoxselectoranio.Items.Clear;
Text := ComBoxselectoranio.Text;

fs.Query_catalogo_quincenasmod.Close;
fs.Query_catalogo_quincenasmod.SQL.Clear;
fs.Query_catalogo_quincenasmod.SQL.Add('select DISTINCT anio from catalogo_quincenas');
fs.Query_catalogo_quincenasmod.ExecSQL;
fs.Query_catalogo_quincenasmod.Open;

Count1:=fs.Query_catalogo_quincenasmod.RecordCount;
showmessage(inttostr(count1));

if Count1 > 0 then
begin
repeat Dec(Count1);
ComBoxselectoranio.Items.Add(fs.Query_catalogo_quincenasmod.FieldByName 'anio').AsString);
formconecciones.Queryregistrovaca.Next;
until Count1 = 0;
ComBoxselectoranio.ItemIndex := 0;
ComBoxselectoranio.SelStart := Pos;
ComBoxselectoranio.SelLength := 255;
end;

end;


el error me lo manda en esta linea

Count1:=formconecciones.Query_catalogo_quincenasmod.RecordCount;

range check error,
algo fuera de rango pero no identifico el error podrian ayudarme o darme una pista, si necesitan mas informacion pueden preguntar, les agradesco su ayuda :D

jhonny
16-10-2007, 22:09:24
Bueno, parece que RecordCount tiene por defecto el valor -1 y un tipo Cardinal va desde 0 hasta 4294967295 por lo que -1 no estaria dentro de dicho rango ;). Una solución sería declarar Count1 como Integer, pero creo que el problema debe ser resuelto mas a fondo ya que ese RecordCount te debe estar devolviendo -1 y quiza no sea lo que esperas.

thelibmx
16-10-2007, 23:35:23
en efecto si devuelve -1, no se por que, algun problema en la consulta de esas inexplicables paranormales de otro mundo, probablemente es de la ciencia paranormal de la informatica, en fin lo cambie a integer el cardinal y la la linea quedo asi

Count1:=fs.Query_catalogo_quincenasmod.RowsAffected;


asi hace lo que quiero, aunque no se cuales sean los probables efectos secundarios, pero hasta ahorita todo bien. gracias por la ayuda y hay que dejar bien en claro que: el mensaje de error que manda es por que en efecto regresaba de valor -1
bueno quiero suponer que fue eso... gracias jhonny

jhonny
16-10-2007, 23:55:46
No quieras suponer que es eso, ya es seguro que a sido eso, debido a que -1 no esta dentro del rango de los Cardinales, hay que anotar que el RecordCount no funciona con todos los hijos del TDataSet, quizá esa sea la razón por la que te devuelve siempre -1 ;).