![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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 гигабайта оперативки. |