Задать вопрос
@Bengilson

Почему случается ошибка?

Добрый день! У меня появилась небольшая проблема :C
В общем вот : в программе стоит ListBox и ValueListEditor.
При нажатии на пункт в листбоксе, в ValueListEditor вносятся данный из БД.
При нажатии на другой пункт, да или просто если заново нажал, то данный должны удалиться и заного прописаться.

КОД :
procedure TForm_Agents.ListBox1Click(Sender: TObject);
var
  I: Integer;

begin

  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('SELECT * FROM users WHERE nickname = @asas');
  ADOQuery1.Parameters.ParamByName('@asas').Value := ListBox1.Items[ListBox1.ItemIndex];
  ADOQuery1.Open;

  while ValueListEditor1.Strings.Count > 0 do
      ValueListEditor1.DeleteRow(ValueListEditor1.Row);

  ValueListEditor1.InsertRow('ФИО',(ADOQuery1.FieldByName('fio').AsString),true);
  ValueListEditor1.InsertRow('Никнейм',(ADOQuery1.FieldByName('nickname').AsString),true);
  ValueListEditor1.InsertRow('Доступ',(ADOQuery1.FieldByName('level').AsString),true);
  ValueListEditor1.InsertRow('Скайп',(ADOQuery1.FieldByName('skype').AsString),true);
  ValueListEditor1.InsertRow('Нахождение',(ADOQuery1.FieldByName('location').AsString),true);
  ValueListEditor1.InsertRow('Подробнее',(ADOQuery1.FieldByName('about').AsString),true);
  ValueListEditor1.InsertRow('Взятые задания',(ADOQuery1.FieldByName('m_take').AsString),true);
  ValueListEditor1.InsertRow('Выполенные задания',(ADOQuery1.FieldByName('m_complete').AsString),true);
  ValueListEditor1.InsertRow('Штрафы',(ADOQuery1.FieldByName('penalty').AsString),true);
  ValueListEditor1.InsertRow('Уникальный ID',(ADOQuery1.FieldByName('id').AsString),true);

end;


При первом клике вроде всё нормально, а при последующих выдаёт ошибку : Grid Index out of Range.

Заранее спасибо за помощь !)
  • Вопрос задан
  • 347 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@kalapanga
А почему бы не так: ValueListEditor1.Strings.Clear ?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Foolleren
@Foolleren
Компас есть, копать не люблю...
while ValueListEditor1.Strings.Count > 0 do
ValueListEditor1.DeleteRow(ValueListEditor1.Row);
присмотритесь к этому участку кода,
"если лень разбираться, код работает, и лишь докучает сообщением об ошибке,
заверните его в try exception "
-пособие быдлокодера
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы