1. Вы считаете, что запрос у вас всегда будет возвращать результат, но это не так, поэтому надо проверять сначала есть ли там что-то, а уже потом пробовать обращаться к данным:
Код:
form8.ADOQuery1.sql.text:='select privilegue from pol where name ="123"';
form8.ADOQuery1.open;
if form8.ADOQuery1.isEmpty then Exit;
2. Обращаться к полю таблицы по индексу можно, но только в том случае, если у вас структура этой таблицы будет 100% нерушима. А вот в процессе разработки это лучше делать по имени поля:
Код:
Priv := ADODataSet1.FieldByName('privilegue').AsString;
или так:
Код:
Priv := ADODataSet1.FieldByName('privilegue').Value;
или так:
Код:
Priv := ADODataSet1['privilegue'];
каждый из вариантов удобен по своему