![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() В коде вызывается несколько процедур, на определённом моменте начинает появляться Range Check Error
Код:
//проходит нормально ArrStr[cParkingPrice]:=GetDecimalEditSubSQL('v.ParkingPrice',edParkingFrom,edParkingTo,chbParking); //С этой и последующих начинается ошибка ArrStr[cRooms]:=GetDecimalEditSubSQL('v.CountRoom',edRoomFrom,edRoomTo,lbRooms); //Код процедур function GetDecimalEditSubSQL(FieldName:WideString;LeftEdit,RightEdit:TsDecimalSpinEdit;lb:TObject):WideString; var ArrStr:TArrStr; begin if CheckLabel(TLabel(lb)) then begin SetLength(ArrStr,2); if LeftEdit.Text<>'' then ArrStr[0]:='('+FieldName+'>='''+LeftEdit.Text+''')' else ArrStr[0]:=''; if RightEdit.Text<>'' then ArrStr[1]:='('+FieldName+'<='''+RightEdit.Text+''')' else ArrStr[1]:=''; Result:=MakeWhereSQL(ArrStr); end; end; //<--Собственно Ошибка возникает на выходе из этой процедуры function CheckLabel(lb:TLabel):Boolean; begin Result:=lb.Font.Color=clWindowText; end; function MakeWhereSQL(Values:TArrStr):WideString; var x:Integer; Str:WideString; function CheckAnd:WideString; begin if Str<>'' then if Str[Length(Str)]=')' then Result:='and' else Result:=''; end; begin Str:=''; for x:=0 to High(Values) do Str:=Str+CheckAnd+Values[x]; if Str<>'' then if Str[Length(Str)]='d' then SetLength(Str,Length(Str)-3); Result:=Str; end; Очень нужна помощь... Последний раз редактировалось Lost_Fish, 29.03.2012 в 08:43. |
#2
|
||||
|
||||
![]() иди отладчиком, смотри на какой строчке ошибка, смотри значение индекса...
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Lost_Fish (29.03.2012)
|
#3
|
||||
|
||||
![]() Вот я затупил, нет тут ошибки тему можно удалить
|
#4
|
|||
|
|||
![]() Ошибка Range Check Error;
При задании размерности массива выдает Range Check Error. Пытался сделать через статичный массив, тогда происходило переполнение стека. Подскажите как с этим бороться, уменьшить размерность массива не могу, это географические данные. Код:
type TAz = record count : integer; distaln : array [1..2, 0..360000] of double; ... procedure TForm1.Button1Click(Sender: TObject); var AzSel : array of TAz; begin ... SetLength(AzSel, 3600); ... end; |
#5
|
||||
|
||||
![]() Цитата:
Потом ты резервируешь память под 3600 таких элементов которые займут 5760020*3600=20736072000 байт - ~20 гигабайт (!). Даже если у тебя есть столько оперативки в компьютере, то всё равно под Win32 для приложений отводится всего 2 гигабайта оперативки. |