Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Invalid pointer operation [D7, XP]


Страницы:   1 2 3

uncle benc ©   (2007-02-05 12:32:00) 

Господа, помогите разобраться.
Есть процедура вида:
procedure ClearGrid(var Grid : TGrid);
var i : Integer;
begin
for i:=1 to Grid.RowCount-1 do
  Grid.Rows[i].Clear;
end;


Периодически (не каждый раз), при работе данной процедуры вылетает ошибка указанная в заголовке вопроса.
С чем это может быть связано?


Германн   (2007-02-06 02:03:00) [1]


> Anatoly Podgoretsky ©   (05.02.07 20:31) [49]
>
> > uncle benc  (05.02.2007 16:43:46)  [46]
>
> В школе на математику принципиально не ходил.
>

Ранее была "слепая печать". Её преодолели. Так теперь ещё возникло "слепое" чтение! :-)


Anatoly Podgoretsky   (2007-02-05 20:31:00) [2]

> uncle benc  (05.02.2007 16:43:46)  [46]

В школе на математику принципиально не ходил.


Johnmen   (2007-02-05 17:15:00) [3]

> uncle benc   (05.02.07 15:43) [25]
>    Grid.RowCount := Query. RecordCount+1


Садитесь. Два.


uncle benc   (2007-02-05 16:46:00) [4]

Хотя, ладно, всем спасибо. Думаю нет смысла дальше развивать эту тему, т.к. переливаем из пустого в порожнее.


uncle benc   (2007-02-05 16:43:00) [5]


> RASkov   (05.02.07 16:32) [44]

Тут нет ошибки.

> значения RowCount начинаются с 0, RecordCount с 1


Исходя из этого RowCount := RecordCount+1
т.е. если возвращенных записей 1, то RowCount станет равным 2 (заголовок и строка)


RASkov   (2007-02-05 16:33:00) [6]

> Т.е. мы должны добавить столько строк, сколько записей в
> таблице+1

Т.е. мы должны добавить столько строк, сколько записей в таблице+1 на заголовки


RASkov   (2007-02-05 16:32:00) [7]

И вот еще
if Query.RecordCount >= 1 then
    Grid.RowCount := Query.RecordCount+1
   else Grid.RowCount := 2;
   ClearGrid(Grid);
По ходу надо +2 делать...

Т.е. мы должны добавить столько строк, сколько записей в таблице+1
А значения RowCount начинаются с 0, RecordCount с 1
Ну и здесь ошибка
Grid.Cells[0 , i] := Query.FieldByName('Id').AsString;
Нет последней строчки в гриде....


uncle benc   (2007-02-05 16:24:00) [8]

Поле Id - счетчик. (т.е. LongInt)


Elen   (2007-02-05 16:23:00) [9]


> RASkov

А извини я [29] пропустила :)


Elen   (2007-02-05 16:21:00) [10]


> RASkov
  Alarm[i] := True else Alarm[i] := False;

Ты хочеш сказать что нужно   Alarm[i-1] := True else Alarm[i-1] := False; т.к. он с нуля начинается? тогда в [28] автор опять мозги пудрит


RASkov   (2007-02-05 16:14:00) [11]

> [37] uncle benc   (05.02.07 16:08)
> i := 1


i:=1
SetLength(Alarm, Query.RecordCount);
While not Query.Eof do
  begin
    Grid.Cells[0,i] := Query.FieldByName('Id').AsString;
    Grid.Cells[1,i] := DateTimeToStr(Query.FieldByName('DateIn').AsFloat);
    Grid.Cells[2,i] := Query.FieldByName('Avtor').AsString;
    Grid.Cells[3,i] := Query.FieldByName('Zayava').AsString;
    if Query.FieldByName('DateOut').AsFloat <> 0 then
      Grid.Cells[4,i] := DateTimeToStr(Query.FieldByName('DateOut').AsFloat);
    Grid.Cells[5,i] := Query.FieldByName('Ispolnitel').AsString;
    if Query.FieldByName('Alarm').AsBoolean then
        Alarm[i] := True else Alarm[i] := False;
    Query.Next;
    i:=i+1;
  end;



> А поле ID у тебя строковое?

А какя разница если Grid.Cells[0,i] := Query.FieldByName('Id'). AsString;


Elen   (2007-02-05 16:09:00) [12]


> uncle benc

А поле ID у тебя строковое? И что за ошибка дословно?


RASkov   (2007-02-05 16:08:00) [13]

> [31] Игорь Шевченко ©   (05.02.07 15:57)


> Убивать из рогатки

Я тоже порой наподобии так обзываю идентификаторы, с англ. проблема, а так более менее понятно

ЗЫ пишу в основном только для себя.


uncle benc   (2007-02-05 16:08:00) [14]

i := 1


Elen   (2007-02-05 16:08:00) [15]


> то компилятору не понравились названия полей и он нарочно
> вставил генерацию ошибки в программу

Это ты пошутил?


Loginov Dmitry   (2007-02-05 16:08:00) [16]

Может на грид обработчики какие повесил?


Elen   (2007-02-05 16:08:00) [17]


> Теперь ошибка вылезает тут:

Так проверь чему у тебя равно i


uncle benc   (2007-02-05 16:07:00) [18]


> Игорь Шевченко ©   (05.02.07 15:57) [31]


Я понял, вы имели в виду, что компилятору не понравились названия полей и он нарочно вставил генерацию ошибки в программу (своеобразная рогатка, которая убивает желание программировать)


uncle benc   (2007-02-05 15:58:00) [19]


> Игорь Шевченко ©   (05.02.07 15:57) [31]
>
> > Avtor
>
>
> > Ispolnitel
>
>
> > Zayava.DateIn

Что это меняет?


Игорь Шевченко   (2007-02-05 15:57:00) [20]


> Avtor


> Ispolnitel


> Zayava.DateIn


Убивать из рогатки


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо